DomainLockNodeTemplate.spec.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 { DomainLockNodeTemplate } from '../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate';
  7. import { InversifyContainerFacade } from '../../../../../src/container/InversifyContainerFacade';
  8. /**
  9. * @param templateData
  10. * @param callsControllerFunctionName
  11. * @param currentDomain
  12. * @returns {Function}
  13. */
  14. function getFunctionFromTemplate (templateData: any, callsControllerFunctionName: string, currentDomain: string) {
  15. const domainLockTemplate: string = format(DomainLockNodeTemplate(), templateData);
  16. return Function(`
  17. document = {
  18. domain: '${currentDomain}'
  19. };
  20. var ${callsControllerFunctionName} = (function(){
  21. return function (context, fn){
  22. return function () {
  23. return fn.apply(context, arguments);
  24. };
  25. }
  26. })();
  27. ${domainLockTemplate}
  28. `)();
  29. }
  30. describe('DomainLockNodeTemplate (): string', () => {
  31. const singleNodeCallControllerFunctionName: string = 'callsController';
  32. let cryptUtils: ICryptUtils;
  33. before(() => {
  34. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  35. inversifyContainerFacade.load({});
  36. cryptUtils = inversifyContainerFacade.get<ICryptUtils>(ServiceIdentifiers.ICryptUtils);
  37. });
  38. describe('variant #1: current domain matches with `domainsString`', () => {
  39. const domainsString: string = ['www.example.com'].join(';');
  40. const currentDomain: string = 'www.example.com';
  41. let testFunc: () => void;
  42. before(() => {
  43. const [
  44. hiddenDomainsString,
  45. diff
  46. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  47. testFunc = () => getFunctionFromTemplate({
  48. domainLockFunctionName: 'domainLockFunction',
  49. diff: diff,
  50. domains: hiddenDomainsString,
  51. singleNodeCallControllerFunctionName
  52. }, singleNodeCallControllerFunctionName, currentDomain);
  53. });
  54. it('should correctly run code inside template', () => {
  55. assert.doesNotThrow(testFunc);
  56. });
  57. });
  58. describe('variant #2: urrent domain matches with base domain of `domainsString` item', () => {
  59. const domainsString: string = ['www.test.com', '.example.com'].join(';');
  60. const currentDomain: string = 'subdomain.example.com';
  61. let testFunc: () => void;
  62. before(() => {
  63. const [
  64. hiddenDomainsString,
  65. diff
  66. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  67. testFunc = () => getFunctionFromTemplate({
  68. domainLockFunctionName: 'domainLockFunction',
  69. diff: diff,
  70. domains: hiddenDomainsString,
  71. singleNodeCallControllerFunctionName
  72. }, singleNodeCallControllerFunctionName, currentDomain);
  73. });
  74. it('should correctly run code inside template', () => {
  75. assert.doesNotThrow(testFunc);
  76. });
  77. });
  78. describe('variant #3: current domain doesn\'t match with `domainsString`', () => {
  79. const domainsString: string = ['www.example.com'].join(';');
  80. const currentDomain: string = 'www.test.com';
  81. let testFunc: () => void;
  82. before(() => {
  83. const [
  84. hiddenDomainsString,
  85. diff
  86. ] = cryptUtils.hideString(domainsString, domainsString.length * 3);
  87. testFunc = () => getFunctionFromTemplate({
  88. domainLockFunctionName: 'domainLockFunction',
  89. diff: diff,
  90. domains: hiddenDomainsString,
  91. singleNodeCallControllerFunctionName
  92. }, singleNodeCallControllerFunctionName, currentDomain);
  93. });
  94. it('should throw an error', () => {
  95. assert.throws(testFunc);
  96. });
  97. });
  98. });