@e22m4u/js-repository
Version:
Реализация репозитория для работы с базами данных
69 lines (64 loc) • 2.87 kB
JavaScript
import {expect} from 'chai';
import {Repository} from './repository.js';
import {DatabaseSchema} from '../database-schema.js';
import {RepositoryRegistry} from './repository-registry.js';
describe('RepositoryRegistry', function () {
describe('setRepositoryCtor', function () {
it('sets a given class as the repository constructor', function () {
class MyRepository extends Repository {}
const dbs = new DatabaseSchema();
dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
dbs.defineModel({name: 'model', datasource: 'datasource'});
const reg = dbs.getService(RepositoryRegistry);
reg.setRepositoryCtor(MyRepository);
const rep = reg.getRepository('model');
expect(rep).to.be.instanceof(Repository);
expect(rep).to.be.instanceof(MyRepository);
});
});
describe('getRepository', function () {
it('returns an existing repository by the given name or create new one', function () {
const dbs = new DatabaseSchema();
dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
dbs.defineModel({name: 'modelA', datasource: 'datasource'});
dbs.defineModel({name: 'modelB', datasource: 'datasource'});
const reg = dbs.getService(RepositoryRegistry);
const repA1 = reg.getRepository('modelA');
const repA2 = reg.getRepository('modelA');
const repB1 = reg.getRepository('modelB');
const repB2 = reg.getRepository('modelB');
expect(repA1).to.be.eq(repA2);
expect(repB1).to.be.eq(repB2);
expect(repA1).to.be.not.eq(repB1);
expect(repA2).to.be.not.eq(repB2);
});
it('should ignore naming convention of the model name', function () {
const dbs = new DatabaseSchema();
const modelName = 'userProfileDetails';
dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
dbs.defineModel({name: modelName, datasource: 'datasource'});
const reg = dbs.getService(RepositoryRegistry);
const rep = reg.getRepository(modelName);
const modelNames = [
'UserProfileDetails',
'user-profile-details',
'user_profile_details',
'USER-PROFILE-DETAILS',
'USER_PROFILE_DETAILS',
'USERPROFILEDETAILS',
'userprofiledetails',
];
modelNames.forEach(v => expect(reg.getRepository(v)).to.be.eq(rep));
});
it('should respect numbers in the model name', function () {
const dbs = new DatabaseSchema();
dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
dbs.defineModel({name: 'model1', datasource: 'datasource'});
dbs.defineModel({name: 'model2', datasource: 'datasource'});
const reg = dbs.getService(RepositoryRegistry);
const rep1 = reg.getRepository('model1');
const rep2 = reg.getRepository('model2');
expect(rep1).to.be.not.eq(rep2);
});
});
});