Merge pull request #317 from raphinesse/improve-cli-telemetry-spec
cli.spec: telemetry-related improvements
diff --git a/spec/cli.spec.js b/spec/cli.spec.js
index 13294b5..6d0e48f 100644
--- a/spec/cli.spec.js
+++ b/spec/cli.spec.js
@@ -42,9 +42,10 @@
spyOn(console, 'log');
// Prevent accidentally turning telemetry on/off during testing
- telemetry.turnOn = () => {};
- telemetry.turnOff = () => {};
- telemetry.track = () => {};
+ spyOn(telemetry, 'track');
+ spyOn(telemetry, 'turnOn');
+ spyOn(telemetry, 'turnOff');
+ spyOn(telemetry, 'showPrompt').and.returnValue(Promise.resolve());
});
describe('options', () => {
@@ -264,24 +265,26 @@
});
describe('telemetry', () => {
+ beforeEach(() => {
+ // Set a normal opted-in user as default
+ spyOn(telemetry, 'isCI').and.returnValue(false);
+ spyOn(telemetry, 'isOptedIn').and.returnValue(true);
+ spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
+ });
+
it("Test#023 : skips prompt when user runs 'cordova telemetry X'", () => {
- let wasPromptShown = false;
- spyOn(telemetry, 'showPrompt').and.callFake(() => {
- wasPromptShown = true;
- });
+ telemetry.hasUserOptedInOrOut.and.returnValue(false);
return Promise.resolve()
.then(_ => cli(['node', 'cordova', 'telemetry', 'on']))
.then(_ => cli(['node', 'cordova', 'telemetry', 'off']))
.then(() => {
- expect(wasPromptShown).toBeFalsy();
+ expect(telemetry.showPrompt).not.toHaveBeenCalled();
});
});
it("Test#024 : is NOT collected when user runs 'cordova telemetry on' while NOT opted-in", () => {
- spyOn(telemetry, 'isOptedIn').and.returnValue(false);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'track');
+ telemetry.isOptedIn.and.returnValue(false);
return cli(['node', 'cordova', 'telemetry', 'on']).then(() => {
expect(telemetry.track).not.toHaveBeenCalled();
@@ -289,21 +292,13 @@
});
it("Test#025 : is collected when user runs 'cordova telemetry off' while opted-in", () => {
- spyOn(telemetry, 'isOptedIn').and.returnValue(true);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'track');
-
return cli(['node', 'cordova', 'telemetry', 'off']).then(() => {
expect(telemetry.track).toHaveBeenCalledWith('telemetry', 'off', 'via-cordova-telemetry-cmd', 'successful');
});
});
it('Test#026 : tracks platforms/plugins subcommands', () => {
- spyOn(telemetry, 'isOptedIn').and.returnValue(true);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
spyOn(cordova, 'platform').and.returnValue(Promise.resolve());
- spyOn(telemetry, 'track');
return cli(['node', 'cordova', 'platform', 'add', 'ios']).then(() => {
expect(telemetry.track).toHaveBeenCalledWith('platform', 'add', 'successful');
@@ -312,26 +307,29 @@
it('Test#027 : shows prompt if user neither opted in or out yet', () => {
spyOn(cordova, 'prepare').and.returnValue(Promise.resolve());
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'isNoTelemetryFlag').and.returnValue(false);
- spyOn(telemetry, 'showPrompt').and.returnValue(Promise.resolve(false));
+ telemetry.hasUserOptedInOrOut.and.returnValue(false);
return cli(['node', 'cordova', 'prepare']).then(() => {
expect(telemetry.showPrompt).toHaveBeenCalled();
});
});
- // note: we override telemetry timeout here so we don't need to wait 30 seconds
it('Test#028 : opts-out if prompt times out AND it tracks opt-out', () => {
// Remove any optOut settings that might have been saved
// ... and force prompt to be shown
telemetry.clear();
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'track');
- telemetry.timeoutInSecs = 1;
+ // We override telemetry timeout here so we don't need to wait
+ // 30 seconds. 0s is impossible with the current implementation.
+ telemetry.timeoutInSecs = 0.01;
+
+ // Don't display the prompt
+ spyOn(process.stdout, 'write');
+
+ telemetry.isOptedIn.and.callThrough();
+ telemetry.showPrompt.and.callThrough();
+ telemetry.hasUserOptedInOrOut.and.returnValue(false);
+
return cli(['node', 'cordova', '--version']).then(() => {
if (process.env.CI) {
expect(telemetry.isOptedIn()).toBeTruthy();
@@ -343,11 +341,7 @@
});
it("Test#029 : is NOT collected in CI environments and doesn't prompt", () => {
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
- spyOn(telemetry, 'isOptedIn').and.returnValue(true);
- spyOn(telemetry, 'isCI').and.returnValue(true);
- spyOn(telemetry, 'showPrompt');
- spyOn(telemetry, 'track');
+ telemetry.isCI.and.returnValue(true);
return cli(['node', 'cordova', '--version']).then(() => {
expect(telemetry.showPrompt).not.toHaveBeenCalled();
@@ -356,11 +350,7 @@
});
it("Test#030 : is NOT collected when --no-telemetry flag found and doesn't prompt", () => {
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(false);
- spyOn(telemetry, 'isOptedIn').and.returnValue(true);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'showPrompt');
- spyOn(telemetry, 'track');
+ telemetry.hasUserOptedInOrOut.and.returnValue(false);
return cli(['node', 'cordova', '--version', '--no-telemetry']).then(() => {
expect(telemetry.showPrompt).not.toHaveBeenCalled();
@@ -369,11 +359,8 @@
});
it('Test#031 : is NOT collected if user opted out', () => {
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
- spyOn(telemetry, 'isOptedIn').and.returnValue(false);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'showPrompt');
- spyOn(telemetry, 'track');
+ telemetry.isOptedIn.and.returnValue(false);
+ telemetry.hasUserOptedInOrOut.and.returnValue(true);
return cli(['node', 'cordova', '--version']).then(() => {
expect(telemetry.showPrompt).not.toHaveBeenCalled();
@@ -382,12 +369,6 @@
});
it('Test#032 : is collected if user opted in', () => {
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
- spyOn(telemetry, 'isOptedIn').and.returnValue(true);
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'showPrompt');
- spyOn(telemetry, 'track');
-
return cli(['node', 'cordova', '--version']).then(() => {
expect(telemetry.showPrompt).not.toHaveBeenCalled();
expect(telemetry.track).toHaveBeenCalled();
@@ -395,12 +376,7 @@
});
it("Test#033 : track opt-out that happened via 'cordova telemetry off' even if user is NOT opted-in ", () => {
- spyOn(telemetry, 'isCI').and.returnValue(false);
- spyOn(telemetry, 'isOptedIn').and.returnValue(false); // same as calling `telemetry.turnOff();`
- spyOn(telemetry, 'hasUserOptedInOrOut').and.returnValue(true);
- spyOn(telemetry, 'track');
-
- expect(telemetry.isOptedIn()).toBeFalsy();
+ telemetry.isOptedIn.and.returnValue(false);
return cli(['node', 'cordova', 'telemetry', 'off']).then(() => {
expect(telemetry.isOptedIn()).toBeFalsy();