From 833a1ba108df3c79ff827fe3177c8b8bf6d9bb28 Mon Sep 17 00:00:00 2001 From: M Saiqul Haq Date: Thu, 25 Jan 2018 22:05:15 +0700 Subject: [PATCH] Notify user when there is error with github API request --- package-lock.json | 54 ++++++++++++++++++++++------------ src/components/Hackmap.vue | 12 +++++++- src/github-issues.js | 5 +++- test/github-api-client.test.js | 2 +- 4 files changed, 52 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 181467e..1ea03d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -325,6 +325,14 @@ "is-buffer": "1.1.5" } }, + "axios-mock-adapter": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.12.0.tgz", + "integrity": "sha1-DD9w70adVWXxjTn96wqyIL15FAo=", + "requires": { + "deep-equal": "1.0.1" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -2330,6 +2338,11 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -4306,15 +4319,6 @@ } } }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -4326,6 +4330,15 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -10176,15 +10189,6 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", @@ -10205,6 +10209,15 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -10792,6 +10805,11 @@ "vue-class-component": "5.0.2" } }, + "vue-router": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.8.1.tgz", + "integrity": "sha512-MC4jacHBhTPKtmcfzvaj2N7g6jgJ/Z/eIjZdt+yUaUOM1iKC0OUIlO/xCtz6OZFFTNUJs/1YNro2GN/lE+nOXA==" + }, "vue-style-loader": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.3.tgz", diff --git a/src/components/Hackmap.vue b/src/components/Hackmap.vue index 64e7815..fddf584 100644 --- a/src/components/Hackmap.vue +++ b/src/components/Hackmap.vue @@ -169,6 +169,13 @@ export default { const indexResult = this.projects.findIndex(project => project.id === id) this.projects.splice(indexResult, 1) }) + }, + notifyError (msg) { + if (msg.hasOwnProperty('message')) { + alert(msg.message) + } else { + alert('Oh no, something went wrong') + } } }, components: { @@ -197,7 +204,10 @@ export default { this.username = response.data.login this.userId = response.data.id }, - issueNumber: this.issueNumber + issueNumber: this.issueNumber, + onError: errMsg => { + this.notifyError(errMsg) + } }) // we need to calculate map dimensions in order to place the avatars // we handle three cases: diff --git a/src/github-issues.js b/src/github-issues.js index a353b4a..3e315f6 100644 --- a/src/github-issues.js +++ b/src/github-issues.js @@ -50,7 +50,10 @@ export default class GitHubIssueService { this.issueNumber = issue.number }) .then(() => this.pollIssueForComments()) - .catch(err => this.reportError(err)) + .catch(err => { + this.reportError(err) + config.onError(err) + }) } postNewProject (project) { diff --git a/test/github-api-client.test.js b/test/github-api-client.test.js index a58477a..fa48794 100644 --- a/test/github-api-client.test.js +++ b/test/github-api-client.test.js @@ -12,7 +12,7 @@ describe('baseURL', () => { let token = 'token' let config = { - organization: 'saiqulhaq', + organization: 'bkkhack', repository: 'hackmap', }