repository-registry.spec.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {expect} from 'chai';
  2. import {Repository} from './repository.js';
  3. import {DatabaseSchema} from '../database-schema.js';
  4. import {RepositoryRegistry} from './repository-registry.js';
  5. describe('RepositoryRegistry', function () {
  6. describe('setRepositoryCtor', function () {
  7. it('sets a given class as the repository constructor', function () {
  8. class MyRepository extends Repository {}
  9. const dbs = new DatabaseSchema();
  10. dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
  11. dbs.defineModel({name: 'model', datasource: 'datasource'});
  12. const reg = dbs.getService(RepositoryRegistry);
  13. reg.setRepositoryCtor(MyRepository);
  14. const rep = reg.getRepository('model');
  15. expect(rep).to.be.instanceof(Repository);
  16. expect(rep).to.be.instanceof(MyRepository);
  17. });
  18. });
  19. describe('getRepository', function () {
  20. it('returns an existing repository by the given name or create new one', function () {
  21. const dbs = new DatabaseSchema();
  22. dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
  23. dbs.defineModel({name: 'modelA', datasource: 'datasource'});
  24. dbs.defineModel({name: 'modelB', datasource: 'datasource'});
  25. const reg = dbs.getService(RepositoryRegistry);
  26. const repA1 = reg.getRepository('modelA');
  27. const repA2 = reg.getRepository('modelA');
  28. const repB1 = reg.getRepository('modelB');
  29. const repB2 = reg.getRepository('modelB');
  30. expect(repA1).to.be.eq(repA2);
  31. expect(repB1).to.be.eq(repB2);
  32. expect(repA1).to.be.not.eq(repB1);
  33. expect(repA2).to.be.not.eq(repB2);
  34. });
  35. it('should ignore naming convention of the model name', function () {
  36. const dbs = new DatabaseSchema();
  37. const modelName = 'userProfileDetails';
  38. dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
  39. dbs.defineModel({name: modelName, datasource: 'datasource'});
  40. const reg = dbs.getService(RepositoryRegistry);
  41. const rep = reg.getRepository(modelName);
  42. const modelNames = [
  43. 'UserProfileDetails',
  44. 'user-profile-details',
  45. 'user_profile_details',
  46. 'USER-PROFILE-DETAILS',
  47. 'USER_PROFILE_DETAILS',
  48. 'USERPROFILEDETAILS',
  49. 'userprofiledetails',
  50. ];
  51. modelNames.forEach(v => expect(reg.getRepository(v)).to.be.eq(rep));
  52. });
  53. it('should respect numbers in the model name', function () {
  54. const dbs = new DatabaseSchema();
  55. dbs.defineDatasource({name: 'datasource', adapter: 'memory'});
  56. dbs.defineModel({name: 'model1', datasource: 'datasource'});
  57. dbs.defineModel({name: 'model2', datasource: 'datasource'});
  58. const reg = dbs.getService(RepositoryRegistry);
  59. const rep1 = reg.getRepository('model1');
  60. const rep2 = reg.getRepository('model2');
  61. expect(rep1).to.be.not.eq(rep2);
  62. });
  63. });
  64. });