From cb434d12463d15f7265cadefe3f0891517be397c Mon Sep 17 00:00:00 2001 From: dwdw666 <807740079@qq.com> Date: Thu, 7 Apr 2022 15:11:45 +0200 Subject: [PATCH 1/3] SCENARIO: select items from a corpus (see #155). Co-authored-by: Clementlgz Co-authored-by: dylanbonelli Co-authored-by: corentinprp51 --- .../item_select_from_given_corpus.feature | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 features/item_select_from_given_corpus.feature diff --git a/features/item_select_from_given_corpus.feature b/features/item_select_from_given_corpus.feature new file mode 100644 index 00000000..45231ec7 --- /dev/null +++ b/features/item_select_from_given_corpus.feature @@ -0,0 +1,23 @@ +#language: fr + +Fonctionnalité: (Dé)sélectionner les items d'un ou de plusieurs corpus + + +Scénario: L'utilisateur désélectionne un corpus parmi plusieurs + + Soit "Glyptique" le portfolio ouvert + Et tous les corpus sont sélectionnés + Et "AGDS Munich n° 2589.png" un des items affichés + Et "Boston Fine Arts inv. 23.583.jpg" un des items affichés + Quand l'utilisateur désélectionne le corpus "Gemmae Campaniae" + Alors l'item "Boston Fine Arts inv. 23.583.jpg" est affiché + Mais l'item "AGDS Munich n° 2589.png" est caché + +Scénario: L'utilisateur sélectionne plusieurs corpus + + Soit "Glyptique" le portfolio ouvert + Et aucun des corpus n'est sélectionnés + Et aucun item n'est affiché + Quand l'utilisateur sélectionne les corpus "Gemmae Campaniae" et "Pictures within Pictures" + Alors l'item "Boston Fine Arts inv. 23.583.jpg" est affiché + Et l'item "AGDS Munich n° 2589.png" est affiché \ No newline at end of file From d94c631d37558850164f9abf050098f017e87352 Mon Sep 17 00:00:00 2001 From: Corentin Parpette Date: Thu, 7 Apr 2022 17:25:58 +0200 Subject: [PATCH 2/3] TEST: add tests for (un)selecting items from given corpus #155) Co-authored-by: dylanbonelli Co-authored-by: Clementlgz Co-authored-by: dwdw666 <807740079@qq.com> --- .../item_select_from_given_corpus.feature | 22 +++++++++---------- features/step_definitions/context.rb | 15 +++++++++++++ features/step_definitions/event.rb | 10 ++++++++- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/features/item_select_from_given_corpus.feature b/features/item_select_from_given_corpus.feature index 45231ec7..d6276de1 100644 --- a/features/item_select_from_given_corpus.feature +++ b/features/item_select_from_given_corpus.feature @@ -5,19 +5,19 @@ Fonctionnalité: (Dé)sélectionner les items d'un ou de plusieurs corpus Scénario: L'utilisateur désélectionne un corpus parmi plusieurs - Soit "Glyptique" le portfolio ouvert + Soit un portfolio ouvert Et tous les corpus sont sélectionnés - Et "AGDS Munich n° 2589.png" un des items affichés - Et "Boston Fine Arts inv. 23.583.jpg" un des items affichés - Quand l'utilisateur désélectionne le corpus "Gemmae Campaniae" - Alors l'item "Boston Fine Arts inv. 23.583.jpg" est affiché - Mais l'item "AGDS Munich n° 2589.png" est caché + Et "SJ 020" un des items affichés + Et "AXN 009" un des items affichés + Quand l'utilisateur désélectionne le corpus "corpus : Vitraux - Bénel" + Alors l'item "AXN 009" est affiché + Mais l'item "SJ 020" est caché Scénario: L'utilisateur sélectionne plusieurs corpus - Soit "Glyptique" le portfolio ouvert - Et aucun des corpus n'est sélectionnés + Soit un portfolio ouvert + Et aucun des corpus n'est sélectionné Et aucun item n'est affiché - Quand l'utilisateur sélectionne les corpus "Gemmae Campaniae" et "Pictures within Pictures" - Alors l'item "Boston Fine Arts inv. 23.583.jpg" est affiché - Et l'item "AGDS Munich n° 2589.png" est affiché \ No newline at end of file + Quand l'utilisateur sélectionne les corpus "corpus : Vitraux - Bénel" et "corpus : Vitraux - Dr. Krieger" + Alors l'item "SJ 020" est affiché + Et l'item "PSM 002" est affiché diff --git a/features/step_definitions/context.rb b/features/step_definitions/context.rb index d1d46e72..baae012a 100644 --- a/features/step_definitions/context.rb +++ b/features/step_definitions/context.rb @@ -85,3 +85,18 @@ page.current_window.resize_to(320, 480) end +Soit("tous les corpus sont sélectionnés") do + find(:css, ".corpus_checkbox[value='corpus : Vitraux - Bénel']").set(true) + find(:css, ".corpus_checkbox[value='corpus : Vitraux - Dr. Krieger']").set(true) + find(:css, ".corpus_checkbox[value='corpus : Vitraux - Recensement']").set(true) +end + +Soit("aucun des corpus n'est sélectionné") do + find(".corpus_checkbox[value='corpus : Vitraux - Bénel']").set(false) + find(".corpus_checkbox[value='corpus : Vitraux - Dr. Krieger']").set(false) + find(".corpus_checkbox[value='corpus : Vitraux - Recensement']").set(false) +end + +Soit("aucun item n'est affiché") do + expect(page).not_to have_selector ".Item" +end diff --git a/features/step_definitions/event.rb b/features/step_definitions/event.rb index 1e4f5ce1..e7402a50 100644 --- a/features/step_definitions/event.rb +++ b/features/step_definitions/event.rb @@ -37,7 +37,7 @@ Quand("l'utilisateur indique {string} comme valeur de l'attribut {string}") do |value, attribute| within '.Attributes' do fill_in placeholder: 'Ajouter un attribut et une valeur...', with: "#{attribute}:#{value}" - click_on class: 'ValidateButton' + click_on class: 'ValidateButton' end end @@ -96,3 +96,11 @@ end end +Quand("l'utilisateur désélectionne le corpus {string}") do |corpus| + find(".corpus_checkbox[value='#{corpus}']").set(false) +end + +Quand("l'utilisateur sélectionne les corpus {string} et {string}") do |corpus1, corpus2| + find(".corpus_checkbox[value='#{corpus1}']").set(true) + find(".corpus_checkbox[value='#{corpus2}']").set(true) +end From 75254e360e0651e9e60635451bfd8a1d4f6ab5fb Mon Sep 17 00:00:00 2001 From: Clementlgz Date: Thu, 19 May 2022 14:31:07 +0200 Subject: [PATCH 3/3] FEATURE: (un)select items from a corpus. Co-authored-by: dwdw666 <807740079@qq.com> Co-authored-by: corentinprp51 Co-authored-by: dylanbonelli --- src/Selection.js | 43 ++++++++++++++++++ src/components/portfolioPage/Badge.jsx | 2 +- src/components/portfolioPage/Corpora.jsx | 52 ++++++++++++++++++++-- src/components/portfolioPage/Portfolio.jsx | 4 +- src/components/portfolioPage/SearchBar.jsx | 6 ++- src/components/portfolioPage/Status.jsx | 12 ++--- src/model.js | 5 ++- 7 files changed, 110 insertions(+), 14 deletions(-) diff --git a/src/Selection.js b/src/Selection.js index efb2a4be..9a7ae530 100644 --- a/src/Selection.js +++ b/src/Selection.js @@ -154,6 +154,49 @@ export default class Selection { clause.type = (clause.type === 'intersection') ? 'union' : 'intersection'; } + addCorpus = (corpusId) => { + const existing = this.selectionJSON.data.some(e => + e.selection.find(corpus => corpus === corpusId) + || e.exclusion.find(corpus => corpus === corpusId) + ); + if (!existing) { + this.selectionJSON.data = []; + this.selectionJSON.data.push({type: 'intersection', selection: [], exclusion: [corpusId]}); + } + } + + toggleCorpus = (corpusId) => { + const existingClause = this.selectionJSON.data.find(s => { + const allTopics = [...s.selection, ...s.exclusion]; + if (allTopics.length === 0) { + return false; + } + return true; + }); + if (existingClause) { + this.testSwitchPlace(existingClause, corpusId, false, true); + if ([...existingClause.selection, ...existingClause.exclusion].length === 0) + this.selectionJSON.data.splice(this.selectionJSON.data.indexOf(existingClause), 1); + } else { + this.addCorpus(corpusId); + } + } + + testSwitchPlace = (clause, criterion, toDelete, threeState) => { + let index; + if ((index = clause.selection.indexOf(criterion)) > -1) { + clause.selection.splice(index, 1); + if (!toDelete) + clause.exclusion.push(criterion); + } else if ((index = clause.exclusion.indexOf(criterion)) > -1) { + clause.exclusion.splice(index, 1); + if (!toDelete && !threeState) + clause.selection.push(criterion); + } else { + clause.exclusion.push(criterion); + } + }; + getClauses = () => this.selectionJSON.data; getMainClause = () => this.selectionJSON; diff --git a/src/components/portfolioPage/Badge.jsx b/src/components/portfolioPage/Badge.jsx index 177b2ee3..5eb51766 100644 --- a/src/components/portfolioPage/Badge.jsx +++ b/src/components/portfolioPage/Badge.jsx @@ -14,7 +14,7 @@ class Badge extends Component { {this.props.name}