@smallprod/models
Version:
294 lines (293 loc) • 14.7 kB
JavaScript
"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();
});
});