Comparing version 0.1.4 to 0.1.5
{ | ||
"name": "teseo", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"description": "Small utility that helps to find a way out of a relational db dependency labyrinth", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -30,2 +30,14 @@ const chumpi = require('chumpi'); | ||
} | ||
if (Array.isArray(_source)) { | ||
// Get next props items | ||
return _source.map((s) => { | ||
if (s[props[0]]) { | ||
return s[props[0]]; | ||
} | ||
return s; | ||
}); | ||
} | ||
if (!_source) { | ||
return _source; | ||
} | ||
return retrieve(_source, props); | ||
@@ -53,2 +65,4 @@ }; | ||
const execute = (tables, master = 'master', name = 'name') => { | ||
console.info(`Schema to sort has ${tables.length} tables`); | ||
const analyzed = analyzer(tables, name, master); | ||
@@ -61,3 +75,3 @@ chumpi.validation.enforce(analyzed, schema); | ||
if (sorted.length === tables.length) { | ||
return { order: sorted }; | ||
return tables; | ||
} | ||
@@ -78,4 +92,17 @@ | ||
} | ||
console.info(`Sorted schema has ${sorted.length} tables`); | ||
return { order: sorted }; | ||
// Return tables content in the sort order | ||
const sortedSchema = sorted.reduce((acc, table) => { | ||
// need to loop trough tables and compare the name string against table | ||
// if it matches, then I push the whole tables instance to acc | ||
for (const t of tables) { | ||
if (table === get(t, name, { mandatory: true })) { | ||
acc.push(t); | ||
} | ||
} | ||
return acc; | ||
}, []); | ||
return sortedSchema; | ||
}; | ||
@@ -82,0 +109,0 @@ |
@@ -10,5 +10,5 @@ const path = require('path'); | ||
describe('teseo basic cases suite', () => { | ||
describe('cli basic cases suite', () => { | ||
it('Parent with one child', async () => { | ||
const expected = { order: ['master', 'detail'] }; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }]; | ||
const dir = path.resolve(__dirname, '01'); | ||
@@ -19,7 +19,7 @@ const input = ['node', 'teseo', '-d', dir, '-f', 'yaml']; | ||
const conv = await execute('parse', 'yaml', x); | ||
assert.deepEqual(conv[0], expected); | ||
assert.deepEqual(conv[0], expected[0]); | ||
}); | ||
it('Parent with more than one child', async () => { | ||
const expected = { order: ['master', 'detail', 'detail2'] }; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['master'] }]; | ||
const dir = path.resolve(__dirname, '02'); | ||
@@ -30,7 +30,7 @@ const input = ['node', 'teseo', '-d', dir, '-f', 'yaml']; | ||
const conv = await execute('parse', 'yaml', x); | ||
assert.deepEqual(conv[0], expected); | ||
assert.deepEqual(conv[0], expected[0]); | ||
}); | ||
it('Master with one child and grandchild', async () => { | ||
const expected = { order: ['master', 'detail', 'detail2'] }; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['detai l'] }]; | ||
const dir = path.resolve(__dirname, '03'); | ||
@@ -41,7 +41,7 @@ const input = ['node', 'teseo', '-d', dir, '-f', 'yaml']; | ||
const conv = await execute('parse', 'yaml', x); | ||
assert.deepEqual(conv[0], expected); | ||
assert.deepEqual(conv[0], expected[0]); | ||
}); | ||
it('Detail: Master; Detail2: Detail; Detail3: Detail, Detail2; Detail4: master, detail3', async () => { | ||
const expected = { order: ['master', 'detail', 'detail2', 'detail3', 'detail4'] }; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['detail'] }, { name: 'detail3', master: ['detail', 'detail2'] }, { name: 'detail4', master: ['master', 'detail3'] }]; | ||
const dir = path.resolve(__dirname, '04'); | ||
@@ -52,3 +52,3 @@ const input = ['node', 'teseo', '-d', dir, '-f', 'yaml']; | ||
const conv = await execute('parse', 'yaml', x); | ||
assert.deepEqual(conv[0], expected); | ||
assert.deepEqual(conv[0], expected[0]); | ||
}); | ||
@@ -55,0 +55,0 @@ |
@@ -6,32 +6,32 @@ const path = require('path'); | ||
describe('teseo basic cases suite', () => { | ||
describe('main basic cases suite', () => { | ||
const yaml = 'yaml'; | ||
it('Parent with one child', async () => { | ||
const expected = ['master', 'detail']; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }]; | ||
const dir = path.resolve(__dirname, '01'); | ||
const actual = await main({ dir, format: yaml }); | ||
assert.deepEqual(actual.order, expected); | ||
assert.deepEqual(actual, expected); | ||
}); | ||
it('Parent with more than one child', async () => { | ||
const expected = ['master', 'detail', 'detail2']; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['master'] }]; | ||
const dir = path.resolve(__dirname, '02'); | ||
const actual = await main({ dir, format: yaml }); | ||
assert.deepEqual(actual.order, expected); | ||
assert.deepEqual(actual, expected); | ||
}); | ||
it('Master with one child and grandchild', async () => { | ||
const expected = ['master', 'detail', 'detail2']; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['detail'] }]; | ||
const dir = path.resolve(__dirname, '03'); | ||
const actual = await main({ dir, format: yaml }); | ||
assert.deepEqual(actual.order, expected); | ||
assert.deepEqual(actual, expected); | ||
}); | ||
it('Detail: Master; Detail2: Detail; Detail3: Detail, Detail2; Detail4: master, detail3', async () => { | ||
const expected = ['master', 'detail', 'detail2', 'detail3', 'detail4']; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'detail2', master: ['detail'] }, { name: 'detail3', master: ['detail', 'detail2'] }, { name: 'detail4', master: ['master', 'detail3'] }]; | ||
const dir = path.resolve(__dirname, '04'); | ||
const actual = await main({ dir, format: yaml }); | ||
assert.deepEqual(actual.order, expected); | ||
assert.deepEqual(actual, expected); | ||
}); | ||
}); |
@@ -16,3 +16,3 @@ const { describe, it } = require('mocha'); | ||
const tables = [{ name: 'master' }, { name: 'neo', master: ['detail'] }, { name: 'detail', master: ['master'] }]; | ||
const expected = { order: ['master', 'detail', 'neo'] }; | ||
const expected = [{ name: 'master' }, { name: 'detail', master: ['master'] }, { name: 'neo', master: ['detail'] }]; | ||
const actual = teseo.sort(tables); | ||
@@ -24,5 +24,5 @@ assert.deepEqual(actual, expected); | ||
const tables = [{ name: 'master' }, { name: 'neo' }, { name: 'detail' }]; | ||
const expected = { order: ['master', 'detail', 'neo'] }; | ||
const actual = teseo.sort(tables); | ||
assert.sameMembers(actual.order, expected.order); | ||
const expected = [{ name: 'master' }, { name: 'neo' }, { name: 'detail' }]; | ||
assert.deepEqual(actual, expected); | ||
}); | ||
@@ -29,0 +29,0 @@ |
52116
359