Spaces:
Running
Running
import path from 'path'; | |
import SeleniumHelper from '../helpers/selenium-helper'; | |
const { | |
clickText, | |
clickXpath, | |
findByText, | |
getDriver, | |
getLogs, | |
loadUri | |
} = new SeleniumHelper(); | |
const uri = path.resolve(__dirname, '../../build/index.html'); | |
let driver; | |
// The tests below require Scratch Link to be unavailable, so we can trigger | |
// an error modal. To make sure this is always true, we came up with the idea of | |
// injecting javascript that overwrites the global Websocket object with one that | |
// attempts to connect to a fake socket address. | |
const websocketFakeoutJs = `var RealWebSocket = WebSocket; | |
WebSocket = function () { | |
return new RealWebSocket("wss://fake.fake"); | |
}`; | |
describe('Hardware extension connection modal', () => { | |
beforeAll(() => { | |
driver = getDriver(); | |
}); | |
afterAll(async () => { | |
await driver.quit(); | |
}); | |
test('Message saying Scratch Link is unavailable (BLE)', async () => { | |
await driver.quit(); | |
driver = getDriver(); | |
await loadUri(uri); | |
await driver.executeScript(websocketFakeoutJs); | |
await clickXpath('//button[@title="Add Extension"]'); | |
await clickText('micro:bit'); | |
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for modal to open | |
findByText('Scratch Link'); // Scratch Link is mentioned in the error modal | |
const logs = await getLogs(); | |
await expect(logs).toEqual([]); | |
}); | |
test('Message saying Scratch Link is unavailable (BT)', async () => { | |
await loadUri(uri); | |
await driver.executeScript(websocketFakeoutJs); | |
await clickXpath('//button[@title="Add Extension"]'); | |
await clickText('EV3'); | |
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for modal to open | |
findByText('Scratch Link'); // Scratch Link is mentioned in the error modal | |
const logs = await getLogs(); | |
await expect(logs).toEqual([]); | |
}); | |
}); | |