StringArrayCallsWrapperNodeTemplate.spec.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import * as format from 'string-template';
  2. import { assert } from 'chai';
  3. import { ServiceIdentifiers } from '../../../../../src/container/ServiceIdentifiers';
  4. import { ICryptUtils } from '../../../../../src/interfaces/utils/ICryptUtils';
  5. import { IInversifyContainerFacade } from '../../../../../src/interfaces/container/IInversifyContainerFacade';
  6. import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate';
  7. import { Rc4Template } from '../../../../../src/templates/custom-nodes/Rc4Template';
  8. import { StringArrayBase64DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayBase64DecodeNodeTemplate';
  9. import { StringArrayCallsWrapperTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayCallsWrapperTemplate';
  10. import { StringArrayRc4DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayRC4DecodeNodeTemplate';
  11. import { InversifyContainerFacade } from '../../../../../src/container/InversifyContainerFacade';
  12. describe('StringArrayCallsWrapperNodeTemplate (): string', () => {
  13. const stringArrayName: string = 'stringArrayName';
  14. const stringArrayCallsWrapperName: string = 'stringArrayCallsWrapperName';
  15. let cryptUtils: ICryptUtils;
  16. before(() => {
  17. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  18. inversifyContainerFacade.load('', {});
  19. cryptUtils = inversifyContainerFacade.get<ICryptUtils>(ServiceIdentifiers.ICryptUtils);
  20. });
  21. describe('variant #1: `base64` encoding', () => {
  22. const atobDecodeNodeTemplate: string = format(StringArrayBase64DecodeNodeTemplate(), {
  23. atobPolyfill: AtobTemplate(),
  24. selfDefendingCode: '',
  25. stringArrayCallsWrapperName
  26. });
  27. const index: string = '0x0';
  28. const expectedDecodedValue: string = 'test1';
  29. let decodedValue: string;
  30. before(() => {
  31. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), {
  32. decodeNodeTemplate: atobDecodeNodeTemplate,
  33. stringArrayCallsWrapperName,
  34. stringArrayName
  35. });
  36. decodedValue = Function(`
  37. var ${stringArrayName} = ['${cryptUtils.btoa('test1')}'];
  38. ${stringArrayCallsWrapperTemplate}
  39. return ${stringArrayCallsWrapperName}(${index});
  40. `)();
  41. });
  42. it('should correctly return decoded value', () => {
  43. assert.deepEqual(decodedValue, expectedDecodedValue);
  44. });
  45. });
  46. describe('variant #2: `rc4` encoding', () => {
  47. const rc4DecodeNodeTemplate: string = format(StringArrayRc4DecodeNodeTemplate(), {
  48. atobPolyfill: AtobTemplate(),
  49. rc4Polyfill: Rc4Template(),
  50. selfDefendingCode: '',
  51. stringArrayCallsWrapperName
  52. });
  53. const index: string = '0x0';
  54. const key: string = 'key';
  55. const expectedDecodedValue: string = 'test1';
  56. let decodedValue: string;
  57. before(() => {
  58. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), {
  59. decodeNodeTemplate: rc4DecodeNodeTemplate,
  60. stringArrayCallsWrapperName,
  61. stringArrayName
  62. });
  63. decodedValue = Function(`
  64. var ${stringArrayName} = ['${cryptUtils.btoa(cryptUtils.rc4('test1', key))}'];
  65. ${stringArrayCallsWrapperTemplate}
  66. return ${stringArrayCallsWrapperName}('${index}', '${key}');
  67. `)();
  68. });
  69. it('should correctly return decoded value', () => {
  70. assert.deepEqual(decodedValue, expectedDecodedValue);
  71. });
  72. });
  73. });