Preparation for editorial workflow test

This commit is contained in:
Agate 2022-11-17 15:30:35 +01:00
parent cef86ef937
commit 8219098f67
5 changed files with 68 additions and 13 deletions

View File

@ -6,7 +6,19 @@ Pour utiliser :
```bash
npm install
npm test
# lancer les tests authentic sur un environnement local (*.dev.publik.love)
npm run test-devinst -- tests/authentik.feature
# lancer les tests workflow-editorial sur l'instance de recette de Nîmes
## Remplacer les valeurs USERNAME et PASSWORD par le mot de passe à utilise
## Pour le compte Agent de cette plateforme
export PUBLIK_URL='https://{}-nimes.test.entrouvert.org'
export PUBLIK_Agente_USERNAME='aberriot'
export PUBLIK_Agente_PASSWORD='passw0rd'
npm run test -- features/workflow-editorial.feature
```
Cela devrait lancer un navigateur et exécuter les étapes de test implémentées dans `features/*.feature`.

View File

@ -1,6 +1,6 @@
Fonctionnalité: Authentik
Scénario: Connexion valide
Sachant que je suis sur la page "Portail Usager - Accueil"
Sachant que je suis sur la page "Portail Usager"
Et que je clique sur "Connexion"
Lorsque je saisis "admin@localhost" dans le champ "username"
Et que je saisis "admin" dans le champ "password"
@ -12,7 +12,7 @@ Fonctionnalité: Authentik
Alors je ne dois pas être connectée
Scénario: Authentification échouée
Sachant que je suis sur la page "Portail Usager - Accueil"
Sachant que je suis sur la page "Portail Usager"
Et que je clique sur "Connexion"
Lorsque je saisis "admin@localhost" dans le champ "username"
Et que je saisis "invalide" dans le champ "password"

View File

@ -1,5 +1,3 @@
const assert = require('assert')
const { Given, When, Then, After, AfterAll, setDefaultTimeout} = require('@cucumber/cucumber');
const { By, Key } = require('selenium-webdriver');
@ -11,17 +9,48 @@ setDefaultTimeout(5 * 1000);
const driver = getDriver()
driver.manage().window().maximize()
let PAGES = {
'Portail Usager - Accueil': process.env.PUBLIK_PORTAIL_USAGER || 'https://combo.dev.publik.love'
const PUBLIK_URL = process.env.PUBLIK_URL || 'https://{}.dev.publik.love'
const PUBLIK_IS_DEV_INSTANCE = (process.env.PUBLIK_IS_DEV_INSTANCE || 'false') === 'true'
const PUBLIK_PORTAIL_USAGER = PUBLIK_IS_DEV_INSTANCE ? 'combo' : process.env.PUBLIK_PORTAIL_USAGER
const PUBLIK_PORTAIL_AGENT = PUBLIK_IS_DEV_INSTANCE ? 'noop' : process.env.PUBLIK_PORTAIL_AGENT
const PAGES = {
'Portail Usager': PUBLIK_URL.replace('{}', PUBLIK_PORTAIL_USAGER || 'portail'),
'Portail Agent': PUBLIK_URL.replace('{}', PUBLIK_PORTAIL_AGENT || 'agents'),
}
console.log('Available pages:', PAGES)
console.log('Launching tests...')
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
function getUrlFromPage(pageName) {
return PAGES[pageName]
}
async function getElementByText(driver, text) {
return await driver.findElement(By.xpath(`//*[contains(text(), "${text}")]`));
}
async function getCurrentUser(driver) {
let usernameLink
try {
usernameLink = await driver.findElement(By.className('connected-user'));
} catch (e) {
if(e.name === 'NoSuchElementError') {
// maybe we're on the agent portal, try with other selector
usernameLink = await driver.findElement(By.className('ui-name'));
} else {
throw e
}
}
let username = await usernameLink.getText()
return username
}
Given("je suis sur la page {string}", async function (pageName) {
await driver.get(getUrlFromPage(pageName));
let url = getUrlFromPage(pageName)
await driver.get(url);
});
When('je saisis {string} dans le champ {string}', async function (text, field) {
@ -36,13 +65,11 @@ When('je valide le formulaire', async function () {
Then('je dois être connecté(e) en tant que {string}', async function (expectedUsername) {
let usernameLink = await driver.findElement(By.className('connected-user'));
let username = await usernameLink.getText()
expect(username).to.equal(expectedUsername)
expect(await getCurrentUser(driver)).to.equal(expectedUsername)
});
When('je clique sur {string}', async function (text) {
let element = await driver.findElement(By.xpath(`//*[contains(text(), "${text}")]`));
let element = await getElementByText(driver, text)
await element.sendKeys(Key.RETURN);
});
@ -55,6 +82,16 @@ Then('la page doit afficher {string}', async function (text) {
let element = await driver.findElement(By.xpath(`//*[contains(text(), "${text}")]`));
});
Given("je suis connectée en tant que {string}", async function (role) {
let homeUrl = getUrlFromPage('Portail Agent')
let username = process.env[`PUBLIK_${role}_USERNAME`] || role
let password = process.env[`PUBLIK_${role}_PASSWORD`] || 'password'
await driver.get(homeUrl)
await (await driver.findElement(By.name('username'))).sendKeys(username)
await (await driver.findElement(By.name('password'))).sendKeys(password, Key.RETURN)
expect(await getCurrentUser(driver)).to.not.be.empty
});
AfterAll(async function(){
await driver.quit();
});

View File

@ -0,0 +1,5 @@
Fonctionnalité: Gestion de contenu éditorial
Contexte:
Sachant que je suis connectée en tant que "Agente"
Scénario: Ajout d'une fiche
Lorsque je suis sur la page "Portail Agent"

View File

@ -4,7 +4,8 @@
"description": "",
"main": "index.js",
"scripts": {
"test": "cucumber-js --language fr"
"test": "cucumber-js --language fr",
"test-devinst": "PUBLIK_URL= PUBLIK_IS_DEV_INSTANCE=true cucumber-js --language fr"
},
"keywords": [],
"author": "",