PropertyIdentifierNamesCacheStorage.spec.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'reflect-metadata';
  2. import { assert } from 'chai';
  3. import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
  4. import { TDictionary } from '../../../../src/types/TDictionary';
  5. import { IPropertyIdentifierNamesCacheStorage } from '../../../../src/interfaces/storages/identifier-names-cache/IPropertyIdentifierNamesCacheStorage';
  6. import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
  7. import { IOptions } from '../../../../src/interfaces/options/IOptions';
  8. import { IRandomGenerator } from '../../../../src/interfaces/utils/IRandomGenerator';
  9. import { DEFAULT_PRESET } from '../../../../src/options/presets/Default';
  10. import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
  11. import { PropertyIdentifierNamesCacheStorage } from '../../../../src/storages/identifier-names-cache/PropertyIdentifierNamesCacheStorage';
  12. /**
  13. * @returns {IPropertyIdentifierNamesCacheStorage}
  14. */
  15. const getStorageInstance = <V>(options: Partial<IOptions> = DEFAULT_PRESET): IPropertyIdentifierNamesCacheStorage => {
  16. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  17. inversifyContainerFacade.load('', '', {});
  18. const storage: IPropertyIdentifierNamesCacheStorage = new PropertyIdentifierNamesCacheStorage(
  19. inversifyContainerFacade.get<IRandomGenerator>(ServiceIdentifiers.IRandomGenerator),
  20. {
  21. ...DEFAULT_PRESET,
  22. ...options as IOptions
  23. }
  24. );
  25. storage.initialize();
  26. return storage;
  27. };
  28. describe('PropertyIdentifierNamesCacheStorage', () => {
  29. const storageKey: string = 'foo';
  30. const storageValue: string = 'bar';
  31. let storage: IPropertyIdentifierNamesCacheStorage;
  32. describe('initialize', () => {
  33. describe('Variant #1: `identifierNamesCache` option values is object', () => {
  34. const expectedDictionary: TDictionary<string> = {
  35. [storageKey]: storageValue
  36. };
  37. let dictionary: TDictionary<string>;
  38. before(() => {
  39. storage = getStorageInstance({
  40. identifierNamesCache: {
  41. globalIdentifiers: {},
  42. propertyIdentifiers: {
  43. [storageKey]: storageValue
  44. }
  45. }
  46. });
  47. dictionary = storage.getStorageAsDictionary();
  48. });
  49. it('should initialize storage with `identifierNamesStorage` option object', () => {
  50. assert.deepEqual(dictionary, expectedDictionary);
  51. });
  52. });
  53. describe('Variant #2: `identifierNamesCache` option values is empty object', () => {
  54. const expectedDictionary: TDictionary<string> = {};
  55. let dictionary: TDictionary<string>;
  56. before(() => {
  57. storage = getStorageInstance({
  58. identifierNamesCache: {
  59. globalIdentifiers: {},
  60. propertyIdentifiers: {}
  61. }
  62. });
  63. dictionary = storage.getStorageAsDictionary();
  64. });
  65. it('should initialize storage with `identifierNamesStorage` option object', () => {
  66. assert.deepEqual(dictionary, expectedDictionary);
  67. });
  68. });
  69. describe('Variant #3: `identifierNamesCache` option values is `null`', () => {
  70. const expectedDictionary: TDictionary<string> = {};
  71. let dictionary: TDictionary<string>;
  72. before(() => {
  73. storage = getStorageInstance({
  74. identifierNamesCache: null
  75. });
  76. dictionary = storage.getStorageAsDictionary();
  77. });
  78. it('should initialize storage with `identifierNamesStorage` option object', () => {
  79. assert.deepEqual(dictionary, expectedDictionary);
  80. });
  81. });
  82. });
  83. });