Merge branch 'dev'

This commit is contained in:
gregoirenovel 2017-12-19 13:53:34 +01:00
commit 47e4039a2a
25 changed files with 197 additions and 185 deletions

View file

@ -1,32 +1,46 @@
version: 2 version: 2
jobs:
build: defaults: &defaults
parallelism: 3 working_directory: /tps
docker: docker:
- image: ruby:2.3.1 - image: ruby:2.3.5
- image: postgres:9.4.1 - image: postgres:9.4.1
environment: environment:
POSTGRES_USER: tps_test POSTGRES_USER: tps_test
POSTGRES_PASSWORD: tps_test POSTGRES_PASSWORD: tps_test
POSTGRES_DB: tps_test POSTGRES_DB: tps_test
working_directory: /tps install_system_deps: &install_system_deps
steps: run:
- checkout
- run:
name: Install System Dependencies name: Install System Dependencies
command: apt-get update -qq && apt-get install -y build-essential nodejs command: apt-get update -qq && apt-get install -y build-essential nodejs
- restore_cache:
key: bundle-install-v3-{{ arch }}-{{ checksum "Gemfile.lock" }} restore_phantomjs_cache: &restore_phantomjs_cache
- run: restore_cache:
key: phantomjs-2-1-1
bundle_restore_cache: &bundle_restore_cache
restore_cache:
key: bundle-install-v4-{{ arch }}-{{ checksum "Gemfile.lock" }}
bundle_install: &bundle_install
run:
name: Install Ruby Dependencies name: Install Ruby Dependencies
command: bundle install command: bundle install
jobs:
build:
<<: *defaults
steps:
- checkout
- *install_system_deps
- *bundle_restore_cache
- *bundle_install
- save_cache: - save_cache:
key: bundle-install-v3-{{ arch }}-{{ checksum "Gemfile.lock" }} key: bundle-install-v4-{{ arch }}-{{ checksum "Gemfile.lock" }}
paths: paths:
- /usr/local/bundle - /usr/local/bundle
- restore_cache: - *restore_phantomjs_cache
key: phantomjs-2-1-1
- run: - run:
name: Install PhantomJS Dependencies name: Install PhantomJS Dependencies
command: | command: |
@ -42,6 +56,15 @@ jobs:
key: phantomjs-2-1-1 key: phantomjs-2-1-1
paths: paths:
- /usr/local/bin/phantomjs - /usr/local/bin/phantomjs
test:
<<: *defaults
parallelism: 4
steps:
- checkout
- *install_system_deps
- *restore_phantomjs_cache
- *bundle_restore_cache
- *bundle_install
- run: - run:
environment: environment:
DATABASE_URL: "postgres://tps_test@localhost:5432/tps_test" DATABASE_URL: "postgres://tps_test@localhost:5432/tps_test"
@ -52,8 +75,20 @@ jobs:
DATABASE_URL: "postgres://tps_test@localhost:5432/tps_test" DATABASE_URL: "postgres://tps_test@localhost:5432/tps_test"
name: Run Tests, Splitted by Timings name: Run Tests, Splitted by Timings
command: | command: |
TESTFILES=$(circleci tests glob "spec/**/*.rb"| xargs -n 1 echo | grep -v "spec/factories/" | tr " " "\n" | circleci tests split --split-by=timings) bundle exec rspec --profile 10 \
bundle exec rspec --color --require spec_helper -- ${TESTFILES} --format RspecJunitFormatter \
--out $CIRCLE_TEST_REPORTS/rspec.xml \
--format progress \
$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
- store_test_results:
path: $CIRCLE_TEST_REPORTS/rspec.xml
lint:
<<: *defaults
steps:
- checkout
- *install_system_deps
- *bundle_restore_cache
- *bundle_install
- run: - run:
name: Run rubocop name: Run rubocop
command: bundle exec rubocop -R command: bundle exec rubocop -R
@ -66,6 +101,13 @@ jobs:
- run: - run:
name: Run scss-lint name: Run scss-lint
command: bundle exec scss-lint app/assets/stylesheets/ command: bundle exec scss-lint app/assets/stylesheets/
deploy:
<<: *defaults
steps:
- checkout
- *install_system_deps
- *bundle_restore_cache
- *bundle_install
- add_ssh_keys: - add_ssh_keys:
fingerprints: fingerprints:
- "0a:67:42:7d:7e:b7:e1:3c:48:8f:bf:68:10:51:a8:44" - "0a:67:42:7d:7e:b7:e1:3c:48:8f:bf:68:10:51:a8:44"
@ -78,3 +120,24 @@ jobs:
if [ "${CIRCLE_BRANCH}" == "master" ]; then if [ "${CIRCLE_BRANCH}" == "master" ]; then
bundle exec rake deploy_ha to=production bundle exec rake deploy_ha to=production
fi fi
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
- lint:
requires:
- build
- deploy:
filters:
branches:
only:
- dev
- master
requires:
- test
- lint

