event.spec.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. 'use strict';
  2. const { expect } = require('chai');
  3. const { v4 } = require('uuid');
  4. const sinon = require('sinon');
  5. const rewire = require('rewire');
  6. const { requestEvent1, createdEvent1 } = require('../xml/event/js-requests');
  7. const { oadrPoll1 } = require('../xml/poll/js-requests');
  8. const { generatedFromNantumEvent1 } = require('../xml/event/js-responses');
  9. const { sampleEvent1 } = require('../modules/nantum-responses');
  10. describe('Event', function() {
  11. let clock;
  12. let sandbox, rewired;
  13. let fetchEventStub;
  14. after(async () => {
  15. clock.restore();
  16. });
  17. before(async () => {
  18. clock = sinon.useFakeTimers(new Date('2020-04-26T01:00:00.000Z').getTime());
  19. sandbox = sinon.createSandbox();
  20. let registration = {};
  21. let opted = {};
  22. fetchEventStub = sandbox.stub().resolves(sampleEvent1);
  23. rewired = rewire('../../../processes/event.js');
  24. rewired.__set__({
  25. nantum: {
  26. fetchRegistration: () => Promise.resolve(registration),
  27. fetchEvent: fetchEventStub,
  28. updateRegistration: async newRegistration => {
  29. registration = newRegistration;
  30. },
  31. fetchOpted: venId => Promise.resolve(opted[venId] || []),
  32. updateOpted: async (venId, newOpted) => {
  33. opted[venId] = newOpted || [];
  34. },
  35. },
  36. });
  37. });
  38. describe('retrieveEvents', function() {
  39. it('translates nantum event to oadr event', async () => {
  40. const venId = requestEvent1.venId;
  41. const commonName = v4()
  42. .replace(/-/g, '')
  43. .substring(0, 12);
  44. const events = await rewired.retrieveEvents(
  45. requestEvent1,
  46. commonName,
  47. venId,
  48. );
  49. expect(events).to.eql(generatedFromNantumEvent1);
  50. });
  51. });
  52. describe('poll and updateOptType', function() {
  53. it('should return the same event on subsequent polls if it has not been opted', async () => {
  54. const venId = oadrPoll1.venId;
  55. const commonName = v4()
  56. .replace(/-/g, '')
  57. .substring(0, 12);
  58. const pollResponse1 = await rewired.pollForEvents(
  59. oadrPoll1,
  60. commonName,
  61. venId,
  62. );
  63. expect(pollResponse1.events.length).to.eql(1);
  64. const pollResponse2 = await rewired.pollForEvents(
  65. oadrPoll1,
  66. commonName,
  67. venId,
  68. );
  69. expect(pollResponse2.events.length).to.eql(1);
  70. });
  71. it('should not return an opted event in subsequent poll response', async () => {
  72. const venId = oadrPoll1.venId;
  73. const commonName = v4()
  74. .replace(/-/g, '')
  75. .substring(0, 12);
  76. const pollResponse1 = await rewired.pollForEvents(
  77. oadrPoll1,
  78. commonName,
  79. venId,
  80. );
  81. expect(pollResponse1.events.length).to.eql(1);
  82. await rewired.updateOptType(createdEvent1, commonName, venId);
  83. const pollResponse2 = await rewired.pollForEvents(
  84. oadrPoll1,
  85. commonName,
  86. venId,
  87. );
  88. expect(pollResponse2).to.be.undefined;
  89. });
  90. });
  91. });