mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
309 lines
12 KiB
TypeScript
309 lines
12 KiB
TypeScript
|
import {GristLoadConfig} from 'app/common/gristUrls';
|
||
|
import {TelemetryLevel} from 'app/common/Telemetry';
|
||
|
import {assert, driver} from 'mocha-webdriver';
|
||
|
import * as gu from 'test/nbrowser/gristUtils';
|
||
|
import {server, setupTestSuite} from 'test/nbrowser/testUtils';
|
||
|
import * as testUtils from 'test/server/testUtils';
|
||
|
|
||
|
describe('SupportGrist', function() {
|
||
|
this.timeout(30000);
|
||
|
setupTestSuite();
|
||
|
|
||
|
let oldEnv: testUtils.EnvironmentSnapshot;
|
||
|
let session: gu.Session;
|
||
|
|
||
|
afterEach(() => gu.checkForErrors());
|
||
|
|
||
|
describe('in grist-core', function() {
|
||
|
before(async function() {
|
||
|
oldEnv = new testUtils.EnvironmentSnapshot();
|
||
|
process.env.GRIST_TEST_SERVER_DEPLOYMENT_TYPE = 'core';
|
||
|
process.env.GRIST_DEFAULT_EMAIL = gu.session().email;
|
||
|
await server.restart();
|
||
|
});
|
||
|
|
||
|
after(async function() {
|
||
|
oldEnv.restore();
|
||
|
await server.restart();
|
||
|
});
|
||
|
|
||
|
describe('when user is not a manager', function() {
|
||
|
before(async function() {
|
||
|
oldEnv = new testUtils.EnvironmentSnapshot();
|
||
|
await server.restart();
|
||
|
session = await gu.session().user('user2').personalSite.login();
|
||
|
await session.loadDocMenu('/');
|
||
|
});
|
||
|
|
||
|
after(async function() {
|
||
|
oldEnv.restore();
|
||
|
});
|
||
|
|
||
|
it('does not show a nudge on the doc menu', async function() {
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
});
|
||
|
|
||
|
it('shows a link to the Support Grist page in the user menu', async function() {
|
||
|
await gu.openAccountMenu();
|
||
|
await driver.find('.test-usermenu-support-grist').click();
|
||
|
assert.isTrue(await driver.findContentWait(
|
||
|
'.test-support-grist-page-sponsorship-section',
|
||
|
/Sponsor Grist Labs on GitHub/,
|
||
|
4000
|
||
|
).isDisplayed());
|
||
|
});
|
||
|
|
||
|
it('shows a message that telemetry is managed by the site administrator', async function() {
|
||
|
assert.isTrue(await driver.findContentWait(
|
||
|
'.test-support-grist-page-telemetry-section',
|
||
|
/This instance is opted out of telemetry\. Only the site administrator has permission to change this\./,
|
||
|
4000
|
||
|
).isDisplayed());
|
||
|
|
||
|
process.env.GRIST_TELEMETRY_LEVEL = 'limited';
|
||
|
await server.restart();
|
||
|
await driver.navigate().refresh();
|
||
|
assert.isTrue(await driver.findContentWait(
|
||
|
'.test-support-grist-page-telemetry-section',
|
||
|
/This instance is opted in to telemetry\. Only the site administrator has permission to change this\./,
|
||
|
4000
|
||
|
).isDisplayed());
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('when user is a manager', function() {
|
||
|
before(async function() {
|
||
|
oldEnv = new testUtils.EnvironmentSnapshot();
|
||
|
await server.restart();
|
||
|
session = await gu.session().personalSite.login();
|
||
|
await session.loadDocMenu('/');
|
||
|
});
|
||
|
|
||
|
after(async function() {
|
||
|
oldEnv.restore();
|
||
|
});
|
||
|
|
||
|
it('shows a nudge on the doc menu', async function() {
|
||
|
// Check that the nudge is expanded by default.
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(true);
|
||
|
|
||
|
// Reload the doc menu and check that it's still expanded.
|
||
|
await session.loadDocMenu('/');
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(true);
|
||
|
|
||
|
// Close the nudge and check that it's now collapsed.
|
||
|
await driver.find('.test-support-grist-nudge-card-close').click();
|
||
|
await assertNudgeButtonShown(true);
|
||
|
await assertNudgeCardShown(false);
|
||
|
|
||
|
// Reload again, and check that it's still collapsed.
|
||
|
await session.loadDocMenu('/');
|
||
|
await assertNudgeButtonShown(true);
|
||
|
await assertNudgeCardShown(false);
|
||
|
|
||
|
// Dismiss the contribute button and check that it's now gone, even after reloading.
|
||
|
await driver.find('.test-support-grist-nudge-contribute-button').mouseMove();
|
||
|
await driver.find('.test-support-grist-nudge-contribute-button-close').click();
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
await session.loadDocMenu('/');
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
});
|
||
|
|
||
|
it('shows a link to the Support Grist page in the user menu', async function() {
|
||
|
await gu.openAccountMenu();
|
||
|
await driver.find('.test-usermenu-support-grist').click();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt in to Telemetry/, 2000);
|
||
|
assert.isFalse(await driver.find('.test-support-grist-page-telemetry-section-message').isPresent());
|
||
|
});
|
||
|
|
||
|
it('supports opting in to telemetry from the page', async function() {
|
||
|
await assertTelemetryLevel('off');
|
||
|
await driver.findContentWait(
|
||
|
'.test-support-grist-page-telemetry-section button', /Opt in to Telemetry/, 2000).click();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt out of Telemetry/, 2000);
|
||
|
assert.equal(
|
||
|
await driver.find('.test-support-grist-page-telemetry-section-message').getText(),
|
||
|
'You have opted in to telemetry. Thank you! 🙏'
|
||
|
);
|
||
|
|
||
|
// Reload the page and check that the Grist config indicates telemetry is set to "limited".
|
||
|
await driver.navigate().refresh();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt out of Telemetry/, 2000);
|
||
|
assert.equal(
|
||
|
await driver.findWait('.test-support-grist-page-telemetry-section-message', 2000).getText(),
|
||
|
'You have opted in to telemetry. Thank you! 🙏'
|
||
|
);
|
||
|
await assertTelemetryLevel('limited');
|
||
|
});
|
||
|
|
||
|
it('supports opting out of telemetry from the page', async function() {
|
||
|
await driver.findContent('.test-support-grist-page-telemetry-section button', /Opt out of Telemetry/).click();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt in to Telemetry/, 2000);
|
||
|
assert.isFalse(await driver.find('.test-support-grist-page-telemetry-section-message').isPresent());
|
||
|
|
||
|
// Reload the page and check that the Grist config indicates telemetry is set to "off".
|
||
|
await driver.navigate().refresh();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt in to Telemetry/, 2000);
|
||
|
assert.isFalse(await driver.find('.test-support-grist-page-telemetry-section-message').isPresent());
|
||
|
await assertTelemetryLevel('off');
|
||
|
});
|
||
|
|
||
|
it('supports opting in to telemetry from the nudge', async function() {
|
||
|
// Reset all dismissed popups, including the telemetry nudge.
|
||
|
await driver.executeScript('resetDismissedPopups();');
|
||
|
await gu.waitForServer();
|
||
|
await session.loadDocMenu('/');
|
||
|
|
||
|
// Opt in to telemetry and reload the page.
|
||
|
await driver.find('.test-support-grist-nudge-card-opt-in').click();
|
||
|
await driver.findWait('.test-support-grist-nudge-card-close-button', 1000).click();
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
await session.loadDocMenu('/');
|
||
|
|
||
|
// Check that the nudge is no longer shown and telemetry is set to "limited".
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
await assertTelemetryLevel('limited');
|
||
|
});
|
||
|
|
||
|
it('does not show the nudge if telemetry is enabled', async function() {
|
||
|
// Reset all dismissed popups, including the telemetry nudge.
|
||
|
await driver.executeScript('resetDismissedPopups();');
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Reload the doc menu and check that the nudge still isn't shown.
|
||
|
await session.loadDocMenu('/');
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
|
||
|
// Disable telemetry from the Support Grist page.
|
||
|
await gu.openAccountMenu();
|
||
|
await driver.find('.test-usermenu-support-grist').click();
|
||
|
await driver.findContentWait(
|
||
|
'.test-support-grist-page-telemetry-section button', /Opt out of Telemetry/, 2000).click();
|
||
|
await driver.findContentWait('.test-support-grist-page-telemetry-section button', /Opt in to Telemetry/, 2000);
|
||
|
|
||
|
// Reload the doc menu and check that the nudge is now shown.
|
||
|
await gu.loadDocMenu('/');
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(true);
|
||
|
});
|
||
|
|
||
|
it('shows telemetry opt-in status even when set via environment variable', async function() {
|
||
|
// Set the telemetry level to "limited" via environment variable and restart the server.
|
||
|
process.env.GRIST_TELEMETRY_LEVEL = 'limited';
|
||
|
await server.restart();
|
||
|
|
||
|
// Check that the Support Grist page reports telemetry is enabled.
|
||
|
await gu.loadDocMenu('/');
|
||
|
await gu.openAccountMenu();
|
||
|
await driver.find('.test-usermenu-support-grist').click();
|
||
|
assert.equal(
|
||
|
await driver.findWait('.test-support-grist-page-telemetry-section-message', 2000).getText(),
|
||
|
'You have opted in to telemetry. Thank you! 🙏'
|
||
|
);
|
||
|
assert.isFalse(await driver.findContent('.test-support-grist-page-telemetry-section button',
|
||
|
/Opt out of Telemetry/).isPresent());
|
||
|
|
||
|
// Now set the telemetry level to "off" and restart the server.
|
||
|
process.env.GRIST_TELEMETRY_LEVEL = 'off';
|
||
|
await server.restart();
|
||
|
|
||
|
// Check that the Support Grist page reports telemetry is disabled.
|
||
|
await gu.loadDocMenu('/');
|
||
|
await gu.openAccountMenu();
|
||
|
await driver.find('.test-usermenu-support-grist').click();
|
||
|
assert.equal(
|
||
|
await driver.findWait('.test-support-grist-page-telemetry-section-message', 2000).getText(),
|
||
|
'You have opted out of telemetry.'
|
||
|
);
|
||
|
assert.isFalse(await driver.findContent('.test-support-grist-page-telemetry-section button',
|
||
|
/Opt in to Telemetry/).isPresent());
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('in grist-saas', function() {
|
||
|
before(async function() {
|
||
|
oldEnv = new testUtils.EnvironmentSnapshot();
|
||
|
process.env.GRIST_TEST_SERVER_DEPLOYMENT_TYPE = 'saas';
|
||
|
process.env.GRIST_DEFAULT_EMAIL = gu.session().email;
|
||
|
await server.restart();
|
||
|
session = await gu.session().personalSite.login();
|
||
|
await session.loadDocMenu('/');
|
||
|
});
|
||
|
|
||
|
after(async function() {
|
||
|
oldEnv.restore();
|
||
|
await server.restart();
|
||
|
});
|
||
|
|
||
|
it('does not show a nudge on the doc menu', async function() {
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
});
|
||
|
|
||
|
it('does not show a link to the Support Grist page in the user menu', async function() {
|
||
|
await gu.openAccountMenu();
|
||
|
assert.isFalse(await driver.find('.test-usermenu-support-grist').isPresent());
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('in grist-enterprise', function() {
|
||
|
before(async function() {
|
||
|
oldEnv = new testUtils.EnvironmentSnapshot();
|
||
|
process.env.GRIST_TEST_SERVER_DEPLOYMENT_TYPE = 'enterprise';
|
||
|
process.env.GRIST_DEFAULT_EMAIL = gu.session().email;
|
||
|
await server.restart();
|
||
|
session = await gu.session().personalSite.login();
|
||
|
await session.loadDocMenu('/');
|
||
|
});
|
||
|
|
||
|
after(async function() {
|
||
|
oldEnv.restore();
|
||
|
await server.restart();
|
||
|
});
|
||
|
|
||
|
it('does not show a nudge on the doc menu', async function() {
|
||
|
await assertNudgeButtonShown(false);
|
||
|
await assertNudgeCardShown(false);
|
||
|
});
|
||
|
|
||
|
it('does not show a link to the Support Grist page in the user menu', async function() {
|
||
|
await gu.openAccountMenu();
|
||
|
assert.isFalse(await driver.find('.test-usermenu-support-grist').isPresent());
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
async function assertNudgeButtonShown(isShown: boolean) {
|
||
|
if (isShown) {
|
||
|
assert.isTrue(
|
||
|
await driver.find('.test-support-grist-nudge-contribute-button').isDisplayed()
|
||
|
);
|
||
|
} else {
|
||
|
assert.isFalse(await driver.find('.test-support-grist-nudge-contribute-button').isPresent());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function assertNudgeCardShown(isShown: boolean) {
|
||
|
if (isShown) {
|
||
|
assert.isTrue(
|
||
|
await driver.find('.test-support-grist-nudge-card').isDisplayed()
|
||
|
);
|
||
|
} else {
|
||
|
assert.isFalse(await driver.find('.test-support-grist-nudge-card').isPresent());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function assertTelemetryLevel(level: TelemetryLevel) {
|
||
|
const {telemetry}: GristLoadConfig = await driver.executeScript('return window.gristConfig');
|
||
|
assert.equal(telemetry?.telemetryLevel, level);
|
||
|
}
|