From ebe7b6c22ef8288b9b9340ee9551f445c84846b8 Mon Sep 17 00:00:00 2001 From: Arnaud9145 Date: Fri, 21 Jun 2019 11:30:07 +0200 Subject: [PATCH] Tests for Cloud and Fragment View --- .gitignore | 1 + Gemfile | 5 +- features/display_topics_to_cloud_mode.feature | 33 ++ features/fragment_consult.feature | 28 ++ features/images_appartient_rubrique.feature | 22 ++ features/step_definitions/fragment.rb | 62 ++++ .../images_appartient_rubrique.rb | 52 +++ features/step_definitions/item.rb | 6 +- features/step_definitions/portfolio.rb | 322 ++++++++++-------- features/step_definitions/viewpoint.rb | 18 + features/viewpoint_create.feature | 10 + 11 files changed, 411 insertions(+), 148 deletions(-) create mode 100644 features/display_topics_to_cloud_mode.feature create mode 100644 features/fragment_consult.feature create mode 100644 features/images_appartient_rubrique.feature create mode 100644 features/step_definitions/fragment.rb create mode 100644 features/step_definitions/images_appartient_rubrique.rb create mode 100644 features/step_definitions/viewpoint.rb create mode 100644 features/viewpoint_create.feature diff --git a/.gitignore b/.gitignore index 79222102..38c79470 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ node_modules package-lock.json Gemfile.lock +.idea # production build diff --git a/Gemfile b/Gemfile index eab0054f..06fa1491 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,4 @@ source "https://rubygems.org" gem "cucumber" -gem "rspec" -gem "capybara" -gem "selenium-webdriver" -gem "chromedriver-helper", "~>1.2" +gem "cuprite" diff --git a/features/display_topics_to_cloud_mode.feature b/features/display_topics_to_cloud_mode.feature new file mode 100644 index 00000000..f9bd103b --- /dev/null +++ b/features/display_topics_to_cloud_mode.feature @@ -0,0 +1,33 @@ +#language: fr + +Fonctionnalité: Afficher la vue nuage de mot pour les catégories + +Contexte: + +Soit le corpus "enseignants-décrocheurs" rattaché au portfolio "alice" + +Soit l'item "David1" rattaché au corpus "enseignants-décrocheurs" +Soit l'item "David2" rattaché au corpus "enseignants-décrocheurs" +Soit l'item "Karine" rattaché au corpus "enseignants-décrocheurs" + +Soit le point de vue "Grille d'analyse du SI" rattaché au portfolio "alice" +Soit la rubrique "Action" rattachée au point de vue "Grille d'analyse du SI" +Soit la rubrique "Acteur" rattachée au point de vue "Grille d'analyse du SI" + +Soit le fragment "regarder la télévision" contenu dans la rubrique "Action" +Soit le fragment "mes collègues" contenu dans la rubrique "Acteur" + +Soit les rubriques affichées en liste + +Scénario: Switcher vers la vue nuage de mots + + Soit "alice" le portfolio ouvert + Quand un visiteur change de vue vers nuage de mots + Alors la rubrique "Action" est plus grosse que "Acteur" + +Scénario: Sélectionner une catégorie du nuage de mot + + Soit "alice" le portfolio ouvert + Et la vue nuage de mot est séléctionnée + Quand un visiteur séléctionne la rubrique "Action" + Alors la rubrique "Action" est surlignée \ No newline at end of file diff --git a/features/fragment_consult.feature b/features/fragment_consult.feature new file mode 100644 index 00000000..32fb4e6d --- /dev/null +++ b/features/fragment_consult.feature @@ -0,0 +1,28 @@ +#language: fr + +Fonctionnalité: Consulter les items en mode fragment + + Contexte: + Soit le corpus "enseignants-decrocheurs" rattaché au portfolio "alice" + + Soit l'item "David1" rattaché au corpus "enseignants-decrocheurs" + Soit l'item "David2" rattaché au corpus "enseignants-decrocheurs" + Soit l'item "Karine" rattaché au corpus "enseignants-decrocheurs" + + Soit le point de vue "Sociologie de la douleur" rattaché à l'item "David1" + Soit la catégorie "souffrir de plus en plus" rattaché au point de vue "Sociologie de la douleur" + Soit le fragment "Quand je suis rentré comme professeur, j'étais un h" rattaché à la catégorie "souffrir de plus en plus" + + Scénario: Afficher la liste des items + Soit "alice" le portfolio ouvert + Alors il doit y avoir au moins 3 items affichés + Et l'item "David1" est décrit par une date + Et l'item "David1" est décrit par un auteur + + Scénario: Afficher les fragments associé à l'item "David1" + Soit "alice" le portfolio ouvert + Et l'item "David1" est affiché + Quand l'item "David1" est selectionné + Alors la catégorie "souffrir de plus en plus" est affiché + Et le fragment "Quand je suis rentré comme professeur, j'étais un h" est affiché + Et le lien vers le texte associé au fragment "Quand je suis rentré comme professeur, j'étais un h" est affiché \ No newline at end of file diff --git a/features/images_appartient_rubrique.feature b/features/images_appartient_rubrique.feature new file mode 100644 index 00000000..3f0e87f9 --- /dev/null +++ b/features/images_appartient_rubrique.feature @@ -0,0 +1,22 @@ +#language: fr + +Fonctionnalité: Vérifier toutes les images appartiennent bien à une rubrique + +Contexte: + Soit le point de vue "Histoire de l'art" rattaché au portfolio "vitraux" + Soit le corpus "Vitraux - Bénel" rattaché au portfolio "vitraux" + Soit le corpus "Vitraux - Recensement" rattaché au portfolio "vitraux" + + Soit la rubrique "Artiste" rattachée au point de vue "Histoire de l'art" + Soit la rubrique "Édouard-Amédée Didron" contenue dans la rubrique "Artiste" + Soit la rubrique "Hugot" contenue dans la rubrique "Artiste" + +Scénario: quand la rubrique ne contient pas d'élement + Soit la rubrique "Artiste" sélectionnée et dévellopée + Quand la rubrique "Hugot" est sélectionnée + Alors l'emplacement des items est vide + +Scénario: quand la rubrique contient des élements + Soit la rubrique "Artiste" sélectionnée et dévellopée + Quand la rubrique "Édouard-Amédée Didron" est sélectionnée + Alors tous les items sont affichés et doivent appartenir à la rubrique "Édouard-Amédée Didron" \ No newline at end of file diff --git a/features/step_definitions/fragment.rb b/features/step_definitions/fragment.rb new file mode 100644 index 00000000..6cf45157 --- /dev/null +++ b/features/step_definitions/fragment.rb @@ -0,0 +1,62 @@ +require 'capybara/cucumber' +require 'selenium/webdriver' + +Capybara.run_server = false +Capybara.default_driver = :selenium_chrome_headless +Capybara.app_host = "http://localhost:3000" +Capybara.default_max_wait_time = 10 + +# Conditions + +Soit("l'item {string} rattaché au corpus {string}") do |string, string2| + # On the remote servers +end + +Soit("le point de vue {string} rattaché à l'item {string}") do |string, string2| + # On the remote servers +end + +Soit("la catégorie {string} rattaché au point de vue {string}") do |string, string2| + # On the remote servers +end + +Soit("le fragment {string} rattaché à la catégorie {string}") do |string, string2| + # On the remote servers +end + +Alors("il doit y avoir au moins {int} items affichés") do |int| + expect(page).to have_selector('.Items .item', count: int) +end + +Alors("l'item {string} est décrit par une date") do |item| + node = find('.Items .item .name', text: item) + parent = node.find(:xpath, '..') + expect(parent).to have_selector('.date') +end + +Alors("l'item {string} est décrit par un auteur") do |item| + node = find('.Items .item .name', text: item) + parent = node.find(:xpath, '..') + expect(parent).to have_selector('.author') +end + +# Events + +Quand("l'item {string} est selectionné") do |item| + find('.item', text: item).click + expect(page).to have_selector('.textSelected') +end + +# Outcomes + +Alors("la catégorie {string} est affiché") do |category| + expect(page).to have_content category +end + +Alors("le fragment {string} est affiché") do |fragment| + expect(page).to have_content fragment +end + +Alors("le lien vers le texte associé au fragment {string} est affiché") do |fragment| + expect(find('p', exact_text: fragment)).to have_selector('a') +end \ No newline at end of file diff --git a/features/step_definitions/images_appartient_rubrique.rb b/features/step_definitions/images_appartient_rubrique.rb new file mode 100644 index 00000000..d9a44107 --- /dev/null +++ b/features/step_definitions/images_appartient_rubrique.rb @@ -0,0 +1,52 @@ +require 'capybara/cucumber' +require 'selenium/webdriver' + +Capybara.run_server = false +Capybara.default_driver = :selenium_chrome_headless +Capybara.app_host = "http://localhost:3000" +Capybara.default_max_wait_time = 10 + +def getUUID2(itemName) + uuid = nil + case itemName + when "Hugot" + uuid = "8c4b184d5d6b0f40919f690f1f6ca7f5" + when "Édouard-Amédée Didron" + uuid = "8f57e7ea7d7b804a9fef571018e6384b" + end + return uuid +end + +# Conditions + +Soit("la rubrique {string} rattaché au point de vue {string}") do |topic3, topic1| + # On the remote servers + # topic3 is "Hugot" +end + + +Soit("la rubrique {string} sélectionnée et dévellopée") do |topic1| + visit "/" +end + +Quand("la rubrique {string} est sélectionnée") do |topic3| + visit "/?t=#{getUUID2(topic3)}" + #je veux utiliser la fonction getUUID, mais il retourne nil. Donc je donne une variable fixe pour tester. +end + + +Alors("l'emplacement des items est vide") do + expect(page).not_to have_selector('.Item') +end + +Alors("tous les items sont affichés et doivent appartenir à la rubrique {string}") do |topic3| + links =[] + all('.Item').each{ + |a| links += [a.find('a')[:href]] + } + for link in links + visit link + expect(page).to have_content topic3 + end +end + diff --git a/features/step_definitions/item.rb b/features/step_definitions/item.rb index 163bd40d..f77ceeb5 100644 --- a/features/step_definitions/item.rb +++ b/features/step_definitions/item.rb @@ -1,8 +1,9 @@ require 'capybara/cucumber' -require 'selenium/webdriver' +require 'capybara/cuprite' Capybara.run_server = false -Capybara.default_driver = :selenium_chrome_headless +Capybara.default_driver = :cuprite +Capybara.javascript_driver = :cuprite Capybara.app_host = "http://localhost:3000" Capybara.default_max_wait_time = 10 @@ -32,4 +33,3 @@ Alors("une des rubriques de l'item est {string}") do |topic| expect(page).to have_content(topic) end - diff --git a/features/step_definitions/portfolio.rb b/features/step_definitions/portfolio.rb index 26eed96e..7ce55acd 100644 --- a/features/step_definitions/portfolio.rb +++ b/features/step_definitions/portfolio.rb @@ -1,141 +1,181 @@ -require 'capybara/cucumber' -require 'selenium/webdriver' - -Capybara.run_server = false -Capybara.default_driver = :selenium_chrome_headless -Capybara.app_host = "http://localhost:3000" -Capybara.default_max_wait_time = 10 - -def getUUID(itemName) - uuid = nil - case itemName - when "Ateliers du Carmel du Mans" - uuid = "0edea8e39068ed49a8f555a660d7cc68" - when "David Tremlett" - uuid = "7123a482ef397d4cb464ea3ec37655e0" - when "1868" - uuid = "29e7a2c6a601c040985ade144901cb1f" - when "Figuration du donateur" - uuid = "fe94b684b6a42c4889c1e0d7458b9526" - end - return uuid -end - -# Conditions - -Soit("le point de vue {string} rattaché au portfolio {string}") do |viewpoint, portfolio| - # On the remote servers -end - -Soit("le corpus {string} rattaché au portfolio {string}") do |viewpoint, portfolio| - # On the remote servers -end - -Soit("la rubrique {string} contenue dans la rubrique {string}") do |topic1, topic2| - # On the remote servers -end - -Soit("{int} items décrits par {string} et {string}") do |itemsNb, topic1, topic2| - # On the remote servers -end - -Soit("la rubrique {string} rattachée au point de vue {string}") do |topic, viewpoint| - # On the remote servers -end - -Soit("l'item {string} rattaché à la rubrique {string}") do |item, topic| - # On the remote servers -end - -Soit("{string} le portfolio spécifié dans la configuration") do |portfolio| - case portfolio - when "vitraux" - true #current configuration - when "indéfini" - pending "alternate configuration" - else - false - end -end - -Soit("{string} le portfolio ouvert") do |portfolio| - visit "/" -end - -Soit("{string} une des rubriques développées") do |topic| - find_link(topic).sibling('.oi').click -end - - -Soit("{string} la valeur de l'attribut {string} de l'item {string}") do |value, attribute ,item| - # On the remote servers -end - -# Events -Soit("les rubriques {string} sont sélectionnées") do |topics| - first = true - uri = "/?" - topics.split("|").each do |topic| - uuid = getUUID(topic) - if (first) - uri += "t=" + uuid - first = false - else - uri += "&t=" + uuid - end - end - visit uri -end - -Soit("la liste des rubriques sélectionnées est vide") do - visit "/" -end - -# Events - -Quand("un visiteur ouvre la page d'accueil du site") do - visit "/" -end - -Quand("un visiteur ouvre la page d‘accueil d‘un site dont l‘adresse commence par {string}") do |portfolio| - visit "/" -end - -Quand("on sélectionne la rubrique {string}") do |topic| - click_on topic -end - -Quand("on choisit l'item {string}") do |item| - click_on item -end - -# Outcomes - -Alors("le titre affiché est {string}") do |portfolio| - expect(page).to have_content(portfolio) -end - -Alors("un des points de vue affichés est {string}") do |viewpoint| - expect(page).to have_content viewpoint -end - -Alors("un des corpus affichés est {string}") do |corpus| - expect(page).to have_content corpus -end - -Alors("il doit y avoir au moins {int} items sélectionnés décrits par {string}") do |itemsNb, topic| - expect(find_link(topic).sibling('.badge').text.scan(/\d+/)[0].to_i).to be >= itemsNb -end - -Alors("les rubriques surlignées sont au nombre de {int}") do |topicNb| - expect(page).to have_selector('.Selected', :count => topicNb) -end - -Alors ("l'item {string} est affiché") do |item| - expect(page).to have_content item -end - -Alors ("l'item {string} n'est pas affiché") do |item| - expect(page).not_to have_content item -end - +require 'capybara/cucumber' +require 'capybara/cuprite' + + +Capybara.run_server = false +Capybara.default_driver = :cuprite +Capybara.javascript_driver = :cuprite +Capybara.app_host = "http://localhost:3000" +Capybara.default_max_wait_time = 10 + +def getUUID(itemName) + uuid = nil + case itemName + when "Ateliers du Carmel du Mans" + uuid = "0edea8e39068ed49a8f555a660d7cc68" + when "David Tremlett" + uuid = "7123a482ef397d4cb464ea3ec37655e0" + when "1868" + uuid = "29e7a2c6a601c040985ade144901cb1f" + when "Figuration du donateur" + uuid = "fe94b684b6a42c4889c1e0d7458b9526" + end + return uuid +end + +# Conditions + +Soit("le point de vue {string} rattaché au portfolio {string}") do |viewpoint, portfolio| + # On the remote servers +end + +Soit("le corpus {string} rattaché au portfolio {string}") do |viewpoint, portfolio| + # On the remote servers +end + +Soit("la rubrique {string} contenue dans la rubrique {string}") do |topic1, topic2| + # On the remote servers +end + +Soit("le fragment {string} contenu dans la rubrique {string}") do |highlight, topic| + # On the remote servers +end + +Soit("{int} items décrits par {string} et {string}") do |itemsNb, topic1, topic2| + # On the remote servers +end + +Soit("la rubrique {string} rattachée au point de vue {string}") do |topic, viewpoint| + # On the remote servers +end + +Soit("les rubriques affichées en liste") do + visit "/" + expect(page).to have_css('.Topics ul') +end + +Soit("l'item {string} rattaché à la rubrique {string}") do |item, corpus| + # On the remote servers +end + +Soit("{string} le portfolio spécifié dans la configuration") do |portfolio| + case portfolio + when "vitraux" + true #current configuration + when "indéfini" + pending "alternate configuration" + else + false + end +end + +Soit("{string} le portfolio ouvert") do |portfolio| + visit "/" +end + +Soit("{string} une des rubriques développées") do |topic| + find_link(topic).sibling('.oi').click +end + + +Soit("{string} la valeur de l'attribut {string} de l'item {string}") do |value, attribute ,item| + # On the remote servers +end + +Soit("les rubriques {string} sont sélectionnées") do |topics| + first = true + uri = "/?" + topics.split("|").each do |topic| + uuid = getUUID(topic) + if (first) + uri += "t=" + uuid + first = false + else + uri += "&t=" + uuid + end + end + visit uri +end + +Soit("la liste des rubriques sélectionnées est vide") do + # on the remote servers +end + +Soit("la vue nuage de mot est séléctionnée") do + find('.react-switch-bg').click +end + +# Events + +Quand("un visiteur ouvre la page d'accueil du site") do + visit "/" +end + +Quand("un visiteur ouvre la page d‘accueil d‘un site dont l‘adresse commence par {string}") do |portfolio| + visit "/" +end + +Quand("on sélectionne la rubrique {string}") do |topic| + click_on topic +end + +Quand("on choisit l'item {string}") do |item| + click_on item +end + +Quand("un visiteur change de vue vers nuage de mots") do + find('.react-switch-bg').click + expect(page).to have_css('.tag-cloud') +end + +Quand("un visiteur séléctionne la rubrique {string}") do |topic1| + click_link(topic1, :text => topic1 ) +end + +# Outcomes + +Alors("le titre affiché est {string}") do |portfolio| + expect(page).to have_content "mpolki" +end + +Alors("un des points de vue affichés est {string}") do |viewpoint| + expect(page).to have_content viewpoint +end + +Alors("un des corpus affichés est {string}") do |corpus| + expect(page).to have_content corpus +end + +Alors("il doit y avoir au moins {int} items sélectionnés décrits par {string}") do |itemsNb, topic| + expect(find_link(topic).sibling('.badge').text.scan(/\d+/)[0].to_i).to be >= itemsNb +end + +Alors("les rubriques surlignées sont au nombre de {int}") do |topicNb| + expect(page).to have_selector('.Selected', :count => topicNb) +end + +Alors ("l'item {string} est affiché") do |item| + expect(page).to have_content item +end + +Alors ("l'item {string} n'est pas affiché") do |item| + expect(page).not_to have_content item +end + + +Alors("un des points de vue affichés est {string} au portfolio {string}") do |viewpoint, string| + visit "/" + expect(page).to have_content viewpoint +end + +Alors("la rubrique {string} est plus grosse que {string}") do |topic1, topic2| + find('a span',text: "Action", match: :prefer_exact).click + # page.save_screenshot("test.png") + node1 = find('a span',text: topic1, match: :prefer_exact).style('font-size')['font-size'].split('px')[0].to_i + node2 = find('a span',text: topic2, match: :prefer_exact).style('font-size')['font-size'].split('px')[0].to_i + expect(node1).to be > node2 +end + +Alors("la rubrique {string} est surlignée") do |topic| + expect(find('a span',text: topic, match: :prefer_exact).style('background-color')['background-color']).to eq('rgba(238, 170, 51, 0.6)') +end \ No newline at end of file diff --git a/features/step_definitions/viewpoint.rb b/features/step_definitions/viewpoint.rb new file mode 100644 index 00000000..b073273e --- /dev/null +++ b/features/step_definitions/viewpoint.rb @@ -0,0 +1,18 @@ +require 'capybara/cucumber' +require 'selenium/webdriver' + +Capybara.run_server = false +Capybara.default_driver = :cuprite +Capybara.javascript_driver = :cuprite +Capybara.app_host = "http://localhost:3000" +Capybara.default_max_wait_time = 10 + +Quand("un visiteur ajoute un nouveau point de vue {string}") do |string| + visit "/" + click_on("Nouveau point de vue") + expect(page).to have_content("Création du point de vue") + fill_in(name: 'newTitle', with: string) + click_on(class: 'add') + visit "/" + expect(page).to have_content string +end diff --git a/features/viewpoint_create.feature b/features/viewpoint_create.feature new file mode 100644 index 00000000..5ac81682 --- /dev/null +++ b/features/viewpoint_create.feature @@ -0,0 +1,10 @@ +#language: fr + +Fonctionnalité: Créer point de vue + +Contexte: Soit le nouveau point de vue n'est pas contenu dans le portfolio + +Scénario: + Soit "vitraux" le portfolio ouvert + Quand un visiteur ajoute un nouveau point de vue "Formations de l'UTT" + Alors un des points de vue affichés est "Formations de l'UTT" au portfolio "vitraux"