UNPKG

@goatlab/fluent

Version:

Readable query Interface & API generator for TS and Node

255 lines 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.genericUnifiedTestSuite = void 0; const vitest_1 = require("vitest"); const flock_1 = require("../TypeOrmConnector/test/flock"); const genericUnifiedTestSuite = (options) => { const { createGoatConnector, createTypeOrmConnector, dbType } = options; let GoatRepo; let TypeOrmRepo; (0, vitest_1.beforeAll)(() => { GoatRepo = createGoatConnector(); TypeOrmRepo = createTypeOrmConnector(); }); (0, vitest_1.describe)('Basic Tests', () => { (0, vitest_1.beforeEach)(async () => { // Clear data before each test to ensure clean state await GoatRepo.clear(); }); (0, vitest_1.it)('insert - Should insert data', async () => { const a = await GoatRepo.insert({ name: 'myGoat', age: 13 }); (0, vitest_1.expect)(typeof a.id).toBe('string'); (0, vitest_1.expect)(a.name).toBe('myGoat'); }); (0, vitest_1.it)('insert - Should insert data with customId', async () => { const customId = dbType === 'postgresql' ? '550e8400-e29b-41d4-a716-446655440000' : '631ce4304f9183f61ffb613a'; const a = await GoatRepo.insert({ id: customId, name: 'myGoat', age: 13, }); (0, vitest_1.expect)(typeof a.id).toBe('string'); (0, vitest_1.expect)(a.id).toBe(customId); }); (0, vitest_1.it)('insertMany - Should insert Multiple elements', async () => { const insertedFlock = await GoatRepo.insertMany(flock_1.flock); (0, vitest_1.expect)(insertedFlock[0].name).toBe('Goatee'); }); (0, vitest_1.it)('findById - Should GET an object by its ID', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); const goat = await GoatRepo.findById(goats[0].id); (0, vitest_1.expect)(goat?.id).toBe(goats[0].id); (0, vitest_1.expect)(typeof goat?.id).toBe('string'); const anotherGoat = await GoatRepo.findById('507f1f77bcf86cd799439011'); (0, vitest_1.expect)(anotherGoat).toBe(null); }); (0, vitest_1.it)('findById - Should GET selected Data', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); const goat = await GoatRepo.findById(goats[0].id, { select: { name: true }, }); (0, vitest_1.expect)(goat?.name).toBe(goats[0].name); (0, vitest_1.expect)(goat?.age).toBeUndefined(); }); (0, vitest_1.it)('findByIds - Should GET data', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); const storedGoats = await GoatRepo.findByIds([goats[0].id, goats[1].id]); (0, vitest_1.expect)(storedGoats.length).toBe(2); }); (0, vitest_1.it)('findByIds - Should GET selectedData', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); const storedGoats = await GoatRepo.findByIds([goats[0].id, goats[1].id], { select: { name: true }, }); (0, vitest_1.expect)(storedGoats[0]?.name).toBe(goats[0].name); (0, vitest_1.expect)(storedGoats[0]?.age).toBeUndefined(); }); (0, vitest_1.it)('findMany - Should GET data', async () => { await GoatRepo.insertMany(flock_1.flock); const goats = await GoatRepo.findMany(); (0, vitest_1.expect)(goats.length).toBeGreaterThanOrEqual(flock_1.flock.length); }); (0, vitest_1.it)('findMany - Should FILTER data', async () => { await GoatRepo.insertMany(flock_1.flock); const goats = await GoatRepo.findMany({ where: { breed: { family: 'Angora' } }, }); (0, vitest_1.expect)(goats.length).toBe(2); }); (0, vitest_1.it)('findMany - Should FILTER not existing data', async () => { await GoatRepo.insertMany(flock_1.flock); const goats = await GoatRepo.findMany({ where: { name: 'TESTESTEST' }, }); (0, vitest_1.expect)(goats.length).toBe(0); }); (0, vitest_1.it)('findMany - Should SELECT attributes', async () => { await GoatRepo.insertMany(flock_1.flock); const goats = await GoatRepo.findMany({ select: { name: true }, }); (0, vitest_1.expect)(goats[0]?.name).toBeDefined(); (0, vitest_1.expect)(goats[0]?.age).toBeUndefined(); }); (0, vitest_1.it)('findFirst - Should get only 1 object back', async () => { await GoatRepo.insertMany(flock_1.flock); const goat = await GoatRepo.findFirst(); (0, vitest_1.expect)(goat).toBeDefined(); (0, vitest_1.expect)(goat?.name).toBeDefined(); }); (0, vitest_1.it)('findFirst - Should FILTER AND SELECT DATA', async () => { await GoatRepo.insertMany(flock_1.flock); const goat = await GoatRepo.findFirst({ where: { breed: { family: 'Angora' } }, select: { name: true }, }); (0, vitest_1.expect)(goat?.name).toBeDefined(); (0, vitest_1.expect)(goat?.age).toBeUndefined(); }); (0, vitest_1.it)('requireFirst - Should fail if not found', async () => { await (0, vitest_1.expect)(GoatRepo.requireFirst()).rejects.toThrow(); }); (0, vitest_1.it)('requireFirst - Should find first item', async () => { await GoatRepo.insertMany(flock_1.flock); const goat = await GoatRepo.requireFirst(); (0, vitest_1.expect)(goat).toBeDefined(); (0, vitest_1.expect)(goat.name).toBeDefined(); }); (0, vitest_1.it)('UpdateById - Should Update a single element', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); await GoatRepo.updateById(goats[0].id, { name: 'MyNewName' }); const goat = await GoatRepo.findById(goats[0].id); (0, vitest_1.expect)(goat?.name).toBe('MyNewName'); }); (0, vitest_1.it)('ReplaceById - Should Update a single element', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); await GoatRepo.replaceById(goats[0].id, { name: 'MyNewName' }); const goat = await GoatRepo.findById(goats[0].id); (0, vitest_1.expect)(goat?.name).toBe('MyNewName'); (0, vitest_1.expect)(goat?.age).toBeUndefined(); }); (0, vitest_1.it)('deleteById - Should delete an item', async () => { const goats = await GoatRepo.insertMany(flock_1.flock); const id = await GoatRepo.deleteById(goats[0].id); (0, vitest_1.expect)(id).toBe(goats[0].id); const findDeleted = await GoatRepo.findById(goats[0].id); (0, vitest_1.expect)(findDeleted).toBe(null); }); }); (0, vitest_1.describe)('Advanced Tests', () => { (0, vitest_1.beforeEach)(async () => { await TypeOrmRepo.clear(); }); (0, vitest_1.it)('Should get local data', async () => { await TypeOrmRepo.insert({ test: true }); const value = await TypeOrmRepo.findFirst(); (0, vitest_1.expect)(value?.test).toBe(true); }); (0, vitest_1.it)('pluck() should return a single array', async () => { await TypeOrmRepo.insertMany([ { test: true, order: 2 }, { test: false, order: 3 }, { test: true, order: 1 }, ]); const plucked = await TypeOrmRepo.pluck('order'); (0, vitest_1.expect)(Array.isArray(plucked)).toBe(true); (0, vitest_1.expect)(plucked).toContain(1); (0, vitest_1.expect)(plucked).toContain(2); (0, vitest_1.expect)(plucked).toContain(3); }); (0, vitest_1.it)('limit() should limit the amount of results', async () => { await TypeOrmRepo.insertMany([ { test: true }, { test: false }, { test: true }, ]); const results = await TypeOrmRepo.findMany({ limit: 2 }); (0, vitest_1.expect)(results.length).toBe(2); }); (0, vitest_1.it)('offset() should start at the given position', async () => { const _inserted = await TypeOrmRepo.insertMany([ { test: true, order: 1 }, { test: false, order: 2 }, { test: true, order: 3 }, ]); const results = await TypeOrmRepo.findMany({ offset: 1, orderBy: [{ order: 'asc' }], }); (0, vitest_1.expect)(results.length).toBe(2); (0, vitest_1.expect)(results[0].order).toBe(2); }); (0, vitest_1.it)('orWhere() should filter the data', async () => { await TypeOrmRepo.insertMany([ { test: true, order: 1 }, { test: false, order: 2 }, { test: true, order: 3 }, ]); const results = await TypeOrmRepo.findMany({ where: { OR: [{ test: true }, { order: 2 }], }, }); (0, vitest_1.expect)(results.length).toBe(3); }); (0, vitest_1.it)('orderBy() should order results desc', async () => { await TypeOrmRepo.insertMany([ { test: true, order: 2 }, { test: false, order: 3 }, { test: true, order: 1 }, ]); const results = await TypeOrmRepo.findMany({ orderBy: [{ order: 'desc' }], }); (0, vitest_1.expect)(results[0].order).toBe(3); (0, vitest_1.expect)(results[1].order).toBe(2); (0, vitest_1.expect)(results[2].order).toBe(1); }); (0, vitest_1.it)('orderBy() should order results asc', async () => { await TypeOrmRepo.insertMany([ { test: true, order: 2 }, { test: false, order: 3 }, { test: true, order: 1 }, ]); const results = await TypeOrmRepo.findMany({ orderBy: [{ order: 'asc' }], }); (0, vitest_1.expect)(results[0].order).toBe(1); (0, vitest_1.expect)(results[1].order).toBe(2); (0, vitest_1.expect)(results[2].order).toBe(3); }); (0, vitest_1.it)('orderBy() should order by Dates with Select()', async () => { await new Promise(resolve => setTimeout(resolve, 10)); const first = await TypeOrmRepo.insert({ test: true }); await new Promise(resolve => setTimeout(resolve, 10)); const second = await TypeOrmRepo.insert({ test: true }); await new Promise(resolve => setTimeout(resolve, 10)); const third = await TypeOrmRepo.insert({ test: true }); const results = await TypeOrmRepo.findMany({ orderBy: [{ created: 'desc' }], select: { id: true, created: true }, }); (0, vitest_1.expect)(results[0]?.id).toBe(third.id); (0, vitest_1.expect)(results[1]?.id).toBe(second.id); (0, vitest_1.expect)(results[2]?.id).toBe(first.id); }); (0, vitest_1.it)('orderBy() should order by Dates without Select()', async () => { await new Promise(resolve => setTimeout(resolve, 10)); const first = await TypeOrmRepo.insert({ test: true }); await new Promise(resolve => setTimeout(resolve, 10)); const second = await TypeOrmRepo.insert({ test: true }); await new Promise(resolve => setTimeout(resolve, 10)); const third = await TypeOrmRepo.insert({ test: true }); const results = await TypeOrmRepo.findMany({ orderBy: [{ created: 'desc' }], }); (0, vitest_1.expect)(results[0]?.id).toBe(third.id); (0, vitest_1.expect)(results[1]?.id).toBe(second.id); (0, vitest_1.expect)(results[2]?.id).toBe(first.id); }); }); }; exports.genericUnifiedTestSuite = genericUnifiedTestSuite; //# sourceMappingURL=genericUnifiedTestSuite.js.map