1 | const { Model } = require('objection')
|
2 | const TableNamer = require('../')
|
3 |
|
4 | function getTableNameFromClass (cls) {
|
5 | return cls.tableName
|
6 | }
|
7 |
|
8 | function upperFirst ([c, ...rest]) {
|
9 | return [c.toUpperCase(), ...rest].join('')
|
10 | }
|
11 |
|
12 | function overrideClassName (cls, name) {
|
13 | Object.defineProperty(cls, 'name', { value: name })
|
14 | }
|
15 |
|
16 | describe('table name from class name', () => {
|
17 | describe('when using defaults', () => {
|
18 | it("should resolve 'tablename' with camelCase and plural", () => {
|
19 | class BaseModel extends TableNamer()(Model) {}
|
20 | const testClass = {
|
21 | Foo: 'foos',
|
22 | FooBar: 'fooBars',
|
23 | fooBar: 'fooBars',
|
24 | Person: 'people'
|
25 | }
|
26 | class TestModel extends BaseModel {}
|
27 | Object.entries(testClass).forEach(([className, tableName]) => {
|
28 | overrideClassName(TestModel, className)
|
29 | expect(getTableNameFromClass(TestModel)).toStrictEqual(tableName)
|
30 | })
|
31 | })
|
32 | })
|
33 |
|
34 | describe('when using customs', () => {
|
35 | it("should resolve 'tableName'", () => {
|
36 | const mock = jest.fn(className => upperFirst(className))
|
37 | class BaseModel extends TableNamer({
|
38 | caseMapper: mock
|
39 | })(Model) {}
|
40 | const testClass = {
|
41 | foo_bar: 'Foo_bar',
|
42 | fooBar: 'FooBar'
|
43 | }
|
44 | class TestModel extends BaseModel {}
|
45 | Object.entries(testClass).forEach(([className, tableName]) => {
|
46 | overrideClassName(TestModel, className)
|
47 | expect(getTableNameFromClass(TestModel)).toStrictEqual(tableName)
|
48 | expect(mock).toHaveBeenCalledWith(className)
|
49 | })
|
50 | })
|
51 | })
|
52 | })
|