From a4cce7eb67a6dab6a75c5c86bcebe4dc66ecd6e4 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Mon, 6 Dec 2021 15:02:12 +0000 Subject: [PATCH] fix!: client should not throw on 404 (#751) --- packages/api/test/mocks/pgrest/get_user.json | 4 +-- packages/db/index.js | 27 +++++++++++--------- packages/db/test/user.spec.js | 18 +++++++------ 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/api/test/mocks/pgrest/get_user.json b/packages/api/test/mocks/pgrest/get_user.json index 3e4fb93b31..6be54a05a2 100644 --- a/packages/api/test/mocks/pgrest/get_user.json +++ b/packages/api/test/mocks/pgrest/get_user.json @@ -1,4 +1,4 @@ -{ +[{ "id": 1, "issuer": "issuer-str", "keys": [ @@ -8,4 +8,4 @@ "secret": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaXNzIjoid2ViMy1zdG9yYWdlIiwiaWF0IjoxNjMzOTU3Mzg5ODcyLCJuYW1lIjoidGVzdCJ9.KEH0jHUfJls44YWsj8uex_zj0dUIvdyqGalv2rhWnx8" } ] -} \ No newline at end of file +}] \ No newline at end of file diff --git a/packages/db/index.js b/packages/db/index.js index 40a4f2b4dd..c3d4cf6d46 100644 --- a/packages/db/index.js +++ b/packages/db/index.js @@ -70,10 +70,10 @@ export class DBClient { * Get user by its issuer. * * @param {string} issuer - * @return {Promise} + * @return {Promise} */ async getUser (issuer) { - /** @type {{ data: import('./db-client-types').UserOutput, error: PostgrestError }} */ + /** @type {{ data: import('./db-client-types').UserOutput[], error: PostgrestError }} */ const { data, error } = await this._client .from('user') .select(` @@ -87,13 +87,12 @@ export class DBClient { updated:updated_at `) .eq('issuer', issuer) - .single() if (error) { throw new DBError(error) } - return data + return data.length ? data[0] : undefined } /** @@ -614,7 +613,7 @@ export class DBClient { * * @param {string} issuer * @param {string} secret - * @return {Promise} + * @return {Promise} */ async getKey (issuer, secret) { /** @type {{ data, error: PostgrestError } */ @@ -630,22 +629,26 @@ export class DBClient { }) .filter('keys.deleted_at', 'is', null) .eq('keys.secret', secret) - .single() if (error) { throw new DBError(error) } - if (!data.keys.length) { - throw new Error('user has no key with given secret') + if (!data.length) { + return undefined + } + + const keyData = data[0] + if (!keyData.keys.length) { + return undefined } return { - _id: data.keys[0]._id, - name: data.keys[0].name, + _id: keyData.keys[0]._id, + name: keyData.keys[0].name, user: { - _id: data._id, - issuer: data.issuer + _id: keyData._id, + issuer: keyData.issuer } } } diff --git a/packages/db/test/user.spec.js b/packages/db/test/user.spec.js index af36ee5fa7..9755af0c6e 100644 --- a/packages/db/test/user.spec.js +++ b/packages/db/test/user.spec.js @@ -42,14 +42,9 @@ describe('user operations', () => { assert.strictEqual(user.publicAddress, publicAddress, 'user has correct public address') }) - it('should fail to get a non existing user', async () => { - try { - await client.getUser('fake-issuer') - } catch (err) { - assert(err, 'errored to get a non existing user') - return - } - throw new Error('should fail to get a non existing user') + it('should return undefined to get a non existing user', async () => { + const user = await client.getUser('fake-issuer') + assert.strictEqual(user, undefined) }) it('should update user with same issuer (login)', async () => { @@ -88,6 +83,13 @@ describe('user operations', () => { assert.strictEqual(updatedUser.created, user.created, 'user has same created timestamp') }) + it('should return undefined to get non existing key for user', async () => { + const secret = 'test-secret-fail' + const fetchedKey = await client.getKey(user.issuer, secret) + + assert.strictEqual(fetchedKey, undefined) + }) + it('can create auth keys for user', async () => { const name = 'test-key-name' const secret = 'test-secret'