DomainLockNodeTemplate.spec.ts 4.6 KB

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