Skip to content

Commit ff8954d

Browse files
committed
feat: Support scope in alias requests
1 parent 12341f0 commit ff8954d

File tree

6 files changed

+146
-9
lines changed

6 files changed

+146
-9
lines changed

src/identity.interfaces.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ export interface SDKIdentityApi {
151151
): void;
152152
createAliasRequest?(
153153
sourceUser: IMParticleUser,
154-
destinationUser: IMParticleUser
154+
destinationUser: IMParticleUser,
155+
scope?: string
155156
): IAliasRequest;
156157
}
157158

src/identity.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ export default function Identity(mpInstance) {
183183
source_mpid: aliasRequest.sourceMpid,
184184
start_unixtime_ms: aliasRequest.startTime,
185185
end_unixtime_ms: aliasRequest.endTime,
186-
scope: aliasRequest.scope,
187186
device_application_stamp: mpInstance._Store.deviceId,
187+
scope: aliasRequest.scope || 'device',
188188
},
189189
};
190190
},
@@ -195,6 +195,7 @@ export default function Identity(mpInstance) {
195195
SourceMpid: aliasRequest.sourceMpid,
196196
StartUnixtimeMs: aliasRequest.startTime,
197197
EndUnixtimeMs: aliasRequest.endTime,
198+
Scope: aliasRequest.scope || 'device',
198199
};
199200
},
200201

