diff --git a/package.json b/package.json index dbe72788f..890950a97 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "lint-js": "xo", "prettier-non-js": "prettier --check --ignore-path=.prettierignore.non-js --loglevel=warn .", "test": "tsc --noEmit && npm run lint-html && npm run lint-css && npm run lint-js && npm run prettier-non-js", - "test-e2e": "tsc && tape 'tests/*.js'", + "test-e2e": "tsc && tape 'tests/spectron/*.js'", "pack": "tsc && electron-builder --dir", "dist": "tsc && electron-builder", "mas": "tsc && electron-builder --mac mas" diff --git a/tests/index.js b/tests/spectron/index.js similarity index 90% rename from tests/index.js rename to tests/spectron/index.js index b2c3590c4..192b07f42 100644 --- a/tests/index.js +++ b/tests/spectron/index.js @@ -1,7 +1,7 @@ "use strict"; const test = require("tape"); -const setup = require("./setup"); +const setup = require("../spectron_lib/common"); test("app runs", async (t) => { t.timeoutAfter(10e3); diff --git a/tests/test-add-organization.js b/tests/spectron/test-add-organization.js similarity index 94% rename from tests/test-add-organization.js rename to tests/spectron/test-add-organization.js index abf699703..0788255d1 100644 --- a/tests/test-add-organization.js +++ b/tests/spectron/test-add-organization.js @@ -1,7 +1,7 @@ "use strict"; const test = require("tape"); -const setup = require("./setup"); +const setup = require("../spectron_lib/common"); test("add-organization", async (t) => { t.timeoutAfter(50e3); diff --git a/tests/spectron/test-back-button.js b/tests/spectron/test-back-button.js new file mode 100644 index 000000000..3bf8c5040 --- /dev/null +++ b/tests/spectron/test-back-button.js @@ -0,0 +1,36 @@ +"use strict"; +const test = require("tape"); + +const setup = require("../spectron_lib/common"); + +test("back button", async (t) => { + t.timeoutAfter(50e3); + setup.resetTestDataDir(); + const app = setup.createApp(); + try { + await setup.waitForLoad(app, t); + await app.client.windowByIndex(1); // Focus on webview + await (await app.client.$(".setting-input-value")).setValue( + "chat.zulip.org", + ); + await (await app.client.$("#connect")).click(); + await setup.wait(5000); + await app.client.windowByIndex(0); // Switch focus back to main win + await app.client.windowByIndex(1); // Switch focus back to org webview + await (await app.client.$("#id_username")).waitForExist(); + await (await app.client.$("#id_username")).setValue( + "testzulipdesktop@gmail.com", + ); + await (await app.client.$("#id_password")).setValue("testzulipdesktop"); + await (await app.client.$(".full-width")).click(); + await setup.wait(5000); + await (await app.client.$(".private_messages_header")).click(); + await setup.wait(5000); + await app.client.windowByIndex(0); + await (await app.client.$("#back-action")).click(); + await setup.wait(5000); + await setup.endTest(app, t); + } catch (error) { + await setup.endTest(app, t, error || "error"); + } +}); diff --git a/tests/test-new-organization.js b/tests/spectron/test-new-organization.js similarity index 92% rename from tests/test-new-organization.js rename to tests/spectron/test-new-organization.js index 8b2acd3d7..30611f8da 100644 --- a/tests/test-new-organization.js +++ b/tests/spectron/test-new-organization.js @@ -1,7 +1,7 @@ "use strict"; const test = require("tape"); -const setup = require("./setup"); +const setup = require("../spectron_lib/common"); // Create new org link should open in the default browser [WIP] diff --git a/tests/spectron/test-reload-button.js b/tests/spectron/test-reload-button.js new file mode 100644 index 000000000..bf1270bb2 --- /dev/null +++ b/tests/spectron/test-reload-button.js @@ -0,0 +1,19 @@ +"use strict"; +const test = require("tape"); + +const setup = require("../spectron_lib/common"); + +test("Reload", async (t) => { + t.timeoutAfter(50e3); + setup.resetTestDataDir(); + const app = setup.createApp(); + try { + await setup.waitForLoad(app, t); + await app.client.windowByIndex(0); + await (await app.client.$("#reload-action")).click(); + await setup.wait(5000); + await setup.endTest(app, t); + } catch (error) { + await setup.endTest(app, t, error || "error"); + } +}); diff --git a/tests/spectron/test-settings.js b/tests/spectron/test-settings.js new file mode 100644 index 000000000..868011b79 --- /dev/null +++ b/tests/spectron/test-settings.js @@ -0,0 +1,60 @@ +"use strict"; +const test = require("tape"); + +const setup = require("../spectron_lib/common"); + +test("Settings", async (t) => { + t.timeoutAfter(50e3); + setup.resetTestDataDir(); + const app = setup.createApp(); + try { + await setup.waitForLoad(app, t); + await app.client.windowByIndex(0); + await (await app.client.$("#settings-action")).click(); + await app.client.windowByIndex(1); + await (await app.client.$("#tray-option")).waitForExist(); + await setup.wait(1000); + await ( + await await (await app.client.$("#tray-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + await ( + await await (await app.client.$("#tray-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + if (process.platform !== "darwin") { + await ( + await await (await app.client.$("#menubar-option")).$( + ".setting-control", + ) + ).click(); + await setup.wait(1000); + await ( + await await (await app.client.$("#menubar-option")).$( + ".setting-control", + ) + ).click(); + await setup.wait(1000); + } + + await ( + await await (await app.client.$("#sidebar-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + await ( + await await (await app.client.$("#sidebar-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + await ( + await await (await app.client.$("#badge-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + await ( + await await (await app.client.$("#badge-option")).$(".setting-control") + ).click(); + await setup.wait(1000); + await setup.endTest(app, t); + } catch (error) { + await setup.endTest(app, t, error || "error"); + } +}); diff --git a/tests/setup.js b/tests/spectron_lib/common.js similarity index 94% rename from tests/setup.js rename to tests/spectron_lib/common.js index 31b728d42..c9f836ad1 100644 --- a/tests/setup.js +++ b/tests/spectron_lib/common.js @@ -24,6 +24,7 @@ function createApp() { path: path.join( __dirname, "..", + "..", "node_modules", ".bin", "electron" + (process.platform === "win32" ? ".cmd" : ""), @@ -38,9 +39,9 @@ function createApp() { // Reads app package.json and updates the productName to config.TEST_APP_PRODUCT_NAME // We do this so that the app integration doesn't doesn't share the same appDataDir as the dev application function generateTestAppPackageJson() { - const packageJson = require(path.join(__dirname, "../package.json")); + const packageJson = require(path.join(__dirname, "..", "..", "package.json")); packageJson.productName = config.TEST_APP_PRODUCT_NAME; - packageJson.main = "../app/main"; + packageJson.main = "../../app/main"; const testPackageJsonPath = path.join(__dirname, "package.json"); fs.writeFileSync( @@ -108,5 +109,5 @@ function getAppDataDir() { function resetTestDataDir() { const appDataDir = getAppDataDir(); rimraf.sync(appDataDir); - rimraf.sync(path.join(__dirname, "package.json")); + rimraf.sync(path.join(__dirname, "../package.json")); } diff --git a/tests/config.js b/tests/spectron_lib/config.js similarity index 100% rename from tests/config.js rename to tests/spectron_lib/config.js