UNPKG

@smallprod/models

Version:
294 lines (293 loc) 14.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const __1 = require("../.."); const article_entity_1 = __importDefault(require("./_utils/article.entity")); const category_entity_1 = __importDefault(require("./_utils/category.entity")); const user_entity_1 = __importDefault(require("./_utils/user.entity")); const chai_1 = require("chai"); const query_1 = __importDefault(require("../_utils/query")); describe.each([ ['MariaDB', 'maria'], ['MySql', 'mysql'], ['PostgresSql', 'postgres'], ])('Entity CRUD tests with %s', (dbName, name) => { let dbManager; let model; let context; beforeAll(async (done) => { dbManager = __1.DbManager.getInstance(); const m = dbManager.get(name); if (m) { model = m; } else { throw new Error(`Database connection not found ${name}`); } await query_1.default.create(model, name); done(); }); beforeEach(async (done) => { await model.startTransaction(); context = __1.EntityManager.createContext(); done(); }); describe('Create', () => { test('Create a simple entity', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; chai_1.expect(cat1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('categories').exec(name); chai_1.expect(res.length).to.be.equal(1); }); test('Create an entity linked to another one', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1).create(name, context); chai_1.expect(article1).not.to.be.null; if (!article1) return; chai_1.expect(article1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('articles').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].category_id).to.be.equal(cat1.getId()); }); test('Create an entity with a many to many relationship', async () => { const user1 = await new user_entity_1.default('John', 'Doe', 'john@doe.fr', new Date('01/01/1980')).create(name, context); chai_1.expect(user1).not.to.be.null; if (!user1) return; const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1, [user1]).create(name, context); if (!article1) return; const res = await new __1.FindQuery('article_authors').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].user_id).to.be.equal(user1.getId()); chai_1.expect(res[0].article_id).to.be.equal(article1.getId()); }); }); describe('Update', () => { test('Update a simple entity', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; chai_1.expect(cat1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('categories').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].label).to.be.equal('Cat#1'); cat1.setLabel('Category 1'); await cat1.update(name); const res2 = await new __1.FindQuery('categories').exec(name); chai_1.expect(res2.length).to.be.equal(1); chai_1.expect(res2[0].label).to.be.equal('Category 1'); }); test('Update an entity linked to another one', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const cat2 = await new category_entity_1.default('Cat#2').create(name, context); if (!cat2) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1).create(name, context); chai_1.expect(article1).not.to.be.null; if (!article1) return; chai_1.expect(article1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('articles').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].category_id).to.be.equal(cat1.getId()); article1.setCategory(cat2); await article1.update(name); const res2 = await new __1.FindQuery('articles').exec(name); chai_1.expect(res2.length).to.be.equal(1); chai_1.expect(res2[0].category_id).to.be.equal(cat2.getId()); }); test('Update an entity with a many to many relationship', async () => { const user1 = await new user_entity_1.default('John', 'Doe', 'john@doe.fr', new Date('01/01/1980')).create(name, context); chai_1.expect(user1).not.to.be.null; if (!user1) return; const user2 = await new user_entity_1.default('Jane', 'Doe', 'jane@doe.fr', new Date('01/01/1980')).create(name, context); if (!user2) return; const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1, [user1]).create(name, context); if (!article1) return; const res = await new __1.FindQuery('article_authors').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].user_id).to.be.equal(user1.getId()); chai_1.expect(res[0].article_id).to.be.equal(article1.getId()); article1.setAuthors([user1, user2]); await article1.update(name); const res2 = await new __1.FindQuery('article_authors') .where('article_id', '=', article1.getId()) .exec(name); chai_1.expect(res2.length).to.be.equal(2); }); }); describe('Delete', () => { test('Delete a simple entity', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; chai_1.expect(cat1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('categories').exec(name); chai_1.expect(res.length).to.be.equal(1); await cat1.delete(name, context); const res2 = await new __1.FindQuery('categories').exec(name); chai_1.expect(res2.length).to.be.equal(0); }); test('Delete an entity with a many to many relationship', async () => { const user1 = await new user_entity_1.default('John', 'Doe', 'john@doe.fr', new Date('01/01/1980')).create(name, context); chai_1.expect(user1).not.to.be.null; if (!user1) return; const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1, [user1]).create(name, context); if (!article1) return; const res = await new __1.FindQuery('article_authors').exec(name); chai_1.expect(res.length).to.be.equal(1); chai_1.expect(res[0].user_id).to.be.equal(user1.getId()); chai_1.expect(res[0].article_id).to.be.equal(article1.getId()); await article1.delete(name, context); const res2 = await new __1.FindQuery('articles').exec(name); chai_1.expect(res2.length).to.be.equal(0); const res3 = await new __1.FindQuery('article_authors').exec(name); chai_1.expect(res3.length).to.be.equal(0); }); test('Delete by id', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; chai_1.expect(cat1.getId()).not.to.be.equal(0); const res = await new __1.FindQuery('categories').exec(name); chai_1.expect(res.length).to.be.equal(1); await category_entity_1.default.deleteById(cat1.getId(), context, name); const res2 = await new __1.FindQuery('categories').exec(name); chai_1.expect(res2.length).to.be.equal(0); }); }); describe('Find', () => { test('Find one', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; __1.EntityManager.clearContext(context); const cat = await category_entity_1.default.findOne(context) .where('label', '=', 'Cat#1') .exec(name); chai_1.expect(cat).not.to.be.null; chai_1.expect(cat.getId()).to.be.equal(cat1.getId()); }); test('Find many', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const cat2 = await new category_entity_1.default('Cat#2').create(name, context); if (!cat2) return; const cat3 = await new category_entity_1.default('Cat#3').create(name, context); __1.EntityManager.clearContext(context); const categories = await category_entity_1.default.findMany(context) .where('label', 'IN', ['Cat#1', 'Cat#3']) .exec(name); chai_1.expect(categories.length).to.be.equal(2); }); test('Find one by id', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; __1.EntityManager.clearContext(context); const cat = await category_entity_1.default.findById(cat1.getId(), context, name); chai_1.expect(cat).not.to.be.null; chai_1.expect(cat.getId()).to.be.equal(cat1.getId()); }); test('Find one with a relationship with another entity', async () => { const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1).create(name, context); chai_1.expect(article1).not.to.be.null; if (!article1) return; __1.EntityManager.clearContext(context); const article = await article_entity_1.default.findById(article1.getId(), context, name); const category = article.getCategory(); if (!category) return; chai_1.expect(category.getId()).to.be.equal(cat1.getId()); chai_1.expect(category.getLabel()).to.be.equal(cat1.getLabel()); }); test('Find one with a many to many relationship', async () => { const user1 = await new user_entity_1.default('John', 'Doe', 'john@doe.fr', new Date('01/01/1980')).create(name, context); chai_1.expect(user1).not.to.be.null; if (!user1) return; const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1, [user1]).create(name, context); if (!article1) return; __1.EntityManager.clearContext(context); const user = await user_entity_1.default.findById(user1.getId(), context, name); chai_1.expect(user.getArticles().length).to.be.equal(1); chai_1.expect(user.getArticles()[0].getId()).to.be.equal(article1.getId()); }); test('Fetch', async () => { const user1 = await new user_entity_1.default('John', 'Doe', 'john@doe.fr', new Date('01/01/1980')).create(name, context); chai_1.expect(user1).not.to.be.null; if (!user1) return; const cat1 = await new category_entity_1.default('Cat#1').create(name, context); chai_1.expect(cat1).not.to.be.null; if (!cat1) return; const article1 = await new article_entity_1.default('Article#1', new Date('01/01/2020'), 100, cat1, [user1]).create(name, context); if (!article1) return; __1.EntityManager.clearContext(context); const article = await article_entity_1.default.findById(article1.getId(), context, name); chai_1.expect(article.getId()).to.be.equal(article1.getId()); chai_1.expect(article.getAuthors()).to.be.deep.equal([]); await article.fetchAuthors(context, name); chai_1.expect(article.getAuthors().length).to.be.equal(1); }); }); afterEach(async (done) => { await model.rollback(); __1.EntityManager.closeContext(context); done(); }); afterAll(async (done) => { await query_1.default.delete(model); done(); }); });