@@ -744,7 +745,7 @@ export default function Identity(mpInstance) {
744745
after applying this adjustment it will be impossible to create an aliasRequest passes the aliasUsers()
745746
validation that the startTime must be less than the endTime
746747
*/
747-
createAliasRequest: function(sourceUser, destinationUser) {
748+
createAliasRequest: function(sourceUser, destinationUser, scope) {
748749
try {
749750
if (!destinationUser || !sourceUser) {
750751
mpInstance.Logger.error(
@@ -788,6 +789,7 @@ export default function Identity(mpInstance) {
788789
sourceMpid: sourceUser.getMPID(),
789790
startTime: startTime,
790791
endTime: endTime,
792+
scope: scope || 'device',
791793
};
792794
} catch (e) {
793795
mpInstance.Logger.error(

src/mparticle-instance-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,10 @@ function mParticleInstanceManager(this: IMParticleInstanceManager) {
368368
aliasUsers: function(aliasRequest, callback) {
369369
self.getInstance().Identity.aliasUsers(aliasRequest, callback);
370370
},
371-
createAliasRequest: function(sourceUser, destinationUser) {
371+
createAliasRequest: function(sourceUser, destinationUser, scope) {
372372
return self
373373
.getInstance()
374-
.Identity.createAliasRequest(sourceUser, destinationUser);
374+
.Identity.createAliasRequest(sourceUser, destinationUser, scope);
375375
},
376376
getCurrentUser: function() {
377377
return self.getInstance().Identity.getCurrentUser();

src/stub/mparticle.stub.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ function createAliasRequest() {
166166
destinationMpid: 'b',
167167
startTime: new Date().getTime(),
168168
endTime: new Date().getTime(),
169+
scope: 'scope',
169170
};
170171
}
171172

test/src/tests-identity.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3887,6 +3887,79 @@ describe('identity', function() {
38873887
clock.restore();
38883888
});
38893889

3890+
it('should include scope in createAliasRequest when provided', async () => {
3891+
const cookies = JSON.stringify({
3892+
gs: {
3893+
sid: 'fst Test',
3894+
les: new Date().getTime(),
3895+
},
3896+
1: {
3897+
fst: 200,
3898+
lst: 400,
3899+
},
3900+
cu: '2',
3901+
});
3902+
3903+
setCookie(workspaceCookieName, cookies);
3904+
3905+
mParticle.init(apiKey, window.mParticle.config);
3906+
await waitForCondition(hasIdentityCallInflightReturned);
3907+
3908+
// Mock clock so we can use simple integers for time
3909+
clock = sinon.useFakeTimers();
3910+
clock.tick(1000);
3911+
3912+
const destinationUser = mParticle.Identity.getCurrentUser();
3913+
const sourceUser = mParticle.Identity.getUser('1');
3914+
3915+
const aliasRequest = mParticle.Identity.createAliasRequest(
3916+
sourceUser,
3917+
destinationUser,
3918+
'mpid'
3919+
);
3920+
expect(aliasRequest.sourceMpid).to.equal('1');
3921+
expect(aliasRequest.destinationMpid).to.equal('2');
3922+
expect(aliasRequest.startTime).to.equal(200);
3923+
expect(aliasRequest.endTime).to.equal(400);
3924+
expect(aliasRequest.scope).to.equal('mpid');
3925+
clock.restore();
3926+
});
3927+
3928+
it('should default scope to device in createAliasRequest when not provided', async () => {
3929+
const cookies = JSON.stringify({
3930+
gs: {
3931+
sid: 'fst Test',
3932+
les: new Date().getTime(),
3933+
},
3934+
1: {
3935+
fst: 200,
3936+
lst: 400,
3937+
},
3938+
cu: '2',
3939+
});
3940+
3941+
setCookie(workspaceCookieName, cookies);
3942+
3943+
mParticle.init(apiKey, window.mParticle.config);
3944+
await waitForCondition(hasIdentityCallInflightReturned);
3945+
3946+
// Mock clock so we can use simple integers for time
3947+
clock = sinon.useFakeTimers();
3948+
clock.tick(1000);
3949+
3950+
const destinationUser = mParticle.Identity.getCurrentUser();
3951+
const sourceUser = mParticle.Identity.getUser('1');
3952+
3953+
const aliasRequest = mParticle.Identity.createAliasRequest(
3954+
sourceUser,
3955+
destinationUser
3956+
);
3957+
expect(aliasRequest.sourceMpid).to.equal('1');
3958+
expect(aliasRequest.destinationMpid).to.equal('2');
3959+
expect(aliasRequest.scope).to.equal('device');
3960+
clock.restore();
3961+
});
3962+
38903963
it("alias request should have environment 'development' when isDevelopmentMode is true", async () => {
38913964
window.mParticle.config.isDevelopmentMode = true;
38923965

test/src/tests-native-sdk.js

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ describe('native-sdk methods', function() {
649649
mParticleAndroidV2Bridge.modifyData.should.equal(JSONData);
650650
});
651651

652-
it('should send a JSON object to the Android\'s Alias method', () => {
652+
it("should send a JSON object to the Android's Alias method", () => {
653653
let callbackResult;
654654
const aliasRequest = {
655655
destinationMpid: '101',
@@ -662,7 +662,32 @@ describe('native-sdk methods', function() {
662662
callbackResult = callback;
663663
});
664664
mParticleAndroidV2Bridge.aliasUsers.should.equal(
665-
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400}'
665+
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400,"Scope":"device"}'
666+
);
667+
668+
callbackResult.httpCode.should.equal(
669+
HTTPCodes.nativeIdentityRequest
670+
);
671+
callbackResult.message.should.equal(
672+
'Alias request sent to native sdk'
673+
);
674+
});
675+
676+
it("should send a JSON object with scope to the Android's Alias method when scope is provided", () => {
677+
let callbackResult;
678+
const aliasRequest = {
679+
destinationMpid: '101',
680+
sourceMpid: '202',
681+
startTime: 300,
682+
endTime: 400,
683+
scope: 'mpid',
684+
};
685+
686+
mParticle.Identity.aliasUsers(aliasRequest, function(callback) {
687+
callbackResult = callback;
688+
});
689+
mParticleAndroidV2Bridge.aliasUsers.should.equal(
690+
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400,"Scope":"mpid"}'
666691
);
667692

668693
callbackResult.httpCode.should.equal(
@@ -960,13 +985,48 @@ describe('native-sdk methods', function() {
960985
mParticleIOSV2Bridge.reset();
961986
});
962987

963-
it('should send a JSON object to the iOS SDK\'s Alias method', () => {
988+
it("should send a JSON object to the iOS SDK's Alias method", () => {
989+
let callbackResult;
990+
const aliasRequest = {
991+
destinationMpid: '101',
992+
sourceMpid: '202',
993+
startTime: 300,
994+
endTime: 400,
995+
};
996+
997+
mParticle.Identity.aliasUsers(aliasRequest, function(callback) {
998+
callbackResult = callback;
999+
});
1000+
1001+
JSON.parse(mParticleIOSV2Bridge.data[0]).should.have.properties(
1002+
['path', 'value']
1003+
);
1004+
JSON.parse(mParticleIOSV2Bridge.data[0]).path.should.equal(
1005+
'aliasUsers'
1006+
);
1007+
JSON.stringify(
1008+
JSON.parse(mParticleIOSV2Bridge.data[0]).value
1009+
).should.equal(
1010+
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400,"Scope":"device"}'
1011+
);
1012+
mParticleIOSV2Bridge.reset();
1013+
1014+
callbackResult.httpCode.should.equal(
1015+
HTTPCodes.nativeIdentityRequest
1016+
);
1017+
callbackResult.message.should.equal(
1018+
'Alias request sent to native sdk'
1019+
);
1020+
});
1021+
1022+
it("should send a JSON object with scope to the iOS SDK's Alias method when scope is provided", () => {
9641023
let callbackResult;
9651024
const aliasRequest = {
9661025
destinationMpid: '101',
9671026
sourceMpid: '202',
9681027
startTime: 300,
9691028
endTime: 400,
1029+
scope: 'mpid',
9701030
};
9711031

9721032
mParticle.Identity.aliasUsers(aliasRequest, function(callback) {
@@ -982,7 +1042,7 @@ describe('native-sdk methods', function() {
9821042
JSON.stringify(
9831043
JSON.parse(mParticleIOSV2Bridge.data[0]).value
9841044
).should.equal(
985-
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400}'
1045+
'{"DestinationMpid":"101","SourceMpid":"202","StartUnixtimeMs":300,"EndUnixtimeMs":400,"Scope":"mpid"}'
9861046
);
9871047
mParticleIOSV2Bridge.reset();
9881048

0 commit comments

Comments
 (0)