Skip to content

Commit

Permalink
removed any no identity available event reference
Browse files Browse the repository at this point in the history
  • Loading branch information
ashleysmithTTD committed Feb 25, 2025
1 parent c16234b commit f1d89c5
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 161 deletions.
1 change: 0 additions & 1 deletion src/callbackManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export enum EventType {
IdentityUpdated = 'IdentityUpdated',
SdkLoaded = 'SdkLoaded',
OptoutReceived = 'OptoutReceived',
NoIdentityAvailable = 'NoIdentityAvailable',
}

export type CallbackPayload = SdkLoadedPayload | PayloadWithIdentity;
Expand Down
144 changes: 0 additions & 144 deletions src/integrationTests/options.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -556,147 +556,3 @@ describe('Store config UID2', () => {
});
});
});

describe('calls the NoIdentityAvailable event', () => {
let handler: ReturnType<typeof jest.fn>;
let expiredIdentity = makeIdentity({
identity_expires: Date.now() - 100000,
refresh_expires: Date.now() - 100000,
});

beforeEach(() => {
handler = jest.fn();
uid2.callbacks.push(handler);
});

test('when init is called for the first time with no identity', () => {
uid2.init({});

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when init is already complete and called again with no identity', () => {
uid2.init({});
uid2.init({});

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when init is already complete and called again with an expired identity', () => {
uid2.init({});
uid2.init({
identity: expiredIdentity,
});

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, {
identity: expiredIdentity,
});
});
test('when init is already complete but the existing identity is expired', () => {
uid2.init({
identity: expiredIdentity,
});
uid2.init({});

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, {
identity: expiredIdentity,
});
});
test('when identity is expired but refreshable', () => {
let expiredRefreshableIdentity = makeIdentity({
identity_expires: Date.now() - 10000,
refresh_expires: Date.now() + 10000,
});
uid2.init({ identity: expiredRefreshableIdentity });

// in this case, identity is temporarily unavailable but still unavailable
expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when login is required', () => {
uid2.isLoginRequired();

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when get identity returns null', () => {
uid2.getIdentity();

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when there is no advertising token', () => {
uid2.getAdvertisingToken();

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when cstg does not succeed', () => {
uid2.init({});

expect(uid2.setIdentityFromEmail('a', mocks.makeUid2CstgOption())).rejects.toThrow(
'Invalid email address'
);
expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when identity was valid on init but has since expired', () => {
const originalIdentity = makeIdentity({
advertising_token: 'original_advertising_token',
identity_expires: Date.now() + 100,
});
uid2.init({ identity: originalIdentity });

expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, {
identity: null,
});

// set time to an expired date for this identity
jest.setSystemTime(originalIdentity.refresh_expires * 1000 + 1);

uid2.isIdentityAvailable();

expect(handler).toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, {
identity: originalIdentity,
});
});
});

describe('does not call NoIdentityAvailable event', () => {
let validIdentity = makeIdentity();
let handler: ReturnType<typeof jest.fn>;
beforeEach(() => {
handler = jest.fn();
uid2.callbacks.push(handler);
});

test('when setIdentity is run with a valid identity, should not call NoIdentityAvailable on set or get', () => {
uid2.init({});
handler = jest.fn();

uid2.setIdentity(validIdentity);
uid2.getIdentity();
uid2.getAdvertisingToken();

expect(handler).not.toHaveBeenCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when identity is set with opted out identity', () => {
uid2.init({ identity: makeIdentity({ status: 'optout' }) });

expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when cstg is successful', async () => {
uid2.init({});
handler = jest.fn();

expect(async () => {
await uid2.setIdentityFromEmail('[email protected]', mocks.makeUid2CstgOption());
}).not.toThrow();
expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when identity is set with local storage and init has never been called', () => {
mocks.setUid2LocalStorage(validIdentity);
uid2.isIdentityAvailable();

expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
test('when identity is set with cookie and init has never been called', () => {
mocks.setUid2Cookie(validIdentity);
uid2.isIdentityAvailable();

expect(handler).not.toHaveBeenLastCalledWith(EventType.NoIdentityAvailable, { identity: null });
});
});
20 changes: 4 additions & 16 deletions src/sdkBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ export abstract class SdkBase {
public getIdentity(): Identity | null {
const identity = this._identity ?? this.getIdentityNoInit();
if (!isValidIdentity(identity) || this.temporarilyUnavailable(identity)) {
this._callbackManager.runCallbacks(EventType.NoIdentityAvailable, {});
return null;
}
return identity;
Expand Down Expand Up @@ -199,17 +198,10 @@ export abstract class SdkBase {

public isIdentityAvailable() {
const identity = this._identity ?? this.getIdentityNoInit();
const identityAvailable =
(this.isIdentityValid(identity) && !this.temporarilyUnavailable(identity)) ||
this._apiClient?.hasActiveRequests();

if (!identityAvailable) {
if (this._callbackManager) {
this._callbackManager.runCallbacks(EventType.NoIdentityAvailable, {});
}
return false;
}
return true;
return (
(identity && !hasExpired && !this.temporarilyUnavailable(identity)) ||
this._apiClient?.hasActiveRequests()
);
}

public hasOptedOut() {
Expand Down Expand Up @@ -309,10 +301,6 @@ export abstract class SdkBase {
if (this.hasOptedOut()) this._callbackManager.runCallbacks(EventType.OptoutReceived, {});
}

private isIdentityValid(identity: Identity | OptoutIdentity | null | undefined) {
return identity && !hasExpired(identity.refresh_expires);
}

private temporarilyUnavailable(identity: Identity | OptoutIdentity | null | undefined) {
if (!identity && this._apiClient?.hasActiveRequests()) return true;
// returns true if identity is expired but refreshable
Expand Down

0 comments on commit f1d89c5

Please sign in to comment.