Skip to content

Instantly share code, notes, and snippets.

@s4my
Created April 7, 2022 06:12
Show Gist options
  • Save s4my/f4db2746e6fb9b4765af032a47a2ec3e to your computer and use it in GitHub Desktop.
Save s4my/f4db2746e6fb9b4765af032a47a2ec3e to your computer and use it in GitHub Desktop.
const {Builder, By} = require("selenium-webdriver");
const firefox = require("selenium-webdriver/firefox");
const path = require("path");
const process = require("process");
const fs = require("fs");
const manifest = require("../manifest.json");
const addonId = manifest.browser_specific_settings.gecko.id;
async function getUUID(driver) {
const capabilities = await driver.getCapabilities();
return new Promise((resolve, reject) => {
let numberOfAttempts = 0;
let interval = setInterval(async () => {
try {
const userPrefs = fs.readFileSync(path.join(capabilities.get("moz:profile"),
"/prefs.js"), "utf-8");
let prefs = {};
for (const pref of userPrefs.split(";")) {
if (pref.includes("extensions.webextensions.uuids")) {
for (const line of pref.substring(47, pref.length - 3).split(",")) {
const entry = line.replace(/"/g, "").replace(")", "")
.replace(/\\/g, "").split(":");
prefs[entry[0]] = entry[1];
}
if (prefs[addonId] === undefined || prefs[addonId] === "") {
throw ("can't seem to find the addon's UUID in the preferences.");
}
resolve(prefs[addonId]);
}
}
clearInterval(interval);
} catch(error) {
if (numberOfAttempts > 40) {
clearInterval(interval);
interval = null;
await driver.quit();
reject(`Error: request timeout after 2000 ms, ${error}`);
} else {
numberOfAttempts++;
}
}
}, 50);
});
}
let driver;
let uuid;
beforeEach(async () => {
try {
let options = new firefox.Options()
.setPreference("extensions.firebug.showChromeErrors", true);
driver = await new Builder()
.forBrowser("firefox")
.setFirefoxOptions(options)
.build();
await driver.installAddon("../build/twitch_live_channels-1.0.13.zip",
true);
uuid = await getUUID(driver);
} catch (error) {
console.error(error);
await driver.quit();
process.exit(1);
}
});
test("test case where the user is not logged in.", async () => {
await driver.get(`moz-extension://${uuid}/popup.html`);
const nostreamDiv = await driver.findElement(By.id("nostream"));
expect(await nostreamDiv.isDisplayed()).toBe(true);
expect(await nostreamDiv.getText())
.toBe("This extension requires your public Twitch account information.\n\n" +
"You need to Log In to give it authorization to get the list of channels you" +
" follow.");
const streamsDiv = await driver.findElement(By.id("streams"));
expect(await streamsDiv.getText()).toBe("");
expect(await driver.executeAsyncScript(() => {
const callback = arguments[arguments.length - 1];
(async () => {
await chrome.browserAction.getBadgeText({}, (badgeText) => {
callback(badgeText);
});
})();
})).toBe("0");
await driver.quit();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment