Skip to content

Commit

Permalink
fix(rc): Fix Version update time parsing failure (#1089)
Browse files Browse the repository at this point in the history
* fix(rc): Fix Version update time parsing failure

* Add test cases for 3 and 6 ms places
  • Loading branch information
lahirumaramba authored Nov 13, 2020
1 parent 13afb20 commit 2781eff
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 8 deletions.
12 changes: 6 additions & 6 deletions src/remote-config/remote-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,16 +366,12 @@ class VersionImpl implements Version {
// as UTC date strings. If a developer uses a previously obtained template with UTC timestamps
// we could still validate it below.
if (typeof version.updateTime !== 'undefined') {
if (!validator.isISODateString(version.updateTime) &&
!validator.isUTCDateString(version.updateTime)) {
if (!this.isValidTimestamp(version.updateTime)) {
throw new FirebaseRemoteConfigError(
'invalid-argument',
'Version update time must be a valid date string');
}
if (validator.isISODateString(version.updateTime)) {
// timestamps in output `Version` obtained from the API should be in UTC.
this.updateTime = new Date(version.updateTime).toUTCString();
}
this.updateTime = new Date(version.updateTime).toUTCString();
}
}

Expand All @@ -394,4 +390,8 @@ class VersionImpl implements Version {
updateTime: this.updateTime,
}
}

private isValidTimestamp(timestamp: string): boolean {
return validator.isNonEmptyString(timestamp) && (new Date(timestamp)).getTime() > 0;
}
}
56 changes: 54 additions & 2 deletions test/unit/remote-config/remote-config.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ describe('RemoteConfig', () => {
email: '[email protected]'
},
description: 'production version',
updateTime: '2020-06-15T16:45:03.000Z'
updateTime: '2020-06-15T16:45:03.541527Z'
};

const REMOTE_CONFIG_RESPONSE: {
Expand Down Expand Up @@ -123,7 +123,7 @@ describe('RemoteConfig', () => {
versions: [
{
versionNumber: '78',
updateTime: '2020-05-07T18:46:09.495Z',
updateTime: '2020-05-07T18:46:09.495234Z',
updateUser: {
email: '[email protected]',
imageUrl: 'https://photo.jpg'
Expand Down Expand Up @@ -680,5 +680,57 @@ describe('RemoteConfig', () => {
expect(parsed).deep.equals(expectedTemplate);
});
});

it('should resolve with template when Version updateTime contains only 3 ms places', () => {
const response = deepCopy(REMOTE_CONFIG_RESPONSE);
const versionInfo = deepCopy(VERSION_INFO);
versionInfo.updateTime = '2020-11-03T20:24:15.203Z';
response.version = versionInfo;
const stub = sinon
.stub(RemoteConfigApiClient.prototype, operationName)
.resolves(response);
stubs.push(stub);

return rcOperation()
.then((template) => {
expect(template.etag).to.equal('etag-123456789012-5');

const version = template.version!;
expect(version.versionNumber).to.equal('86');
expect(version.updateOrigin).to.equal('ADMIN_SDK_NODE');
expect(version.updateType).to.equal('INCREMENTAL_UPDATE');
expect(version.updateUser).to.deep.equal({
email: '[email protected]'
});
expect(version.description).to.equal('production version');
expect(version.updateTime).to.equal('Tue, 03 Nov 2020 20:24:15 GMT');
});
});

it('should resolve with template when Version updateTime contains 6 ms places', () => {
const response = deepCopy(REMOTE_CONFIG_RESPONSE);
const versionInfo = deepCopy(VERSION_INFO);
versionInfo.updateTime = '2020-11-13T17:01:36.541527Z';
response.version = versionInfo;
const stub = sinon
.stub(RemoteConfigApiClient.prototype, operationName)
.resolves(response);
stubs.push(stub);

return rcOperation()
.then((template) => {
expect(template.etag).to.equal('etag-123456789012-5');

const version = template.version!;
expect(version.versionNumber).to.equal('86');
expect(version.updateOrigin).to.equal('ADMIN_SDK_NODE');
expect(version.updateType).to.equal('INCREMENTAL_UPDATE');
expect(version.updateUser).to.deep.equal({
email: '[email protected]'
});
expect(version.description).to.equal('production version');
expect(version.updateTime).to.equal('Fri, 13 Nov 2020 17:01:36 GMT');
});
});
}
});

0 comments on commit 2781eff

Please sign in to comment.