diff --git a/static/js/answers-experience.js b/static/js/answers-experience.js index 899c98bc2..9b528ac0f 100644 --- a/static/js/answers-experience.js +++ b/static/js/answers-experience.js @@ -2,6 +2,7 @@ import DeferredPromise from './deferred-promise'; import analyticsListener from './runtime-config-listeners/analytics'; import sessionTrackingListener from './runtime-config-listeners/session-tracking'; import querySourceListener from './runtime-config-listeners/query-source'; +import visitorListener from './runtime-config-listeners/visitor'; /** * @typedef {import('./runtime-config.js').RuntimeConfigListener} RuntimeConfigListener @@ -14,7 +15,8 @@ export default class AnswersExperience { this._runtimeConfigListeners = [ analyticsListener, sessionTrackingListener, - querySourceListener + querySourceListener, + visitorListener ]; this._registerRuntimeConfigListeners(); diff --git a/static/js/runtime-config-listeners/visitor.js b/static/js/runtime-config-listeners/visitor.js new file mode 100644 index 000000000..47f1bee2e --- /dev/null +++ b/static/js/runtime-config-listeners/visitor.js @@ -0,0 +1,9 @@ +/** + * @type {import('../runtime-config.js').RuntimeConfigListener} + */ + export default { + key: 'visitor', + callback: value => { + ANSWERS.setVisitor(value); + } +} \ No newline at end of file diff --git a/tests/static/js/answers-experience.js b/tests/static/js/answers-experience.js new file mode 100644 index 000000000..fbb3a032f --- /dev/null +++ b/tests/static/js/answers-experience.js @@ -0,0 +1,12 @@ +import AnswersExperience from '../../../static/js/answers-experience'; +import RuntimeConfig from '../../../static/js/runtime-config'; + +describe('AnswersExperience works properly', () => { + it('visitor listener is called when visitor is set', () => { + const runtimeConfig = new RuntimeConfig(); + const experience = new AnswersExperience(runtimeConfig); + const callListenerSpy = jest.spyOn(experience.runtimeConfig, '_callKeySpecificListeners'); + experience.runtimeConfig.set('visitor', { id: '123', idMethod: 'test' }); + expect(callListenerSpy).toHaveBeenCalledWith('update', 'visitor'); + }); +}); \ No newline at end of file