Skip to content
Snippets Groups Projects
Commit d5ba81a3 authored by Lewis Liu's avatar Lewis Liu
Browse files

Refactored shared code to support directory

parent df2b18c2
Branches
Tags
No related merge requests found
import { startServer, isReady } from "../support/start-server";
import webdriver, { By, until } from "selenium-webdriver";
import fs from "fs-promise";
import path from "path";
import { isReady } from "../support/start-server";
import { waitForUrl, screenshot } from "../support/utils";
import { setup, cleanup } from "../support/setup";
import { By, until } from "selenium-webdriver";
import { delay } from '../../../src/metabase/lib/promise';
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000;
const SAUCE_USERNAME = process.env["SAUCE_USERNAME"];
const SAUCE_ACCESS_KEY = process.env["SAUCE_ACCESS_KEY"];
async function loginMetabase(driver, username, password) {
await driver.wait(until.elementLocated(By.css("[name=email]")));
await driver.findElement(By.css("[name=email]")).sendKeys(username);
......@@ -18,65 +15,12 @@ async function loginMetabase(driver, username, password) {
await driver.findElement(By.css(".Button.Button--primary")).click();
}
function waitForUrl(driver, url, timeout = 5000) {
return driver.wait(async () => await driver.getCurrentUrl() === url, timeout);
}
async function screenshot(driver, filename) {
let dir = path.dirname(filename);
if (dir && !(await fs.exists(dir))){
await fs.mkdir(dir);
}
let image = await driver.takeScreenshot();
await fs.writeFile(filename, image, 'base64');
}
import sauceConnectLauncher from "sauce-connect-launcher";
function startSauceConnect(config) {
return new Promise((resolve, reject) => {
sauceConnectLauncher(config, function (err, sauceConnectProcess) {
if (err) {
reject(err);
} else {
resolve({
close: () =>
new Promise((resolve, reject) =>
sauceConnectProcess.close(resolve)
)
});
}
});
});
}
describe("auth/login", () => {
let server, sauceConnect, driver;
beforeAll(async () => {
[server, sauceConnect] = await Promise.all([
startServer("frontend/test/e2e/support/fixtures/setup.db"),
startSauceConnect({
username: SAUCE_USERNAME,
accessKey: SAUCE_ACCESS_KEY
})
]);
// driver = new webdriver.Builder()
// .forBrowser('chrome')
// .build();
driver = new webdriver.Builder()
.withCapabilities({
'browserName': 'chrome',
'platform': 'Mac',
'version': '48.0',
'username': SAUCE_USERNAME,
'accessKey': SAUCE_ACCESS_KEY
})
.usingServer("http://" + SAUCE_USERNAME + ":" + SAUCE_ACCESS_KEY + "@localhost:4445/wd/hub")
.build();
});
({ server, sauceConnect, driver } = await setup());
});
it ("should start", async () => {
expect(await isReady(server.host)).toEqual(true);
......@@ -128,10 +72,6 @@ describe("auth/login", () => {
});
afterAll(async () => {
await Promise.all([
server.stop(),
driver.quit(),
sauceConnect.close()
]);
await cleanup({ server, sauceConnect, driver });
});
});
import webdriver from "selenium-webdriver";
import { USE_SAUCE, sauceCapabilities, sauceServer } from './sauce';
export const createDriver = () => USE_SAUCE ?
new webdriver.Builder()
.withCapabilities(sauceCapabilities)
.usingServer(sauceServer)
.build() :
new webdriver.Builder()
.forBrowser('chrome')
.build();
import sauceConnectLauncher from "sauce-connect-launcher";
export const USE_SAUCE = process.env["USE_SAUCE"];
const SAUCE_USERNAME = process.env["SAUCE_USERNAME"];
const SAUCE_ACCESS_KEY = process.env["SAUCE_ACCESS_KEY"];
export const sauceCapabilities = {
'browserName': 'chrome',
'platform': 'Mac',
'version': '48.0',
'username': SAUCE_USERNAME,
'accessKey': SAUCE_ACCESS_KEY
};
export const sauceServer = `http://${SAUCE_USERNAME}:${SAUCE_ACCESS_KEY}@localhost:4445/wd/hub`;
export const startSauceConnect = (config = {
username: SAUCE_USERNAME,
accessKey: SAUCE_ACCESS_KEY
}) => {
return new Promise((resolve, reject) => {
sauceConnectLauncher(config, function (err, sauceConnectProcess) {
if (err) {
reject(err);
} else {
resolve({
close: () =>
new Promise((resolve, reject) =>
sauceConnectProcess.close(resolve)
)
});
}
});
});
};
import { USE_SAUCE, startSauceConnect } from './sauce';
import { startServer } from "./start-server";
import { createDriver } from "./driver";
export const setup = async ({
dbKey = "frontend/test/e2e/support/fixtures/setup.db"
} = {}) => {
const [server, sauceConnect] = await Promise.all([
startServer(dbKey),
USE_SAUCE ? startSauceConnect() : Promise.resolve()
]);
const driver = createDriver();
return {
server,
sauceConnect,
driver
};
};
export const cleanup = async ({
server,
sauceConnect,
driver
}) => {
await Promise.all([
server.stop(),
driver.quit(),
USE_SAUCE ? sauceConnect.close() : Promise.resolve()
]);
};
import fs from "fs-promise";
import path from "path";
export const waitForUrl = (driver, url, timeout = 5000) => {
return driver.wait(async () => await driver.getCurrentUrl() === url, timeout);
};
export const screenshot = async (driver, filename) => {
const dir = path.dirname(filename);
if (dir && !(await fs.exists(dir))){
await fs.mkdir(dir);
}
const image = await driver.takeScreenshot();
await fs.writeFile(filename, image, 'base64');
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment