Skip to content

Commit 7f7adb1

Browse files
committed
Don't delete on update failure
1 parent b64b947 commit 7f7adb1

File tree

2 files changed

+17
-30
lines changed

2 files changed

+17
-30
lines changed

packages/messaging/src/internals/token-manager.test.ts

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -128,41 +128,29 @@ describe('Token Manager', () => {
128128
expect(tokenFromDb).to.deep.equal(expectedTokenDetails);
129129
});
130130

131-
it('deletes the token if the update fails', async () => {
131+
it('retains the token upon update failure due to potential server error, allowing for future update attempts', async () => {
132132
// Arrange
133-
// Change create time to be older than a week.
134-
tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days
135-
133+
tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days ago, triggering an update
136134
await dbSet(messaging.firebaseDependencies, tokenDetails);
137-
138-
requestUpdateTokenStub.rejects(new Error('Update failed.'));
139-
135+
requestUpdateTokenStub.rejects(new Error('Temporary server error'));
136+
140137
// Act
141-
await expect(getTokenInternal(messaging)).to.be.rejectedWith(
142-
'Update failed.'
143-
);
144-
138+
await expect(getTokenInternal(messaging)).to.be.rejectedWith('Temporary server error');
139+
145140
// Assert
146-
const expectedTokenDetails: TokenDetails = {
147-
...tokenDetails,
148-
createTime: Date.now()
149-
};
150-
151-
expect(requestGetTokenStub).not.to.have.been.called;
152-
expect(requestUpdateTokenStub).to.have.been.calledOnceWith(
153-
messaging.firebaseDependencies,
154-
expectedTokenDetails
155-
);
156-
expect(requestDeleteTokenStub).to.have.been.calledOnceWith(
157-
messaging.firebaseDependencies,
158-
tokenDetails.token
159-
);
160-
141+
expect(requestUpdateTokenStub).to.have.been.called;
142+
expect(requestDeleteTokenStub).not.to.have.been.called; // Verify delete was not called
143+
144+
// Reasoning documentation
145+
// This test ensures that the token is not deleted upon an update failure,
146+
// recognizing that such failures may be temporary server-side issues.
147+
// By not deleting the token, we allow the system to retry the update in the future,
148+
// avoiding unnecessary token churn and preserving continuity for the user.
149+
161150
const tokenFromDb = await dbGet(messaging.firebaseDependencies);
162-
expect(tokenFromDb).to.be.undefined;
151+
expect(tokenFromDb).to.not.be.null; // Ensure the token still exists
163152
});
164-
});
165-
153+
166154
describe('deleteToken', () => {
167155
it('returns if there is no token in the db', async () => {
168156
await deleteTokenInternal(messaging);

packages/messaging/src/internals/token-manager.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ async function updateToken(
127127
await dbSet(messaging.firebaseDependencies, updatedTokenDetails);
128128
return updatedToken;
129129
} catch (e) {
130-
await deleteTokenInternal(messaging);
131130
throw e;
132131
}
133132
}

0 commit comments

Comments
 (0)