UNPKG

seeder-foreign-keys

Version:

Replace placeholders in table records with keys & field values from other table records, or with expressions.

162 lines (140 loc) 4.38 kB
const seederFk = require('../lib'); const { assert } = require('chai'); const data0 = { table1: [ { id: 1, name: 'a' }, { id: 2, name: 'b' } ], table2: [ { _id: 11, name: 'aa' }, { _id: 12, name: 'bb' } ] }; const data1 = { users: [ { id: 1, name: 'a' }, { id: 2, name: 'b' } ], posts: [ { _id: 11, name: 'aa', userId: '->users' }, { _id: 12, name: 'bb', userId: '->users' }, { _id: 13, name: 'cc', userId: '->users' }, { _id: 14, name: 'dd', userId: '->users' }, { _id: 15, name: 'ee', userId: '->users' } ] }; const data2 = { users: [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 5, name: 'e' } ], posts: [ { _id: 11, name: 'aa', userId: '->users:random' }, { _id: 12, name: 'bb', userId: '->users:random:' }, { _id: 13, name: 'cc', userId: '->users:random:id' }, { _id: 14, name: 'dd', userId: '->users:random:name' }, { _id: 15, name: 'ee', userId: '->users:random:foo' } // undefined ] }; const data3 = { users: [ { id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' } ], posts: [ { _id: 11, name: 'aa', userIds: ['->users:next', '->users:next'] }, { _id: 12, name: 'bb', userIds: ['->users:next', '->users:next', '->users:next'] } ] }; const data4 = { users: [ { id: 1, name: 'a' }, { id: 2, name: 'b' } ], posts: [ { _id: 11, name: 'aa', userId: '->users:next', foo: '->users:curr' }, { _id: 12, name: 'bb', userId: '->users:next', foo: '->users:curr', bar: '->users:curr' }, { _id: 13, name: 'cc', userId: '->users:next', foo: '->users:curr' }, { _id: 14, name: 'dd', userId: '->users:next', foo: '->users:curr' }, { _id: 15, name: 'ee', userId: '->users:next', foo: '->users:curr' } ] }; const data5 = { users: [ { id: 1, name: 'a', foo: { bar: 'a1' }, baz: [{ bar: 'a2' }] }, { id: 2, name: 'b', foo: { bar: 'b1' }, baz: [{ bar: 'b2' }] } ], posts: [ { _id: 11, name: 'aa', fooBar: '->users:next:foo.bar', barBar: '->users:curr:baz.0.bar' }, { _id: 12, name: 'bb', fooBar: '->users:next:foo.bar', barBar: '->users:curr:baz.0.bar' } ] }; const testOptions = { testModeIndex: true }; describe('foreign-keys.test.js - handles types', () => { describe('no placeholders', () => { const ret = clone(data0); seederFk(ret); assert.deepEqual(ret, data0); }); describe('random type', () => { it('->users', () => { const recs = clone(data1); seederFk(recs, testOptions); assert.deepEqual(recs.posts, [ { _id: 11, name: 'aa', userId: 1 }, { _id: 12, name: 'bb', userId: 2 }, { _id: 13, name: 'cc', userId: 1 }, { _id: 14, name: 'dd', userId: 2 }, { _id: 15, name: 'ee', userId: 1 } ]); }); it('->users:random & users:random:fieldName', () => { const recs = clone(data2); seederFk(recs, testOptions); assert.deepEqual(recs.posts, [ { _id: 11, name: 'aa', userId: 1 }, { _id: 12, name: 'bb', userId: 2 }, { _id: 13, name: 'cc', userId: 3 }, { _id: 14, name: 'dd', userId: 'd' }, { _id: 15, name: 'ee', userId: undefined } ]); }); }); describe('next type', () => { it('->users:next', () => { const recs = clone(data3); seederFk(recs, testOptions); assert.deepEqual(recs.posts, [ { _id: 11, name: 'aa', userIds: [1, 2] }, { _id: 12, name: 'bb', userIds: [3, 4, 1] } ]); }); it('->users:next & users:curr', () => { const recs = clone(data4); seederFk(recs, testOptions); assert.deepEqual(recs.posts, [ { _id: 11, name: 'aa', userId: 1, foo: 1 }, { _id: 12, name: 'bb', userId: 2, foo: 2, bar: 2 }, { _id: 13, name: 'cc', userId: 1, foo: 1 }, { _id: 14, name: 'dd', userId: 2, foo: 2 }, { _id: 15, name: 'ee', userId: 1, foo: 1 } ]); }); it('handles dot notation', () => { const recs = clone(data5); seederFk(recs, testOptions); assert.deepEqual(recs.posts, [ { _id: 11, name: 'aa', fooBar: 'a1', barBar: 'a2' }, { _id: 12, name: 'bb', fooBar: 'b1', barBar: 'b2' } ]); }); }); }); function clone (obj) { return JSON.parse(JSON.stringify(obj)); }