203 lines
8.1 KiB
TypeScript
203 lines
8.1 KiB
TypeScript
import {assertLogMessage} from "./utils/log";
|
|
|
|
const fs = require('fs');
|
|
const Docker = require('dockerode');
|
|
import { Selector } from 'testcafe';
|
|
import {login} from "./utils/roles";
|
|
import {
|
|
findContainer,
|
|
rebootBack,
|
|
rebootPusher,
|
|
resetRedis,
|
|
rebootTraefik,
|
|
startContainer,
|
|
stopContainer, stopRedis, startRedis
|
|
} from "./utils/containers";
|
|
import {getBackDump, getPusherDump} from "./utils/debug";
|
|
|
|
// Note: we are also testing that passing a random query parameter does not cause any issue.
|
|
fixture `Variables`
|
|
.page `http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json?somerandomparam=1`;
|
|
|
|
test("Test that variables storage works", async (t: TestController) => {
|
|
|
|
const variableInput = Selector('#textField');
|
|
|
|
await resetRedis();
|
|
|
|
await Promise.all([
|
|
rebootBack(),
|
|
rebootPusher(),
|
|
]);
|
|
|
|
//const mainWindow = await t.getCurrentWindow();
|
|
|
|
await login(t, 'http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json?somerandomparam=1');
|
|
|
|
await t //.useRole(userAliceOnPage('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json?somerandomparam=1'))
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('default value')
|
|
.selectText(variableInput)
|
|
.pressKey('delete')
|
|
.typeText(variableInput, 'new value')
|
|
.pressKey('tab')
|
|
.switchToMainWindow()
|
|
//.switchToWindow(mainWindow)
|
|
.wait(500)
|
|
// reload
|
|
.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('new value')
|
|
//.debug()
|
|
.switchToMainWindow()
|
|
//.wait(5000)
|
|
//.switchToWindow(mainWindow)
|
|
/*
|
|
.wait(5000)
|
|
//.debug()
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('new value')
|
|
.switchToMainWindow();*/
|
|
|
|
// Now, let's kill the reverse proxy to cut the connexion
|
|
//console.log('Rebooting traefik');
|
|
rebootTraefik();
|
|
//console.log('Rebooting done');
|
|
|
|
// Maybe we should:
|
|
// 1: stop Traefik
|
|
// 2: detect reconnecting screen
|
|
// 3: start Traefik again
|
|
|
|
|
|
await t
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('new value')
|
|
|
|
stopRedis();
|
|
|
|
// Redis is stopped, let's try to modify a variable.
|
|
await t.selectText(variableInput)
|
|
.pressKey('delete')
|
|
.typeText(variableInput, 'value set while Redis stopped')
|
|
.pressKey('tab')
|
|
.switchToMainWindow()
|
|
|
|
startRedis();
|
|
|
|
// Navigate to some other map so that the pusher connection is freed.
|
|
await t.navigateTo('http://maps.workadventure.localhost/tests/')
|
|
.wait(3000);
|
|
|
|
|
|
const backDump = await getBackDump();
|
|
//console.log('backDump', backDump);
|
|
for (const room of backDump) {
|
|
if (room.roomUrl === 'http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json') {
|
|
throw new Error('Room still found in back');
|
|
}
|
|
}
|
|
|
|
const pusherDump = await getPusherDump();
|
|
//console.log('pusherDump', pusherDump);
|
|
await t.expect(pusherDump['http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json']).eql(undefined);
|
|
|
|
await t.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
// Redis will reconnect automatically and will store the variable on reconnect!
|
|
// So we should see the new value.
|
|
.expect(variableInput.value).eql('value set while Redis stopped')
|
|
.switchToMainWindow()
|
|
|
|
|
|
// Now, let's try to kill / reboot the back
|
|
await rebootBack();
|
|
|
|
await t.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('value set while Redis stopped')
|
|
.selectText(variableInput)
|
|
.pressKey('delete')
|
|
.typeText(variableInput, 'value set after back restart')
|
|
.pressKey('tab')
|
|
.switchToMainWindow()
|
|
|
|
.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
// Redis will reconnect automatically and will store the variable on reconnect!
|
|
// So we should see the new value.
|
|
.expect(variableInput.value).eql('value set after back restart')
|
|
.switchToMainWindow()
|
|
|
|
// Now, let's try to kill / reboot the back
|
|
await rebootPusher();
|
|
|
|
await t.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
.expect(variableInput.value).eql('value set after back restart')
|
|
.selectText(variableInput)
|
|
.pressKey('delete')
|
|
.typeText(variableInput, 'value set after pusher restart')
|
|
.pressKey('tab')
|
|
.switchToMainWindow()
|
|
|
|
.navigateTo('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/shared_variables.json')
|
|
.switchToIframe("#cowebsite-buffer iframe")
|
|
// Redis will reconnect automatically and will store the variable on reconnect!
|
|
// So we should see the new value.
|
|
.expect(variableInput.value).eql('value set after pusher restart')
|
|
.switchToMainWindow()
|
|
|
|
|
|
t.ctx.passed = true;
|
|
}).after(async t => {
|
|
if (!t.ctx.passed) {
|
|
console.log("Test 'Test that variables storage works' failed. Browser logs:")
|
|
try {
|
|
console.log(await t.getBrowserConsoleMessages());
|
|
} catch (e) {
|
|
console.error('Error while fetching browser logs (maybe linked to a closed iframe?)', e);
|
|
try {
|
|
console.log('Logs from main window:');
|
|
console.log(await t.switchToMainWindow().getBrowserConsoleMessages());
|
|
} catch (e) {
|
|
console.error('Unable to retrieve logs', e);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
test("Test that variables cache in the back don't prevent setting a variable in case the map changes", async (t: TestController) => {
|
|
// Let's start by visiting a map that DOES not have the variable.
|
|
fs.copyFileSync('../maps/tests/Variables/Cache/variables_cache_1.json', '../maps/tests/Variables/Cache/variables_tmp.json');
|
|
|
|
//const aliceOnPageTmp = userAliceOnPage('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/Cache/variables_tmp.json');
|
|
|
|
await login(t, 'http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/Cache/variables_tmp.json', 'Alice', 2);
|
|
|
|
//.takeScreenshot('before_switch.png');
|
|
|
|
// Let's REPLACE the map by a map that has a new variable
|
|
// At this point, the back server contains a cache of the old map (with no variables)
|
|
fs.copyFileSync('../maps/tests/Variables/Cache/variables_cache_2.json', '../maps/tests/Variables/Cache/variables_tmp.json');
|
|
await t.openWindow('http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/Cache/variables_tmp.json')
|
|
.resizeWindow(960, 800)
|
|
|
|
await login(t, 'http://play.workadventure.localhost/_/global/maps.workadventure.localhost/tests/Variables/Cache/variables_tmp.json', 'Bob', 3);
|
|
|
|
//.takeScreenshot('after_switch.png');
|
|
|
|
// Let's check we successfully manage to save the variable value.
|
|
await assertLogMessage(t, 'SUCCESS!');
|
|
|
|
t.ctx.passed = true;
|
|
}).after(async t => {
|
|
if (!t.ctx.passed) {
|
|
console.log("Test 'Test that variables cache in the back don't prevent setting a variable in case the map changes' failed. Browser logs:")
|
|
console.log(await t.getBrowserConsoleMessages());
|
|
}
|
|
});
|
|
|
|
|