View file

@ -153,4 +153,5 @@ group :development, :test do
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'dotenv-rails' gem 'dotenv-rails'
gem 'rspec_junit_formatter'
end end

View file

@ -535,6 +535,8 @@ GEM
rspec-mocks (~> 3.5.0) rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0) rspec-support (~> 3.5.0)
rspec-support (3.5.0) rspec-support (3.5.0)
rspec_junit_formatter (0.3.0)
rspec-core (>= 2, < 4, != 2.12.0)
rubocop (0.49.1) rubocop (0.49.1)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 2.3.3.1, < 3.0) parser (>= 2.3.3.1, < 3.0)
@ -731,6 +733,7 @@ DEPENDENCIES
rest-client rest-client
rgeo-geojson rgeo-geojson
rspec-rails (~> 3.0) rspec-rails (~> 3.0)
rspec_junit_formatter
rubocop rubocop
sass-rails (~> 5.0) sass-rails (~> 5.0)
scenic scenic

View file

@ -117,10 +117,6 @@ form {
} }
} }
.beta-staging {
background-color: #B00100 !important;
}
.text-purple { .text-purple {
color: #8B008B; color: #8B008B;
} }

View file

@ -53,7 +53,7 @@
margin-top: $default-spacer; margin-top: $default-spacer;
} }
.commentaire-textarea { .message-textarea {
margin-bottom: $default-spacer; margin-bottom: $default-spacer;
} }
} }

View file

