diff options
| author | Zog | 2018-01-22 16:45:19 +0100 | 
|---|---|---|
| committer | Zog | 2018-02-09 10:21:45 +0100 | 
| commit | 8b6e358e3e59c507eac738a38b54f45a133164cc (patch) | |
| tree | d4e0fb10e2fddfc2643877e6234aaa76dc616450 | |
| parent | d0f6b92c7cbf48fad205bb96b85d8305f80d13dc (diff) | |
| download | chouette-core-8b6e358e3e59c507eac738a38b54f45a133164cc.tar.bz2 | |
Refs #5669 @2h; Add a snapshot mechanism in the specs
22 files changed, 219 insertions, 3 deletions
| @@ -176,6 +176,7 @@ group :test do    gem 'simplecov-rcov', :require => false    gem 'htmlbeautifier'    gem 'timecop' +  gem 'rspec-snapshot'  end  group :test, :development, :dev do diff --git a/Gemfile.lock b/Gemfile.lock index 805ee460d..3d957b06b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -447,6 +447,10 @@ GEM      roo (2.7.1)        nokogiri (~> 1)        rubyzip (~> 1.1, < 2.0.0) +    rspec (3.5.0) +      rspec-core (~> 3.5.0) +      rspec-expectations (~> 3.5.0) +      rspec-mocks (~> 3.5.0)      rspec-core (3.5.4)        rspec-support (~> 3.5.0)      rspec-expectations (3.5.0) @@ -463,6 +467,8 @@ GEM        rspec-expectations (~> 3.5.0)        rspec-mocks (~> 3.5.0)        rspec-support (~> 3.5.0) +    rspec-snapshot (0.1.1) +      rspec (> 3.0.0)      rspec-support (3.5.0)      ruby-filemagic (0.7.2)      ruby-graphviz (1.2.3) @@ -681,6 +687,7 @@ DEPENDENCIES    rgeo (~> 0.5.2)    roo    rspec-rails (~> 3.5.0) +  rspec-snapshot    rubyzip    sass-rails (~> 4.0.3)    sawyer (~> 0.6.0) diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 36306559d..a9a31f232 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -24,6 +24,13 @@ module IntegrationSpecHelper          context('', &block) if block_given?        end      end + +    def with_feature feature, &block +      context "with feature #{feature}" do +        let(:features){ [feature] } +        context('', &block) if block_given? +      end +    end    end    def self.included into diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index 330209049..058f1f6ed 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -5,9 +5,14 @@ module Pundit        into.let(:current_referential){ referential || build_stubbed(:referential, organisation: organisation) }        into.let(:current_user){ create :user, permissions: permissions, organisation: organisation }        into.let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } +      into.let(:current_offer_workbench) { create :workbench, organisation: organisation}        into.before do          allow(view).to receive(:pundit_user) { pundit_user } - +        allow(view).to receive(:current_user) { current_user } +        allow(view).to receive(:current_organisation).and_return(organisation) +        allow(view).to receive(:current_offer_workbench).and_return(current_offer_workbench) +        allow(view).to receive(:has_feature?){ |f| features.include?(f)} +        allow(view).to receive(:user_signed_in?).and_return true          allow(view).to receive(:policy) do |instance|            ::Pundit.policy pundit_user, instance          end diff --git a/spec/support/snapshot_support.rb b/spec/support/snapshot_support.rb new file mode 100644 index 000000000..f1a6b1469 --- /dev/null +++ b/spec/support/snapshot_support.rb @@ -0,0 +1,23 @@ +RSpec::Matchers.define :match_actions_links_snapshot do |name| +  match do |actual| +    @content = Capybara::Node::Simple.new(rendered).find('.page_header').native.inner_html +    expect(@content).to match_snapshot(name) +  end + +  failure_message do |actual| +    out = ["Snapshots did not match."] +    expected = File.read(File.dirname(method_missing(:class).metadata[:file_path]) + "/__snapshots__/#{name}.snap") +    out << "Expected: #{expected}" +    out << "Actual: #{@content}" +    out << "\n\n --- DIFF ---" +    out << differ.diff_as_string(@content, expected) +    out.join("\n") +  end + +  def differ +    RSpec::Support::Differ.new( +        :object_preparer => lambda { |object| RSpec::Matchers::Composable.surface_descriptions_in(object) }, +        :color => RSpec::Matchers.configuration.color? +    ) +  end +end diff --git a/spec/views/referentials/__snapshots__/referentials/show.snap b/spec/views/referentials/__snapshots__/referentials/show.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_create.snap b/spec/views/referentials/__snapshots__/referentials/show_create.snap new file mode 100644 index 000000000..c513e63c4 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_create.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" href="/referentials/new?from=999">Dupliquer</a><a class="btn btn-primary" href="/referentials/999/select_compliance_control_set">Valider</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_destroy.snap b/spec/views/referentials/__snapshots__/referentials/show_destroy.snap new file mode 100644 index 000000000..ada47b018 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_destroy.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a data-confirm="Etes vous sûr de vouloir supprimer ce jeu de données ?" class="btn btn-primary" rel="nofollow" data-method="delete" href="/referentials/999"><span class="fa fa-trash mr-xs"></span>Supprimer</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_purchase_windows.snap b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_create.snap b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_create.snap new file mode 100644 index 000000000..c513e63c4 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_create.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" href="/referentials/new?from=999">Dupliquer</a><a class="btn btn-primary" href="/referentials/999/select_compliance_control_set">Valider</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_destroy.snap b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_destroy.snap new file mode 100644 index 000000000..ada47b018 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_destroy.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a data-confirm="Etes vous sûr de vouloir supprimer ce jeu de données ?" class="btn btn-primary" rel="nofollow" data-method="delete" href="/referentials/999"><span class="fa fa-trash mr-xs"></span>Supprimer</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_update.snap b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_update.snap new file mode 100644 index 000000000..0150710ac --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_purchase_windows_update.snap @@ -0,0 +1,12 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"> +<div class="small last-update">Dernière mise à jour le 01/01/2018</div> +<a class="btn btn-default" href="/referentials/999/edit">Editer</a> +</div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" rel="nofollow" data-method="put" href="/referentials/999/archive">Conserver</a><button type="button" data-toggle="modal" data-target="#purgeModal" class="btn btn-primary">Purger</button> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_readonly.snap b/spec/views/referentials/__snapshots__/referentials/show_readonly.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_readonly.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_readonly_create.snap b/spec/views/referentials/__snapshots__/referentials/show_readonly_create.snap new file mode 100644 index 000000000..721e82c76 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_readonly_create.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" href="/referentials/new?from=999">Dupliquer</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_readonly_destroy.snap b/spec/views/referentials/__snapshots__/referentials/show_readonly_destroy.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_readonly_destroy.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_readonly_update.snap b/spec/views/referentials/__snapshots__/referentials/show_readonly_update.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_readonly_update.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys.snap b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys.snap new file mode 100644 index 000000000..d66428a4c --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys.snap @@ -0,0 +1,7 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"><a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a></div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_create.snap b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_create.snap new file mode 100644 index 000000000..c513e63c4 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_create.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" href="/referentials/new?from=999">Dupliquer</a><a class="btn btn-primary" href="/referentials/999/select_compliance_control_set">Valider</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_destroy.snap b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_destroy.snap new file mode 100644 index 000000000..ada47b018 --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_destroy.snap @@ -0,0 +1,9 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"><div class="small last-update">Dernière mise à jour le 01/01/2018</div></div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a data-confirm="Etes vous sûr de vouloir supprimer ce jeu de données ?" class="btn btn-primary" rel="nofollow" data-method="delete" href="/referentials/999"><span class="fa fa-trash mr-xs"></span>Supprimer</a> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_update.snap b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_update.snap new file mode 100644 index 000000000..0150710ac --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_referential_vehicle_journeys_update.snap @@ -0,0 +1,12 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"> +<div class="small last-update">Dernière mise à jour le 01/01/2018</div> +<a class="btn btn-default" href="/referentials/999/edit">Editer</a> +</div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" rel="nofollow" data-method="put" href="/referentials/999/archive">Conserver</a><button type="button" data-toggle="modal" data-target="#purgeModal" class="btn btn-primary">Purger</button> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/__snapshots__/referentials/show_update.snap b/spec/views/referentials/__snapshots__/referentials/show_update.snap new file mode 100644 index 000000000..0150710ac --- /dev/null +++ b/spec/views/referentials/__snapshots__/referentials/show_update.snap @@ -0,0 +1,12 @@ +<div class="container-fluid"> +<div class="row"> +<div class="col-lg-9 col-md-8 col-sm-7 col-xs-7"><div class="page-title"><h1>Jeu de données Jeu de données</h1></div></div> +<div class="col-lg-3 col-md-4 col-sm-5 col-xs-5 text-right"><div class="page-action"> +<div class="small last-update">Dernière mise à jour le 01/01/2018</div> +<a class="btn btn-default" href="/referentials/999/edit">Editer</a> +</div></div> +</div> +<div class="row mb-sm"><div class="col-lg-12 text-right"> +<a class="btn btn-primary" href="/referentials/999/time_tables">Calendriers</a><a class="btn btn-primary" rel="nofollow" data-method="put" href="/referentials/999/archive">Conserver</a><button type="button" data-toggle="modal" data-target="#purgeModal" class="btn btn-primary">Purger</button> +</div></div> +</div>
\ No newline at end of file diff --git a/spec/views/referentials/show.html.erb_spec.rb b/spec/views/referentials/show.html.erb_spec.rb index 6fd51949a..be29dbd79 100644 --- a/spec/views/referentials/show.html.erb_spec.rb +++ b/spec/views/referentials/show.html.erb_spec.rb @@ -1,7 +1,6 @@  require 'spec_helper'  describe "referentials/show", type: :view do -    let!(:referential) do      referential = create(:referential, organisation: organisation)      assign :referential, referential.decorate(context: { @@ -30,7 +29,6 @@ describe "referentials/show", type: :view do      allow(referential).to receive(:referential_read_only?){ readonly }      render template: "referentials/show", layout: "layouts/application"    end -    it "should not present edit button" do      expect(rendered).to_not have_selector("a[href=\"#{view.edit_referential_path(referential)}\"]")    end @@ -48,4 +46,38 @@ describe "referentials/show", type: :view do      end    end +  describe "action links" do +    context "with a readonly referential" do +      let(:readonly){ true } +      it { should match_actions_links_snapshot "referentials/show_readonly" } + +      %w(create destroy update).each do |p| +        with_permission "referentials.#{p}" do +          it { should match_actions_links_snapshot "referentials/show_readonly_#{p}" } +        end +      end +    end + +    context "with a non-readonly referential" do +      it { should match_actions_links_snapshot "referentials/show" } + +      %w(create destroy update).each do |p| +        with_permission "referentials.#{p}" do +          it { should match_actions_links_snapshot "referentials/show_#{p}" } +        end +      end +    end + +    %w(purchase_windows referential_vehicle_journeys).each do |f| +      with_feature f do +        it { should match_actions_links_snapshot "referentials/show_#{f}" } + +        %w(create update destroy).each do |p| +          with_permission "referentials.#{p}" do +            it { should match_actions_links_snapshot "referentials/show_#{f}_#{p}" } +          end +        end +      end +    end +  end  end | 
