Skip to content

Commit

Permalink
fix: notification error displayed after closing Explore and Install G…
Browse files Browse the repository at this point in the history
…ens pane
  • Loading branch information
slavik-lvovsky committed Jun 13, 2021
1 parent f0dea57 commit a77040c
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 42 deletions.
18 changes: 14 additions & 4 deletions packages/backend/src/exploregens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,13 @@ export class ExploreGens {
return { packages: filteredGenerators, total: packagesData.total };
}

private getErrorMessage(error: Error): string {
return _.get(error, "stack", _.get(error, "message", error.toString()));
}

private showAndLogError(messagePrefix: string, error?: Error) {
if (error) {
const errorMessage = error.toString();
const errorMessage = this.getErrorMessage(error);
this.logger.error(errorMessage);
}

Expand Down Expand Up @@ -233,7 +237,7 @@ export class ExploreGens {
} catch (error) {
this.updateBeingHandledGenerator(genName, GenState.notInstalled);
if (isAutoUpdate) {
this.logger.error(error);
this.logger.error(this.getErrorMessage(error));
return genName;
}
this.showAndLogError(messages.failed_to_update(genName), error);
Expand All @@ -251,8 +255,14 @@ export class ExploreGens {
}

private updateBeingHandledGenerator(genName: string, state: GenState) {
if (this.rpc) {
void this.rpc.invoke("updateBeingHandledGenerator", [genName, state]);
try {
if (this.rpc) {
void this.rpc.invoke("updateBeingHandledGenerator", [genName, state]);
}
} catch (error) {
// error could happen in case that panel was closed by an user but action is still in progress
// in this case webview is already disposed
this.logger.debug(this.getErrorMessage(error));
}
}

Expand Down
40 changes: 28 additions & 12 deletions packages/backend/test/exploregens.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,13 @@ describe("exploregens unit test", () => {

it("an error is thrown", async () => {
const errorMessage = "npm install failed";
const error = new Error(errorMessage);

loggerMock.expects("debug").withExactArgs(messages.updating(genName));
loggerMock.expects("error").withExactArgs(errorMessage);
loggerMock.expects("error").withExactArgs(error.stack);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.updating]);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.notInstalled]);
npmUtilsMock.expects("install").throws(errorMessage);
npmUtilsMock.expects("install").throws(error);
windowMock.expects("showErrorMessage").withExactArgs(messages.failed_to_update(genName)).resolves();
windowMock
.expects("setStatusBarMessage")
Expand Down Expand Up @@ -218,12 +219,13 @@ describe("exploregens unit test", () => {

it("an error is thrown", async () => {
const errorMessage = "npm install failed";
const error = new Error(errorMessage);
loggerMock.expects("debug").withExactArgs(messages.installing(genName));
loggerMock.expects("error").withExactArgs(errorMessage);
loggerMock.expects("error").withExactArgs(error.stack);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.installing]);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.notInstalled]);
npmUtilsMock.expects("checkAccessAndSetGeneratorsPath").resolves();
npmUtilsMock.expects("install").throws(errorMessage);
npmUtilsMock.expects("install").throws(error);
windowMock.expects("showErrorMessage").withExactArgs(messages.failed_to_install(genName)).resolves();
windowMock
.expects("setStatusBarMessage")
Expand Down Expand Up @@ -383,9 +385,10 @@ describe("exploregens unit test", () => {
globalStateMock.expects("update").withArgs(exploregens["LAST_AUTO_UPDATE_DATE"]);
workspaceConfigMock.expects("get").withExactArgs(exploregens["AUTO_UPDATE"], true).returns(true);
NpmCommand["isInBAS"] = false;
const expectedErrorMessage = "Error: Action cancelled";
loggerMock.expects("error").withExactArgs(expectedErrorMessage);
npmUtilsMock.expects("checkAccessAndSetGeneratorsPath").throws(new Error("Action cancelled"));
const expectedErrorMessage = "Action cancelled";
const error = new Error(expectedErrorMessage);
loggerMock.expects("error").withExactArgs(error.stack);
npmUtilsMock.expects("checkAccessAndSetGeneratorsPath").throws(error);
windowMock.expects("showErrorMessage").withExactArgs(messages.failed_to_update_gens()).resolves();
await exploregens["doGeneratorsUpdate"]();
});
Expand All @@ -407,9 +410,21 @@ describe("exploregens unit test", () => {
});
});

it("updateBeingHandledGenerator", () => {
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", ["generator-aa", GenState.installed]);
exploregens["updateBeingHandledGenerator"]("generator-aa", GenState.installed);
describe("updateBeingHandledGenerator", () => {
it("success", () => {
rpcMock
.expects("invoke")
.withExactArgs("updateBeingHandledGenerator", ["generator-aa", GenState.installed])
.resolves();
exploregens["updateBeingHandledGenerator"]("generator-aa", GenState.installed);
});

it("failure", () => {
const error = new Error("rpc invoke error");
rpcMock.expects("invoke").throws(error);
loggerMock.expects("debug").withExactArgs(error.stack);
exploregens["updateBeingHandledGenerator"]("generator-aa", GenState.installed);
});
});

describe("uninstall", () => {
Expand Down Expand Up @@ -448,12 +463,13 @@ describe("exploregens unit test", () => {
const genName = gen.package.name;
const uninstallingMessage = messages.uninstalling(genName);
const errorMessage = `uninstall failure.`;
const error = new Error(errorMessage);

loggerMock.expects("debug").withExactArgs(uninstallingMessage);
loggerMock.expects("error").withExactArgs(errorMessage);
loggerMock.expects("error").withExactArgs(error.stack);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.uninstalling]);
rpcMock.expects("invoke").withExactArgs("updateBeingHandledGenerator", [genName, GenState.installed]);
npmUtilsMock.expects("uninstall").throws(errorMessage);
npmUtilsMock.expects("uninstall").throws(error);

windowMock
.expects("setStatusBarMessage")
Expand Down
96 changes: 70 additions & 26 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3680,22 +3680,22 @@
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"

"@webpack-cli/configtest@^1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9"
integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==
"@webpack-cli/configtest@^1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa"
integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==

"@webpack-cli/info@^1.2.4":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573"
integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==
"@webpack-cli/info@^1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b"
integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==
dependencies:
envinfo "^7.7.3"

"@webpack-cli/serve@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e"
integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==
"@webpack-cli/serve@^1.5.1":
version "1.5.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278"
integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==

"@xtuc/ieee754@^1.2.0":
version "1.2.0"
Expand Down Expand Up @@ -4857,6 +4857,29 @@ cacache@^15.0.3, cacache@^15.0.5:
tar "^6.0.2"
unique-filename "^1.1.1"

cacache@^15.2.0:
version "15.2.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389"
integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==
dependencies:
"@npmcli/move-file" "^1.0.1"
chownr "^2.0.0"
fs-minipass "^2.0.0"
glob "^7.1.4"
infer-owner "^1.0.4"
lru-cache "^6.0.0"
minipass "^3.1.1"
minipass-collect "^1.0.2"
minipass-flush "^1.0.5"
minipass-pipeline "^1.2.2"
mkdirp "^1.0.3"
p-map "^4.0.0"
promise-inflight "^1.0.1"
rimraf "^3.0.2"
ssri "^8.0.1"
tar "^6.0.2"
unique-filename "^1.1.1"

cache-base@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
Expand Down Expand Up @@ -11042,6 +11065,28 @@ make-fetch-happen@^8.0.9:
socks-proxy-agent "^5.0.0"
ssri "^8.0.0"

make-fetch-happen@^9.0.1:
version "9.0.2"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.0.2.tgz#aa8c0e4a5e3a5f2be86c54d3abed44fe5a32ad5d"
integrity sha512-UkAWAuXPXSSlVviTjH2We20mtj1NnZW2Qq/oTY2dyMbRQ5CR3Xed3akCDMnM7j6axrMY80lhgM7loNE132PfAw==
dependencies:
agentkeepalive "^4.1.3"
cacache "^15.2.0"
http-cache-semantics "^4.1.0"
http-proxy-agent "^4.0.1"
https-proxy-agent "^5.0.0"
is-lambda "^1.0.1"
lru-cache "^6.0.0"
minipass "^3.1.3"
minipass-collect "^1.0.2"
minipass-fetch "^1.3.2"
minipass-flush "^1.0.5"
minipass-pipeline "^1.2.4"
negotiator "^0.6.2"
promise-retry "^2.0.1"
socks-proxy-agent "^5.0.0"
ssri "^8.0.0"

[email protected]:
version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
Expand Down Expand Up @@ -11729,7 +11774,7 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=

[email protected]:
[email protected], negotiator@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
Expand Down Expand Up @@ -12074,13 +12119,12 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1:
npm-package-arg "^8.1.2"
semver "^7.3.4"

npm-registry-fetch@10.1.2:
version "10.1.2"
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-10.1.2.tgz#11ffe03d813c653e768bdf762cfc5f1afe91b8bd"
integrity sha512-KsM/TdPmntqgBFlfsbkOLkkE9ovZo7VpVcd+/eTdYszCrgy5zFl5JzWm+OxavFaEWlbkirpkou+ZYI00RmOBFA==
npm-registry-fetch@11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76"
integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==
dependencies:
lru-cache "^6.0.0"
make-fetch-happen "^8.0.9"
make-fetch-happen "^9.0.1"
minipass "^3.1.3"
minipass-fetch "^1.3.0"
minipass-json-stream "^1.0.1"
Expand Down Expand Up @@ -16641,15 +16685,15 @@ webpack-chain@^6.4.0:
deepmerge "^1.5.2"
javascript-stringify "^2.0.1"

[email protected].0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35"
integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==
[email protected].2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5"
integrity sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==
dependencies:
"@discoveryjs/json-ext" "^0.5.0"
"@webpack-cli/configtest" "^1.0.3"
"@webpack-cli/info" "^1.2.4"
"@webpack-cli/serve" "^1.4.0"
"@webpack-cli/configtest" "^1.0.4"
"@webpack-cli/info" "^1.3.0"
"@webpack-cli/serve" "^1.5.1"
colorette "^1.2.1"
commander "^7.0.0"
execa "^5.0.0"
Expand Down

1 comment on commit a77040c

@alex-gilin
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. 👍

Please sign in to comment.