import { appConfig } from '../entities/AppConfig.fixture'; import { Optimizely, OptimizelyWindow, OptimizelyService } from './OptimizelyService'; import { HostExtractor } from '../util/HostExtractor'; import { Mock, IMock, It, Times } from 'typemoq'; import { expect } from 'chai'; describe('Optimizely service', () => { let optimizely: IMock; let $window: IMock; let $location: IMock; let host: HostExtractor; beforeEach(() => { optimizely = Mock.ofType(); optimizely.setup(x => x.activeExperiments).returns(() => ['456']); optimizely.setup(x => x.allExperiments).returns(() => ({ '123': { name: 'Test Experiment' }, '456': { name: 'Second Experiment' } })); optimizely.setup(x => x.variationNamesMap).returns(() => ({ '123': 'This Variation' })); $window = Mock.ofType(); $location = Mock.ofType(); host = { retailer: 'OVO', mode: 'Switch', isAgentMode: false } as HostExtractor; }); it('should return Original if optimizely is not enabled', () => { $location.setup(x => x.search()).returns(() => ({ 'optimizely_disable': true })); expect(new OptimizelyService($window.object, $location.object, host).getActiveVariation('Test Experiment')).to.equal('Original'); }); it('should return Original if in CSA mode', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); host = { retailer: 'OVO', mode: 'Switch', isAgentMode: true } as HostExtractor; expect(new OptimizelyService($window.object, $location.object, host).getActiveVariation('Test Experiment')).to.equal('Original'); }); it('should return Original for Move in mode', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); host = { retailer: 'OVO', mode: 'MoveIn', isAgentMode: false } as HostExtractor; expect(new OptimizelyService($window.object, $location.object, host).getActiveVariation('Test Experiment')).to.equal('Original'); }); it('should return Original for communities', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); host = { retailer: 'Fairerpower', mode: 'Switch', isAgentMode: false } as HostExtractor; expect(new OptimizelyService($window.object, $location.object, host).getActiveVariation('Test Experiment')).to.equal('Original'); }); it('should return Original for a non-existent experiment', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); const service = new OptimizelyService($window.object, $location.object, host); expect(service.getActiveVariation('Not Real')).to.equal('Original'); optimizely.verify(x => x.push(It.isAny()), Times.never()); }); it('should activate experiment and return correct variation', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); const service = new OptimizelyService($window.object, $location.object, host); expect(service.getActiveVariation('Test Experiment')).to.equal('This Variation'); optimizely.verify(x => x.push(It.isValue(['activate', '123'])), Times.once()); }); it('should not try to activate an already active experiment', () => { $window.setup(x => x.optimizely).returns(() => optimizely.object); $location.setup(x => x.search()).returns(() => []); const service = new OptimizelyService($window.object, $location.object, host); service.getActiveVariation('Second Experiment'); optimizely.verify(x => x.push(It.isAny()), Times.never()); }); });