DomainLockNodeTemplate.spec.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import * as format from 'string-template';
  2. import { assert } from 'chai';
  3. import { DomainLockNodeTemplate } from '../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate';
  4. import { CryptUtils } from '../../../../../src/utils/CryptUtils';
  5. /**
  6. * @param templateData
  7. * @param callsControllerFunctionName
  8. * @param currentDomain
  9. * @returns {Function}
  10. */
  11. function getFunctionFromTemplate (templateData: any, callsControllerFunctionName: string, currentDomain: string) {
  12. let domainLockTemplate: string = format(DomainLockNodeTemplate(), templateData);
  13. return Function(`
  14. document = {
  15. domain: '${currentDomain}'
  16. };
  17. var ${callsControllerFunctionName} = (function(){
  18. return function (context, fn){
  19. return function () {
  20. return fn.apply(context, arguments);
  21. };
  22. }
  23. })();
  24. ${domainLockTemplate}
  25. `)();
  26. }
  27. describe('DomainLockNodeTemplate (): string', () => {
  28. let domainsString: string,
  29. currentDomain: string,
  30. hiddenDomainsString: string,
  31. diff: string,
  32. singleNodeCallControllerFunctionName: string = 'callsController';
  33. it('should correctly runs code inside template if current domain matches with `domainsString`', () => {
  34. domainsString = ['www.example.com'].join(';');
  35. currentDomain = 'www.example.com';
  36. [
  37. hiddenDomainsString,
  38. diff
  39. ] = CryptUtils.hideString(domainsString, domainsString.length * 3);
  40. assert.doesNotThrow(() => getFunctionFromTemplate({
  41. domainLockFunctionName: 'domainLockFunction',
  42. diff: diff,
  43. domains: hiddenDomainsString,
  44. singleNodeCallControllerFunctionName
  45. }, singleNodeCallControllerFunctionName, currentDomain));
  46. });
  47. it('should correctly runs code inside template if current domain matches with base domain of `domainsString` item', () => {
  48. domainsString = ['www.test.com', '.example.com'].join(';');
  49. currentDomain = 'subdomain.example.com';
  50. [
  51. hiddenDomainsString,
  52. diff
  53. ] = CryptUtils.hideString(domainsString, domainsString.length * 3);
  54. assert.doesNotThrow(() => getFunctionFromTemplate({
  55. domainLockFunctionName: 'domainLockFunction',
  56. diff: diff,
  57. domains: hiddenDomainsString,
  58. singleNodeCallControllerFunctionName
  59. }, singleNodeCallControllerFunctionName, currentDomain));
  60. });
  61. it('should throw an error if current domain doesn\'t match with `domainsString`', () => {
  62. domainsString = ['www.example.com'].join(';');
  63. currentDomain = 'www.test.com';
  64. [
  65. hiddenDomainsString,
  66. diff
  67. ] = CryptUtils.hideString(domainsString, domainsString.length * 3);
  68. assert.throws(() => getFunctionFromTemplate({
  69. domainLockFunctionName: 'domainLockFunction',
  70. diff: diff,
  71. domains: hiddenDomainsString,
  72. singleNodeCallControllerFunctionName
  73. }, singleNodeCallControllerFunctionName, currentDomain));
  74. });
  75. });