diff --git a/packages/js-sdk/src/context.ts b/packages/js-sdk/src/context.ts index f83180f6..4afb57de 100644 --- a/packages/js-sdk/src/context.ts +++ b/packages/js-sdk/src/context.ts @@ -136,9 +136,8 @@ export class Context implements ContextInterface { this._visitorId, experienceKey, { + ...attributes, visitorProperties, // represents audiences - locationProperties: attributes?.locationProperties, // represents site_area/locations - updateVisitorProperties: attributes?.updateVisitorProperties, environment: attributes?.environment || this._environment } ); @@ -190,9 +189,8 @@ export class Context implements ContextInterface { const bucketedVariations = this._experienceManager.selectVariations( this._visitorId, { + ...attributes, visitorProperties, // represents audiences - locationProperties: attributes?.locationProperties, // represents site_area/locations - updateVisitorProperties: attributes?.updateVisitorProperties, environment: attributes?.environment || this._environment } ); diff --git a/packages/js-sdk/tests/context.tests.ts b/packages/js-sdk/tests/context.tests.ts index 44742f09..1230bf4e 100644 --- a/packages/js-sdk/tests/context.tests.ts +++ b/packages/js-sdk/tests/context.tests.ts @@ -179,6 +179,78 @@ describe('Context tests', function () { done ); }); + it('Should forward BucketingAttributes (enableTracking, forceVariationId, ignoreLocationProperties) through runExperience', function () { + const experienceKey = 'test-experience-ab-fullstack-2'; + const originalSelectVariation = + experienceManager.selectVariation.bind(experienceManager); + let capturedAttributes; + experienceManager.selectVariation = function ( + capturedVisitorId, + capturedExperienceKey, + attributes + ) { + capturedAttributes = attributes; + return originalSelectVariation( + capturedVisitorId, + capturedExperienceKey, + attributes + ); + }; + try { + context.runExperience(experienceKey, { + locationProperties: {url: 'https://convert.com/'}, + visitorProperties: {varName3: 'something'}, + enableTracking: false, + forceVariationId: '100299461', + ignoreLocationProperties: true, + updateVisitorProperties: true + }); + expect(capturedAttributes).to.include({ + enableTracking: false, + forceVariationId: '100299461', + ignoreLocationProperties: true, + updateVisitorProperties: true + }); + expect(capturedAttributes.locationProperties).to.deep.equal({ + url: 'https://convert.com/' + }); + } finally { + experienceManager.selectVariation = originalSelectVariation; + } + }); + it('Should forward BucketingAttributes (enableTracking, forceVariationId, ignoreLocationProperties) through runExperiences', function () { + const originalSelectVariations = + experienceManager.selectVariations.bind(experienceManager); + let capturedAttributes; + experienceManager.selectVariations = function ( + capturedVisitorId, + attributes + ) { + capturedAttributes = attributes; + return originalSelectVariations(capturedVisitorId, attributes); + }; + try { + context.runExperiences({ + locationProperties: {url: 'https://convert.com/'}, + visitorProperties: {varName3: 'something'}, + enableTracking: false, + forceVariationId: '100299461', + ignoreLocationProperties: true, + updateVisitorProperties: true + }); + expect(capturedAttributes).to.include({ + enableTracking: false, + forceVariationId: '100299461', + ignoreLocationProperties: true, + updateVisitorProperties: true + }); + expect(capturedAttributes.locationProperties).to.deep.equal({ + url: 'https://convert.com/' + }); + } finally { + experienceManager.selectVariations = originalSelectVariations; + } + }); it('Shoud successfully get a single feature and its status', function (done) { this.timeout(test_timeout); getSingleFeatureWithStatus(