diff --git a/Gemfile b/Gemfile
index 06fa1491..7b178925 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,3 +2,4 @@ source "https://rubygems.org"
gem "cucumber"
gem "cuprite"
+gem "rspec"
diff --git a/etapes b/etapes
new file mode 100644
index 00000000..7b129309
--- /dev/null
+++ b/etapes
@@ -0,0 +1,2 @@
+modifier etc host
+ajouter reverse proxy en local
diff --git a/features/duplicate_portfolio.feature b/features/duplicate_portfolio.feature
new file mode 100644
index 00000000..3dba2448
--- /dev/null
+++ b/features/duplicate_portfolio.feature
@@ -0,0 +1,17 @@
+#language: fr
+
+Fonctionnalité: Dupliquer un portfolio pour un usage privé
+
+Contexte:
+
+ Soit "vitraux" le portfolio ouvert
+ Soit le point de vue "Histoire des religions" rattaché au portfolio "vitraux"
+ Soit le corpus "Vitraux - Dr. Krieger" rattaché au portfolio "vitraux"
+
+Scénario: Dupliquer un portfolio
+
+ Soit l'utilisateur est connecté
+ Quand on créé une copie du portfolio appelée "undefined" avec le corpus "Vitraux - Dr. Krieger" et le point de vue "Histoire des religions"
+ Alors le titre affiché est "undefined"
+ Et un des corpus affichés est "Vitraux - Dr. Krieger"
+ Et un des points de vue affichés est "Histoire des religions"
diff --git a/features/items_with_same_topic.feature b/features/items_with_same_topic.feature
index 0fc0c88e..97b00a2e 100644
--- a/features/items_with_same_topic.feature
+++ b/features/items_with_same_topic.feature
@@ -14,7 +14,7 @@ Scénario:
Soit "vitraux" le portfolio ouvert
Soit "BSS 007" l'item affiché
- Quand on choisit la rubrique "Figuration du donateur"
+ Quand on choisit la rubrique "Figuration du donateur" contenue dans la rubrique "Donateur"
Alors le titre affiché est "VITRAUX"
Et l'item "BSS 007" est affiché
Et l'item "BSS 018" est affiché
diff --git a/features/step_definitions/portfolio.rb b/features/step_definitions/portfolio.rb
index 20340c8b..6f84e9cb 100644
--- a/features/step_definitions/portfolio.rb
+++ b/features/step_definitions/portfolio.rb
@@ -4,7 +4,7 @@
Capybara.run_server = false
Capybara.default_driver = :cuprite
Capybara.javascript_driver = :cuprite
-Capybara.app_host = "http://localhost:3000"
+Capybara.app_host = "http://vitraux.local:3000"
Capybara.default_max_wait_time = 10
@@ -62,6 +62,13 @@ def getPassword(username)
# On the remote servers
end
+Soit("l'utilisateur est connecté") do
+ find_link(href: '#login').click
+ fill_in("Nom d'utilisateur", with: "alice")
+ fill_in("Mot de passe", with: "whiterabbit")
+ click_on('Confirmer')
+end
+
Soit("{string} le portfolio spécifié dans la configuration") do |portfolio|
case portfolio
when "vitraux"
@@ -132,10 +139,31 @@ def getPassword(username)
click_on topic
end
+Quand("on choisit la rubrique {string} contenue dans la rubrique {string}") do |string, string2|
+ click_on string
+ click_on string2
+end
+
Quand("on choisit l'item {string}") do |item|
click_on item
end
+def in_modal()
+ f = find('.modal-content')
+end
+
+Quand("on créé une copie du portfolio appelée {string} avec le corpus {string} et le point de vue {string}") do |name, corpus, viewpoint|
+ case name
+ when "undefined"
+ pending "alternate configuration"
+ else
+ click_button('alice')
+ click_link('Dupliquer')
+ in_modal.fill_in('copyName', with: name)
+ in_modal.check(corpus)
+ in_modal.check(viewpoint)
+ in_modal.click_on('Valider')
+ in_modal.click_on('Confirmer')
Quand("l'utilisateur exclue la rubrique {string}") do |topic|
click_on topic
end
diff --git a/package.json b/package.json
index e369bbea..453abf42 100644
--- a/package.json
+++ b/package.json
@@ -5,15 +5,18 @@
"dependencies": {
"bootstrap": "^4.1.1",
"hypertopic": "^3.1.4",
+ "jquery": "^3.4.1",
"js-tree": "^2.0.1",
"json-groupby": "^1.0.2",
"open-iconic": "^1.1.1",
"query-string": "^4.3.4",
"react": "^16.4.0",
"react-autosuggest": "^9.3.4",
+ "react-bootstrap": "^1.0.0-beta.8",
"react-dom": "^16.4.0",
"react-router-dom": "^4.1.1",
- "sort-by": "^1.2.0"
+ "sort-by": "^1.2.0",
+ "styled-components": "^4.2.0"
},
"devDependencies": {
"react-scripts": "^3.0.1",
diff --git a/reverse-proxy/launcher.sh b/reverse-proxy/launcher.sh
new file mode 100644
index 00000000..a1708ef0
--- /dev/null
+++ b/reverse-proxy/launcher.sh
@@ -0,0 +1 @@
+sudo sed -i '/^127.0.0.1 localhost/ s/$/ vitraux.local dupp-vitraux.local/' /etc/hosts
\ No newline at end of file
diff --git a/reverse-proxy/package.json b/reverse-proxy/package.json
new file mode 100644
index 00000000..bc62d589
--- /dev/null
+++ b/reverse-proxy/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "reverse-proxy",
+ "version": "1.0.0",
+ "description": "",
+ "main": "server.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "node server.js"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "cors": "^2.8.5",
+ "express": "^4.17.1",
+ "express-http-proxy": "^1.5.1",
+ "http-proxy": "^1.17.0"
+ }
+}
diff --git a/reverse-proxy/server.js b/reverse-proxy/server.js
new file mode 100644
index 00000000..eeac98e6
--- /dev/null
+++ b/reverse-proxy/server.js
@@ -0,0 +1,21 @@
+var express = require('express')
+var cors = require('cors')
+const proxy = require('express-http-proxy');
+
+var app = express()
+
+var corsOptions = {
+ origin: true,
+ optionsSuccessStatus: 200,
+ credentials: true
+}
+
+app.use(cors(corsOptions));
+app.use(proxy('argos2.test.hypertopic.org'));
+
+
+
+
+app.listen(80, function () {
+ console.log('CORS-enabled web server listening on port 80')
+})
\ No newline at end of file
diff --git a/src/components/Authenticated/Authenticated.jsx b/src/components/Authenticated/Authenticated.jsx
index 0394c93a..deaddcfc 100644
--- a/src/components/Authenticated/Authenticated.jsx
+++ b/src/components/Authenticated/Authenticated.jsx
@@ -1,5 +1,7 @@
import React, { Component } from 'react';
import conf from '../../config/config.json';
+import Duplicator from '../Duplication/Duplicator'
+import { Dropdown, DropdownButton, ButtonGroup, Button, Form } from 'react-bootstrap';
const SESSION_URI = conf.services[0] + '/_session';
@@ -18,24 +20,39 @@ class Authenticated extends Component {
render() {
if (this.state.user) {
+ if(this.props.portfolio){
+ return (
+