UNPKG

1.56 kBJavaScriptView Raw
1const { Model } = require('objection')
2const TableNamer = require('../')
3
4function getTableNameFromClass (cls) {
5 return cls.tableName
6}
7
8function upperFirst ([c, ...rest]) {
9 return [c.toUpperCase(), ...rest].join('')
10}
11
12function overrideClassName (cls, name) {
13 Object.defineProperty(cls, 'name', { value: name })
14}
15
16describe('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})