@ -31,13 +31,6 @@
width: 100%; width: 100%;
} }
#beta {
top: 26px;
bottom: initial;
position: absolute;
transform: rotate(45deg);
}
.copyright { .copyright {
width: 100%; width: 100%;
left: 0; left: 0;

View file

@ -17,10 +17,8 @@
= csrf_meta_tags = csrf_meta_tags
%body %body
= render partial: 'layouts/support_navigator_banner' = render partial: 'layouts/support_navigator_banner'
#beta{ class: (Rails.env == 'production' ? '' : 'beta-staging') } - if Rails.env == 'staging'
- if Rails.env == 'production' #beta
Beta
- else
Env Test Env Test
- if Rails.env == 'test' - if Rails.env == 'test'

View file

@ -20,10 +20,8 @@
.page-wrapper{ class: content_for?(:display_footer) ? 'with-footer' : 'nil' } .page-wrapper{ class: content_for?(:display_footer) ? 'with-footer' : 'nil' }
= render partial: "layouts/support_navigator_banner" = render partial: "layouts/support_navigator_banner"
= render partial: "layouts/ie_lt_10" = render partial: "layouts/ie_lt_10"
#beta{ class:(Rails.env == "production" ? "" : "beta_staging") } - if Rails.env == "staging"
- if Rails.env == "production" #beta
Beta
- else
Env Test Env Test
= render partial: "layouts/new_header" = render partial: "layouts/new_header"

View file

@ -1,8 +1,7 @@
- avis_statut = (@statut == NewGestionnaire::AvisController::A_DONNER_STATUS) ? 'à donner' : 'rendus' - avis_statut = (@statut == NewGestionnaire::AvisController::A_DONNER_STATUS) ? 'à donner' : 'rendus'
- content_for(:title, "Avis #{avis_statut}") - content_for(:title, "Avis #{avis_statut}")
#avis-index .accompagnateur-header
.accompagnateur-header
.container.flex .container.flex
.width-100 .width-100
%h1.tab-title Avis %h1.tab-title Avis
@ -19,7 +18,7 @@
avis #{'donné'.pluralize(@avis_donnes.count)} avis #{'donné'.pluralize(@avis_donnes.count)}
%span.badge= @avis_donnes.count %span.badge= @avis_donnes.count
.container .container
- if @avis.present? - if @avis.present?
%table.table.dossiers-table.hoverable %table.table.dossiers-table.hoverable
%thead %thead

View file

@ -1,7 +1,6 @@
- content_for(:title, "Avis · Dossier nº #{@dossier.id} (#{@dossier.owner_name})") - content_for(:title, "Avis · Dossier nº #{@dossier.id} (#{@dossier.owner_name})")
#avis-show = render partial: 'header', locals: { avis: @avis, dossier: @dossier }
= render partial: 'header', locals: { avis: @avis, dossier: @dossier }
.container .container
%section.give-avis %section.give-avis
@ -21,25 +20,6 @@
.send-wrapper .send-wrapper
= f.submit 'Envoyer votre avis', class: 'button send' = f.submit 'Envoyer votre avis', class: 'button send'
%section.ask-avis = render partial: "new_gestionnaire/shared/avis/form", locals: { url: avis_avis_path(@avis), must_be_confidentiel: @avis.confidentiel? }
%h1.tab-title Inviter une personne à donner son avis
%p.avis-notice L'invité pourra consulter, donner un avis sur le dossier et contribuer au fil de messagerie, mais il ne pourra le modifier.
= form_for Avis.new, url: avis_avis_path(@avis), html: { class: 'form' } do |f| = render partial: 'new_gestionnaire/shared/avis/list', locals: { avis: @dossier.avis_for(current_gestionnaire), avis_seen_at: nil }
= f.email_field :email, placeholder: 'Adresse email', required: true
= f.text_area :introduction, rows: 3, value: 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
.flex.justify-between.align-baseline
- if @avis.confidentiel?
%p.confidentiel
%span.icon.lock
Cet avis est confidentiel et n'est pas affiché aux autres experts consultés
.send-wrapper
= f.submit 'Demander un avis', class: 'button send'
- else
.confidentiel-wrapper
= f.label :confidentiel, 'Cet avis est'
= f.select :confidentiel, [['partagé avec les autres experts', false], ['confidentiel', true]]
.send-wrapper
= f.submit 'Demander un avis', class: 'button send'
= render partial: 'avis_list', locals: { avis: @dossier.avis_for(current_gestionnaire), avis_seen_at: nil }

View file

@ -2,10 +2,4 @@
= render partial: 'header', locals: { avis: @avis, dossier: @dossier } = render partial: 'header', locals: { avis: @avis, dossier: @dossier }
.messagerie.container = render partial: "new_gestionnaire/shared/messagerie", locals: { dossier: @dossier, messagerie_seen_at: nil, new_commentaire: @commentaire, form_url: commentaire_avis_path(@avis) }
%ul.messages-list
- @dossier.commentaires.each do |commentaire|
%li{ class: commentaire_is_from_me_class(commentaire, current_gestionnaire.email) }
= render partial: "new_gestionnaire/shared/commentaires/commentaire", locals: { commentaire: commentaire, messagerie_seen_at: nil }
= render partial: "new_gestionnaire/shared/commentaires/form", locals: { commentaire: @commentaire, form_url: commentaire_avis_path(@avis) }

View file

@ -1,29 +1,6 @@
- content_for(:title, "Demande · Dossier nº #{@dossier.id} (#{@dossier.owner_name})") - content_for(:title, "Demande · Dossier nº #{@dossier.id} (#{@dossier.owner_name})")
#avis-show = render partial: 'header', locals: { avis: @avis, dossier: @dossier }
= render partial: 'header', locals: { avis: @avis, dossier: @dossier }
.container = render partial: 'new_gestionnaire/shared/show', locals: { dossier: @dossier, demande_seen_at: nil }
.tab-title Identité du demandeur
.card
- if @dossier.entreprise.present?
= render partial: 'new_gestionnaire/dossiers/identite_entreprise', locals: { entreprise: @dossier.entreprise }
- if @dossier.individual.present?
= render partial: 'new_gestionnaire/dossiers/identite_individual', locals: { individual: @dossier.individual }
.tab-title Formulaire
- champs = @dossier.ordered_champs.decorate
- if champs.any?
.card
= render partial: 'new_gestionnaire/dossiers/champs', locals: { champs: champs, dossier: @dossier, demande_seen_at: nil }
- if @dossier.procedure.use_api_carto
.tab-title Cartographie
.card
= render partial: 'new_gestionnaire/dossiers/map', locals: { dossier: @dossier }
- if @dossier.procedure.cerfa_flag? || @dossier.types_de_piece_justificative.any?
.tab-title Pièces jointes
.card
= render partial: "new_gestionnaire/dossiers/pieces_jointes", locals: { dossier: @dossier, demande_seen_at: nil }

View file

@ -3,18 +3,6 @@
= render partial: "header", locals: { dossier: @dossier } = render partial: "header", locals: { dossier: @dossier }
.container .container
%section.ask-avis = render partial: "new_gestionnaire/shared/avis/form", locals: { url: avis_dossier_path(@dossier.procedure, @dossier), must_be_confidentiel: false }
%h1.tab-title Inviter une personne à donner son avis
%p.avis-notice L'invité pourra consulter, donner un avis sur le dossier et contribuer au fil de messagerie, mais il ne pourra le modifier.
= form_for Avis.new, url: avis_dossier_path(@dossier.procedure, @dossier), html: { class: 'form' } do |f| = render partial: 'new_gestionnaire/shared/avis/list', locals: { avis: @dossier.avis, avis_seen_at: @avis_seen_at }
= f.email_field :email, placeholder: 'Adresse email', required: true
= f.text_area :introduction, rows: 3, value: 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
.flex.justify-between.align-baseline
.confidentiel-wrapper
= f.label :confidentiel, 'Cet avis est'
= f.select :confidentiel, [['partagé avec les autres experts', false], ['confidentiel', true]]
.send-wrapper
= f.submit 'Demander un avis', class: 'button send', data: { disable_with: "Envoi..." }
= render partial: 'new_gestionnaire/avis/avis_list', locals: { avis: @dossier.avis, avis_seen_at: @avis_seen_at }

View file

@ -2,10 +2,4 @@
= render partial: "header", locals: { dossier: @dossier } = render partial: "header", locals: { dossier: @dossier }
.messagerie.container = render partial: "new_gestionnaire/shared/messagerie", locals: { dossier: @dossier, messagerie_seen_at: @messagerie_seen_at , new_commentaire: @commentaire, form_url: commentaire_dossier_path(@dossier.procedure, @dossier) }
%ul.messages-list
- @dossier.commentaires.each do |commentaire|
%li{ class: commentaire_is_from_me_class(commentaire, current_gestionnaire.email) }
= render partial: "new_gestionnaire/shared/commentaires/commentaire", locals: { commentaire: commentaire, messagerie_seen_at: @messagerie_seen_at }
= render partial: "new_gestionnaire/shared/commentaires/form", locals: { commentaire: @commentaire, form_url: commentaire_dossier_path(@dossier.procedure, @dossier) }

View file

@ -2,27 +2,4 @@
= render partial: "header", locals: { dossier: @dossier } = render partial: "header", locals: { dossier: @dossier }
.container = render partial: 'new_gestionnaire/shared/show', locals: { dossier: @dossier, demande_seen_at: @demande_seen_at }
.tab-title Identité du demandeur
.card
- if @dossier.entreprise.present?
= render partial: "identite_entreprise", locals: { entreprise: @dossier.entreprise }
- if @dossier.individual.present?
= render partial: "identite_individual", locals: { individual: @dossier.individual }
.tab-title Formulaire
- champs = @dossier.ordered_champs.includes(:type_de_champ).decorate
- if champs.any?
.card
= render partial: "champs", locals: { champs: champs, dossier: @dossier, demande_seen_at: @demande_seen_at }
- if @dossier.procedure.use_api_carto
.tab-title Cartographie
.card
= render partial: "map", locals: { dossier: @dossier }
- if @dossier.procedure.cerfa_flag? || @dossier.types_de_piece_justificative.any?
.tab-title Pièces jointes
.card
= render partial: "pieces_jointes", locals: { dossier: @dossier, demande_seen_at: @demande_seen_at }

View file

@ -0,0 +1,7 @@
.messagerie.container
%ul.messages-list
- dossier.commentaires.each do |commentaire|
%li{ class: commentaire_is_from_me_class(commentaire, current_gestionnaire.email) }
= render partial: "new_gestionnaire/shared/messages/message", locals: { commentaire: commentaire, messagerie_seen_at: messagerie_seen_at }
= render partial: "new_gestionnaire/shared/messages/form", locals: { commentaire: new_commentaire, form_url: form_url }

View file

@ -0,0 +1,24 @@
.container
.tab-title Identité du demandeur
.card
- if dossier.entreprise.present?
= render partial: "new_gestionnaire/dossiers/identite_entreprise", locals: { entreprise: dossier.entreprise }
- if dossier.individual.present?
= render partial: "new_gestionnaire/dossiers/identite_individual", locals: { individual: dossier.individual }
.tab-title Formulaire
- champs = dossier.ordered_champs.includes(:type_de_champ).decorate
- if champs.any?
.card
= render partial: "new_gestionnaire/dossiers/champs", locals: { champs: champs, demande_seen_at: demande_seen_at }
- if dossier.procedure.use_api_carto
.tab-title Cartographie
.card
= render partial: "new_gestionnaire/dossiers/map", locals: { dossier: dossier }
- if dossier.procedure.cerfa_flag? || dossier.types_de_piece_justificative.any?
.tab-title Pièces jointes
.card
= render partial: "new_gestionnaire/dossiers/pieces_jointes", locals: { dossier: dossier, demande_seen_at: demande_seen_at }

View file

@ -0,0 +1,20 @@
%section.ask-avis
%h1.tab-title Inviter une personne à donner son avis
%p.avis-notice L'invité pourra consulter, donner un avis sur le dossier et contribuer au fil de messagerie, mais il ne pourra le modifier.
= form_for Avis.new, url: url, html: { class: 'form' } do |f|
= f.email_field :email, placeholder: 'Adresse email', required: true
= f.text_area :introduction, rows: 3, value: 'Bonjour, merci de me donner votre avis sur ce dossier.', required: true
.flex.justify-between.align-baseline
- if must_be_confidentiel
%p.confidentiel
%span.icon.lock
Cet avis est confidentiel et n'est pas affiché aux autres experts consultés
.send-wrapper
= f.submit 'Demander un avis', class: 'button send'
- else
.confidentiel-wrapper
= f.label :confidentiel, 'Cet avis est'
= f.select :confidentiel, [['partagé avec les autres experts', false], ['confidentiel', true]]
.send-wrapper
= f.submit 'Demander un avis', class: 'button send'

View file

@ -1,5 +1,5 @@
= form_for(commentaire, url: form_url, html: { class: 'form' }) do |f| = form_for(commentaire, url: form_url, html: { class: 'form' }) do |f|
= f.text_area :body, rows: 5, placeholder: 'Répondre ici', required: true, class: 'commentaire-textarea' = f.text_area :body, rows: 5, placeholder: 'Répondre ici', required: true, class: 'message-textarea'
.flex.justify-between .flex.justify-between
%div %div
= f.file_field :file, id: :file, accept: commentaire.file.accept_extension_list = f.file_field :file, id: :file, accept: commentaire.file.accept_extension_list

View file

@ -1,9 +1,9 @@
= render partial: 'new_gestionnaire/shared/commentaires/commentaire_icon', locals: { commentaire: commentaire, current_gestionnaire: current_gestionnaire } = render partial: 'new_gestionnaire/shared/messages/message_icon', locals: { commentaire: commentaire, current_gestionnaire: current_gestionnaire }
.width-100 .width-100
%h2 %h2
%span.mail %span.mail
= render partial: 'new_gestionnaire/shared/commentaires/commentaire_issuer', locals: { commentaire: commentaire, current_gestionnaire: current_gestionnaire } = render partial: 'new_gestionnaire/shared/messages/message_issuer', locals: { commentaire: commentaire, current_gestionnaire: current_gestionnaire }
- if ![current_gestionnaire.email, commentaire.dossier.user.email, 'contact@tps.apientreprise.fr'].include?(commentaire.email) - if ![current_gestionnaire.email, commentaire.dossier.user.email, 'contact@tps.apientreprise.fr'].include?(commentaire.email)
%span.guest Invité %span.guest Invité
%span.date{ class: highlight_if_unseen_class(messagerie_seen_at, commentaire.created_at) } %span.date{ class: highlight_if_unseen_class(messagerie_seen_at, commentaire.created_at) }

View file

@ -1,7 +1,7 @@
describe 'new_gestionnaire/avis/avis_list.html.haml', type: :view do describe 'new_gestionnaire/shared/avis/_list.html.haml', type: :view do
before { view.extend DossierHelper } before { view.extend DossierHelper }
subject { render 'new_gestionnaire/avis/avis_list.html.haml', avis: avis, avis_seen_at: seen_at, current_gestionnaire: gestionnaire } subject { render 'new_gestionnaire/shared/avis/list.html.haml', avis: avis, avis_seen_at: seen_at, current_gestionnaire: gestionnaire }
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
let(:avis) { [create(:avis, claimant: gestionnaire)] } let(:avis) { [create(:avis, claimant: gestionnaire)] }

View file

@ -1,7 +1,7 @@
describe 'new_gestionnaire/shared/commentaires/commentaire.html.haml', type: :view do describe 'new_gestionnaire/shared/messages/message.html.haml', type: :view do
before { view.extend DossierHelper } before { view.extend DossierHelper }
subject { render 'new_gestionnaire/shared/commentaires/commentaire.html.haml', commentaire: commentaire, messagerie_seen_at: seen_at, current_gestionnaire: current_gestionnaire } subject { render 'new_gestionnaire/shared/messages/message.html.haml', commentaire: commentaire, messagerie_seen_at: seen_at, current_gestionnaire: current_gestionnaire }
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let(:commentaire) { create(:commentaire, dossier: dossier) } let(:commentaire) { create(:commentaire, dossier: dossier) }