From 4d5c2162fb8f9e763852602ee0b7ae0b86fdd010 Mon Sep 17 00:00:00 2001 From: Rich Gowman Date: Tue, 12 May 2020 14:11:52 -0400 Subject: [PATCH 1/4] Properly parse the lastRefreshTime. It's returned from the server in a different format than the other timestamps. Fixes #887 --- src/auth/user-record.ts | 3 ++- test/integration/auth.spec.ts | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/auth/user-record.ts b/src/auth/user-record.ts index 9e33c19a8c..7d0ebef81b 100644 --- a/src/auth/user-record.ts +++ b/src/auth/user-record.ts @@ -326,7 +326,8 @@ export class UserMetadata { // These bugs have already been addressed since then. utils.addReadonlyGetter(this, 'creationTime', parseDate(response.createdAt)); utils.addReadonlyGetter(this, 'lastSignInTime', parseDate(response.lastLoginAt)); - utils.addReadonlyGetter(this, 'lastRefreshTime', parseDate(response.lastRefreshAt)); + const lastRefreshAt = response.lastRefreshAt ? new Date(response.lastRefreshAt).toUTCString() : null; + utils.addReadonlyGetter(this, 'lastRefreshTime', lastRefreshAt); } /** @return The plain object representation of the user's metadata. */ diff --git a/test/integration/auth.spec.ts b/test/integration/auth.spec.ts index c48215c295..5bd0df3c5c 100755 --- a/test/integration/auth.spec.ts +++ b/test/integration/auth.spec.ts @@ -336,6 +336,12 @@ describe('admin.auth', () => { .then((userRecord) => { expect(userRecord.metadata.lastRefreshTime).to.exist; expect(isUTCString(userRecord.metadata.lastRefreshTime!)); + expect(new Date(userRecord.metadata.creationTime).getTime()) + .lte(new Date(userRecord.metadata.lastRefreshTime!).getTime()); + const creationTimePlus1Hour = new Date(userRecord.metadata.creationTime); + creationTimePlus1Hour.setHours(creationTimePlus1Hour.getHours()+1); + expect(new Date(userRecord.metadata.lastRefreshTime!).getTime()) + .lte(creationTimePlus1Hour.getTime()); }); } finally { admin.auth().deleteUser('lastRefreshTimeUser'); From 611a89c27b4a307e34faf7031423aad9094ecb38 Mon Sep 17 00:00:00 2001 From: Rich Gowman Date: Tue, 12 May 2020 15:28:29 -0400 Subject: [PATCH 2/4] review feedback --- test/integration/auth.spec.ts | 10 ++++------ test/unit/auth/user-record.spec.ts | 6 ++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/test/integration/auth.spec.ts b/test/integration/auth.spec.ts index 5bd0df3c5c..de508f0f4e 100755 --- a/test/integration/auth.spec.ts +++ b/test/integration/auth.spec.ts @@ -336,12 +336,10 @@ describe('admin.auth', () => { .then((userRecord) => { expect(userRecord.metadata.lastRefreshTime).to.exist; expect(isUTCString(userRecord.metadata.lastRefreshTime!)); - expect(new Date(userRecord.metadata.creationTime).getTime()) - .lte(new Date(userRecord.metadata.lastRefreshTime!).getTime()); - const creationTimePlus1Hour = new Date(userRecord.metadata.creationTime); - creationTimePlus1Hour.setHours(creationTimePlus1Hour.getHours()+1); - expect(new Date(userRecord.metadata.lastRefreshTime!).getTime()) - .lte(creationTimePlus1Hour.getTime()); + const creationTime = new Date(userRecord.metadata.creationTime).getTime(); + const lastRefreshTime = new Date(userRecord.metadata.lastRefreshTime).getTime(); + expect(creationTime).lte(lastRefreshTime); + expect(lastRefreshTime).lte(creationTime + 3600*1000); }); } finally { admin.auth().deleteUser('lastRefreshTimeUser'); diff --git a/test/unit/auth/user-record.spec.ts b/test/unit/auth/user-record.spec.ts index fce2041ec6..757bf21fed 100644 --- a/test/unit/auth/user-record.spec.ts +++ b/test/unit/auth/user-record.spec.ts @@ -616,10 +616,12 @@ describe('UserInfo', () => { describe('UserMetadata', () => { const expectedLastLoginAt = 1476235905000; const expectedCreatedAt = 1476136676000; + const expectedLastRefreshAt = "2016-10-12T01:31:45.000Z" const actualMetadata: UserMetadata = new UserMetadata({ localId: 'uid123', lastLoginAt: expectedLastLoginAt.toString(), createdAt: expectedCreatedAt.toString(), + lastRefreshAt: expectedLastRefreshAt, }); const expectedMetadataJSON = { lastSignInTime: new Date(expectedLastLoginAt).toUTCString(), @@ -676,6 +678,10 @@ describe('UserMetadata', () => { (actualMetadata as any).creationTime = new Date(); }).to.throw(Error); }); + + it('should return expected lastRefreshTime', () => { + expect(actualMetadata.lastRefreshTime).to.equal(new Date(expectedLastRefreshAt).toUTCString()) + }); }); describe('toJSON', () => { From eda6259ba42535c907326bb2622298dacae35a90 Mon Sep 17 00:00:00 2001 From: Rich Gowman Date: Tue, 12 May 2020 16:55:25 -0400 Subject: [PATCH 3/4] typo --- test/integration/auth.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/auth.spec.ts b/test/integration/auth.spec.ts index de508f0f4e..946e17f773 100755 --- a/test/integration/auth.spec.ts +++ b/test/integration/auth.spec.ts @@ -337,7 +337,7 @@ describe('admin.auth', () => { expect(userRecord.metadata.lastRefreshTime).to.exist; expect(isUTCString(userRecord.metadata.lastRefreshTime!)); const creationTime = new Date(userRecord.metadata.creationTime).getTime(); - const lastRefreshTime = new Date(userRecord.metadata.lastRefreshTime).getTime(); + const lastRefreshTime = new Date(userRecord.metadata.lastRefreshTime!).getTime(); expect(creationTime).lte(lastRefreshTime); expect(lastRefreshTime).lte(creationTime + 3600*1000); }); From 4d57db9cd44a2f13a2944f961767bd3b6cde65e9 Mon Sep 17 00:00:00 2001 From: Rich Gowman Date: Tue, 12 May 2020 18:53:12 -0400 Subject: [PATCH 4/4] formatting nits --- test/integration/auth.spec.ts | 2 +- test/unit/auth/user-record.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/auth.spec.ts b/test/integration/auth.spec.ts index 946e17f773..b2d3c7ebdf 100755 --- a/test/integration/auth.spec.ts +++ b/test/integration/auth.spec.ts @@ -339,7 +339,7 @@ describe('admin.auth', () => { const creationTime = new Date(userRecord.metadata.creationTime).getTime(); const lastRefreshTime = new Date(userRecord.metadata.lastRefreshTime!).getTime(); expect(creationTime).lte(lastRefreshTime); - expect(lastRefreshTime).lte(creationTime + 3600*1000); + expect(lastRefreshTime).lte(creationTime + 3600 * 1000); }); } finally { admin.auth().deleteUser('lastRefreshTimeUser'); diff --git a/test/unit/auth/user-record.spec.ts b/test/unit/auth/user-record.spec.ts index 757bf21fed..af1ae9773b 100644 --- a/test/unit/auth/user-record.spec.ts +++ b/test/unit/auth/user-record.spec.ts @@ -616,7 +616,7 @@ describe('UserInfo', () => { describe('UserMetadata', () => { const expectedLastLoginAt = 1476235905000; const expectedCreatedAt = 1476136676000; - const expectedLastRefreshAt = "2016-10-12T01:31:45.000Z" + const expectedLastRefreshAt = '2016-10-12T01:31:45.000Z'; const actualMetadata: UserMetadata = new UserMetadata({ localId: 'uid123', lastLoginAt: expectedLastLoginAt.toString(),