diff options
36 files changed, 208 insertions, 139 deletions
| diff --git a/DEVNOTES.md b/DEVNOTES.md index 2a3915ed2..bcdd37f5e 100644 --- a/DEVNOTES.md +++ b/DEVNOTES.md @@ -37,7 +37,7 @@ They are overriden as follows  ```ruby        def <destructive>? -        !archived? && organisation_match? && user.has_permission('<resource in plural form>.<action>') +        !referential_read_only? && organisation_match? && user.has_permission('<resource in plural form>.<action>')        end  ``` diff --git a/app/helpers/newapplication_helper.rb b/app/helpers/newapplication_helper.rb index df19113db..6600a03f7 100644 --- a/app/helpers/newapplication_helper.rb +++ b/app/helpers/newapplication_helper.rb @@ -1,3 +1,4 @@ +# coding: utf-8  module NewapplicationHelper    # Table Builder @@ -147,7 +148,7 @@ module NewapplicationHelper              content_tag :li, link_to(t("actions.#{action}"), polymorph_url)            end          elsif action == :archive -          unless item.archived? +          unless item.referential_read_only?              content_tag :li, link_to(t("actions.#{action}"), polymorph_url, method: :put)            end          elsif action == :unarchive diff --git a/app/models/referential.rb b/app/models/referential.rb index 75525c441..3eb5d3283 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -252,6 +252,14 @@ class Referential < ActiveRecord::Base    before_destroy :destroy_schema    before_destroy :destroy_jobs +  def referential_read_only? +    in_referential_suite? || archived? +  end + +  def in_referential_suite? +    referential_suite_id.present? +  end +    def in_workbench?      workbench_id.present?    end @@ -334,9 +342,6 @@ class Referential < ActiveRecord::Base      end    end -  def in_referential_suite? -    referential_suite_id.present? -  end    attr_accessor :inline_clone    def clone_schema diff --git a/app/policies/access_link_policy.rb b/app/policies/access_link_policy.rb index 1f1147f60..f2ea7027f 100644 --- a/app/policies/access_link_policy.rb +++ b/app/policies/access_link_policy.rb @@ -6,14 +6,14 @@ class AccessLinkPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('access_links.create') +    !referential_read_only? && organisation_match? && user.has_permission?('access_links.create')    end    def update? -    !archived? && organisation_match? && user.has_permission?('access_links.update') +    !referential_read_only? && organisation_match? && user.has_permission?('access_links.update')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('access_links.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('access_links.destroy')    end  end diff --git a/app/policies/access_point_policy.rb b/app/policies/access_point_policy.rb index 41436e77c..4fa887b9e 100644 --- a/app/policies/access_point_policy.rb +++ b/app/policies/access_point_policy.rb @@ -6,14 +6,14 @@ class AccessPointPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('access_points.create') +    !referential_read_only? && organisation_match? && user.has_permission?('access_points.create')    end    def update? -    !archived? && organisation_match? && user.has_permission?('access_points.update') +    !referential_read_only? && organisation_match? && user.has_permission?('access_points.update')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('access_points.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('access_points.destroy')    end  end diff --git a/app/policies/application_policy.rb b/app/policies/application_policy.rb index dbe4542e7..c44937c9e 100644 --- a/app/policies/application_policy.rb +++ b/app/policies/application_policy.rb @@ -81,6 +81,11 @@ class ApplicationPolicy      @is_archived = is_archived    end +  def referential_read_only? +    return @is_referential_read_only if instance_variable_defined?(:@is_referential_read_only) +    @is_referential_read_only = is_referential_read_only +  end +    def organisation_match?      user.organisation_id == organisation_id    end @@ -124,4 +129,13 @@ class ApplicationPolicy        current_referential.try(:archived_at)      end    end + +  def is_referential_read_only +    !!case referential +    when Referential +      referential.referential_read_only? +    else +      current_referential.try(:referential_read_only?) +    end +  end  end diff --git a/app/policies/connection_link_policy.rb b/app/policies/connection_link_policy.rb index 240c2a804..9bab5e4db 100644 --- a/app/policies/connection_link_policy.rb +++ b/app/policies/connection_link_policy.rb @@ -6,14 +6,14 @@ class ConnectionLinkPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('connection_links.create') +    !referential_read_only? && organisation_match? && user.has_permission?('connection_links.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('connection_links.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('connection_links.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('connection_links.update') +    !referential_read_only? && organisation_match? && user.has_permission?('connection_links.update')    end  end diff --git a/app/policies/journey_pattern_policy.rb b/app/policies/journey_pattern_policy.rb index 12bcced17..beb18d151 100644 --- a/app/policies/journey_pattern_policy.rb +++ b/app/policies/journey_pattern_policy.rb @@ -7,14 +7,14 @@ class JourneyPatternPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('journey_patterns.create') +    !referential_read_only? && organisation_match? && user.has_permission?('journey_patterns.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('journey_patterns.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('journey_patterns.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('journey_patterns.update') +    !referential_read_only? && organisation_match? && user.has_permission?('journey_patterns.update')    end  end diff --git a/app/policies/line_policy.rb b/app/policies/line_policy.rb index e7263cc3b..f7b03b0b5 100644 --- a/app/policies/line_policy.rb +++ b/app/policies/line_policy.rb @@ -26,15 +26,15 @@ class LinePolicy < ApplicationPolicy    end    def create_footnote? -    !archived? && organisation_match? && user.has_permission?('footnotes.create') +    !referential_read_only? && organisation_match? && user.has_permission?('footnotes.create')    end    def edit_footnote? -    !archived? && organisation_match? && user.has_permission?('footnotes.update') +    !referential_read_only? && organisation_match? && user.has_permission?('footnotes.update')    end    def destroy_footnote? -    !archived? && organisation_match? && user.has_permission?('footnotes.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('footnotes.destroy')    end    def update_footnote?  ; edit_footnote? end diff --git a/app/policies/purchase_window_policy.rb b/app/policies/purchase_window_policy.rb index 75143a8bd..eb3b04bf7 100644 --- a/app/policies/purchase_window_policy.rb +++ b/app/policies/purchase_window_policy.rb @@ -6,15 +6,15 @@ class PurchaseWindowPolicy < ApplicationPolicy    end    def create? -     !archived? && organisation_match? && user.has_permission?('purchase_windows.create') +     !referential_read_only? && organisation_match? && user.has_permission?('purchase_windows.create')    end    def update? -    !archived? && organisation_match? && user.has_permission?('purchase_windows.update') +    !referential_read_only? && organisation_match? && user.has_permission?('purchase_windows.update')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('purchase_windows.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('purchase_windows.destroy')    end -end
\ No newline at end of file +end diff --git a/app/policies/referential_policy.rb b/app/policies/referential_policy.rb index 253917509..af5c14880 100644 --- a/app/policies/referential_policy.rb +++ b/app/policies/referential_policy.rb @@ -10,23 +10,23 @@ class ReferentialPolicy < ApplicationPolicy    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('referentials.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('referentials.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('referentials.update') +    !referential_read_only? && organisation_match? && user.has_permission?('referentials.update')    end    def clone? -    !archived? && create? +    !referential_read_only? && create?    end    def validate? -    !archived? && create? && organisation_match? +    !referential_read_only? && create? && organisation_match?    end    def archive? -    record.archived_at.nil? && organisation_match? && user.has_permission?('referentials.update') +    !referential_read_only? && record.archived_at.nil? && organisation_match? && user.has_permission?('referentials.update')    end    def unarchive? diff --git a/app/policies/route_policy.rb b/app/policies/route_policy.rb index 7e9fe251a..0337a5300 100644 --- a/app/policies/route_policy.rb +++ b/app/policies/route_policy.rb @@ -6,15 +6,15 @@ class RoutePolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('routes.create') +    !referential_read_only? && organisation_match? && user.has_permission?('routes.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('routes.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('routes.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('routes.update') +    !referential_read_only? && organisation_match? && user.has_permission?('routes.update')    end    def duplicate? diff --git a/app/policies/routing_constraint_zone_policy.rb b/app/policies/routing_constraint_zone_policy.rb index 3cfcf46ff..fd8081bef 100644 --- a/app/policies/routing_constraint_zone_policy.rb +++ b/app/policies/routing_constraint_zone_policy.rb @@ -6,14 +6,14 @@ class RoutingConstraintZonePolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('routing_constraint_zones.create') +    !referential_read_only? && organisation_match? && user.has_permission?('routing_constraint_zones.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('routing_constraint_zones.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('routing_constraint_zones.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('routing_constraint_zones.update') +    !referential_read_only? && organisation_match? && user.has_permission?('routing_constraint_zones.update')    end  end diff --git a/app/policies/time_table_combination_policy.rb b/app/policies/time_table_combination_policy.rb index daa6808e4..bba458c18 100644 --- a/app/policies/time_table_combination_policy.rb +++ b/app/policies/time_table_combination_policy.rb @@ -7,6 +7,6 @@ class TimeTableCombinationPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('time_tables.update') +    !referential_read_only? && organisation_match? && user.has_permission?('time_tables.update')    end  end diff --git a/app/policies/time_table_policy.rb b/app/policies/time_table_policy.rb index 92d3aef3e..390c170c7 100644 --- a/app/policies/time_table_policy.rb +++ b/app/policies/time_table_policy.rb @@ -7,23 +7,23 @@ class TimeTablePolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('time_tables.create') +    !referential_read_only? && organisation_match? && user.has_permission?('time_tables.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('time_tables.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('time_tables.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('time_tables.update') +    !referential_read_only? && organisation_match? && user.has_permission?('time_tables.update')    end    def actualize? -    !archived? && organisation_match? && edit? +    !referential_read_only? && organisation_match? && edit?    end    def duplicate? -    !archived? && organisation_match? && create? +    !referential_read_only? && organisation_match? && create?    end    def month? diff --git a/app/policies/vehicle_journey_policy.rb b/app/policies/vehicle_journey_policy.rb index 24040455f..adbc5fd89 100644 --- a/app/policies/vehicle_journey_policy.rb +++ b/app/policies/vehicle_journey_policy.rb @@ -6,14 +6,14 @@ class VehicleJourneyPolicy < ApplicationPolicy    end    def create? -    !archived? && organisation_match? && user.has_permission?('vehicle_journeys.create') +    !referential_read_only? && organisation_match? && user.has_permission?('vehicle_journeys.create')    end    def destroy? -    !archived? && organisation_match? && user.has_permission?('vehicle_journeys.destroy') +    !referential_read_only? && organisation_match? && user.has_permission?('vehicle_journeys.destroy')    end    def update? -    !archived? && organisation_match? && user.has_permission?('vehicle_journeys.update') +    !referential_read_only? && organisation_match? && user.has_permission?('vehicle_journeys.update')    end  end diff --git a/app/views/referentials/show.html.slim b/app/views/referentials/show.html.slim index 96755359c..51041198c 100644 --- a/app/views/referentials/show.html.slim +++ b/app/views/referentials/show.html.slim @@ -1,7 +1,7 @@  - breadcrumb @referential  - page_header_content_for @referential  - content_for :page_header_actions do -  - unless (@referential.archived? || !policy(@referential).edit?) +  - unless (@referential.referential_read_only? || !policy(@referential).edit?)      = link_to(t('actions.edit'), edit_referential_path(@referential), class: 'btn btn-default')  - content_for :page_header_content do @@ -22,7 +22,7 @@      .row        .col-lg-6.col-md-6.col-sm-12.col-xs-12          = definition_list t('metadatas'), -          { t('activerecord.attributes.referential.status') => @referential.archived? ? "<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>".html_safe : "<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>".html_safe, +          { t('activerecord.attributes.referential.status') => @referential.referential_read_only? ? "<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>".html_safe : "<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>".html_safe,              @referential.human_attribute_name(:validity_period) => (@referential.validity_period.present? ? t('validity_range', debut: l(@referential.try(:validity_period).try(:begin), format: :short), end: l(@referential.try(:validity_period).try(:end), format: :short)) : '-'),              @referential.human_attribute_name(:organisation) => @referential.organisation.name,              @referential.human_attribute_name(:published_at) => '-' } @@ -102,5 +102,5 @@      .modal-footer        button.btn.btn-link type='button' data-dismiss='modal' #{t('cancel')} -      - unless policy(@referential).archived? +      - unless policy(@referential).referential_read_only?          = f.button :submit, t('actions.clean_up') , class: 'btn btn-primary' diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim index fe0b05330..17ad75051 100644 --- a/app/views/workbenches/show.html.slim +++ b/app/views/workbenches/show.html.slim @@ -30,7 +30,7 @@                  ), \                  TableBuilderHelper::Column.new( \                    key: :status, \ -                  attribute: Proc.new {|w| w.archived? ? ("<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>").html_safe : ("<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>").html_safe} \ +                  attribute: Proc.new {|w| w.referential_read_only? ? ("<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>").html_safe : ("<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>").html_safe} \                  ), \                  TableBuilderHelper::Column.new( \                    key: :organisation, \ diff --git a/spec/helpers/table_builder_helper_spec.rb b/spec/helpers/table_builder_helper_spec.rb index 83b746d4b..e82697b0a 100644 --- a/spec/helpers/table_builder_helper_spec.rb +++ b/spec/helpers/table_builder_helper_spec.rb @@ -1,3 +1,4 @@ +# coding: utf-8  require 'htmlbeautifier'  module TableBuilderHelper @@ -105,7 +106,7 @@ describe TableBuilderHelper, type: :helper do            TableBuilderHelper::Column.new(              key: :status,              attribute: Proc.new do |w| -              if w.archived? +              if w.referential_read_only?                  ("<div class='td-block'><span class='fa fa-archive'></span><span>Conservé</span></div>").html_safe                else                  ("<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>En préparation</span></div>").html_safe diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb index 45881333f..6d699f759 100644 --- a/spec/models/referential_spec.rb +++ b/spec/models/referential_spec.rb @@ -125,19 +125,39 @@ describe Referential, :type => :model do      end    end -  context "used in a ReferentialSuite" do -    before do -      ref.referential_suite_id = 42 +  context "to be referential_read_only or not to be referential_read_only" do +    let( :referential ){ build_stubbed( :referential ) } + +    context "in the beginning" do +      it{ expect( referential ).not_to be_referential_read_only } +    end + +    context "after archivation" do +      before{ referential.archived_at = 1.day.ago } +      it{ expect( referential ).to be_referential_read_only }      end -    it "return true to in_referential_suite?" do -      expect(ref.in_referential_suite?).to be(true) +    context "used in a ReferentialSuite" do +      before { referential.referential_suite_id = 42 } + +      it{ expect( referential ).to be_referential_read_only } + +      it "return true to in_referential_suite?" do +        expect(referential).to be_in_referential_suite +      end + +      it "don't use detect_overlapped_referentials in validation" do +        expect(referential).to_not receive(:detect_overlapped_referentials) +        expect(referential).to be_valid +      end      end -    it "don't use detect_overlapped_referentials in validation" do -      expect(ref).to_not receive(:detect_overlapped_referentials) -      ref.valid? +    context "archived and finalised" do +      before do +        referential.archived_at = 1.month.ago +        referential.referential_suite_id = 53 +      end +      it{ expect( referential ).to be_referential_read_only }      end    end -  end diff --git a/spec/policies/access_link_policy_spec.rb b/spec/policies/access_link_policy_spec.rb index 6194ae55c..9ba3ffa45 100644 --- a/spec/policies/access_link_policy_spec.rb +++ b/spec/policies/access_link_policy_spec.rb @@ -3,18 +3,18 @@ RSpec.describe AccessLinkPolicy, type: :policy do    let( :record ){ build_stubbed :access_link }    permissions :create? do -      it_behaves_like 'permitted policy and same organisation', "access_links.create", archived: true +    it_behaves_like 'permitted policy and same organisation', "access_links.create", archived_and_finalised: true    end    permissions :destroy? do -      it_behaves_like 'permitted policy and same organisation', "access_links.destroy", archived: true +    it_behaves_like 'permitted policy and same organisation', "access_links.destroy", archived_and_finalised: true    end    permissions :edit? do -      it_behaves_like 'permitted policy and same organisation', "access_links.update", archived: true +    it_behaves_like 'permitted policy and same organisation', "access_links.update", archived_and_finalised: true    end    permissions :new? do -      it_behaves_like 'permitted policy and same organisation', "access_links.create", archived: true +    it_behaves_like 'permitted policy and same organisation', "access_links.create", archived_and_finalised: true    end    permissions :update? do -      it_behaves_like 'permitted policy and same organisation', "access_links.update", archived: true +    it_behaves_like 'permitted policy and same organisation', "access_links.update", archived_and_finalised: true    end  end diff --git a/spec/policies/access_point_policy_spec.rb b/spec/policies/access_point_policy_spec.rb index b6bc46eb4..ec7bf1486 100644 --- a/spec/policies/access_point_policy_spec.rb +++ b/spec/policies/access_point_policy_spec.rb @@ -3,18 +3,18 @@ RSpec.describe AccessPointPolicy, type: :policy do    let( :record ){ build_stubbed :access_point }    permissions :create? do -      it_behaves_like 'permitted policy and same organisation', "access_points.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "access_points.create", archived_and_finalised: true    end    permissions :destroy? do -      it_behaves_like 'permitted policy and same organisation', "access_points.destroy", archived: true +      it_behaves_like 'permitted policy and same organisation', "access_points.destroy", archived_and_finalised: true    end    permissions :edit? do -      it_behaves_like 'permitted policy and same organisation', "access_points.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "access_points.update", archived_and_finalised: true    end    permissions :new? do -      it_behaves_like 'permitted policy and same organisation', "access_points.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "access_points.create", archived_and_finalised: true    end    permissions :update? do -      it_behaves_like 'permitted policy and same organisation', "access_points.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "access_points.update", archived_and_finalised: true    end  end diff --git a/spec/policies/company_policy_spec.rb b/spec/policies/company_policy_spec.rb index e018902ca..16225c441 100644 --- a/spec/policies/company_policy_spec.rb +++ b/spec/policies/company_policy_spec.rb @@ -1,4 +1,3 @@ -# coding: utf-8  RSpec.describe CompanyPolicy, type: :policy do    let( :record ){ build_stubbed :company } @@ -11,10 +10,10 @@ RSpec.describe CompanyPolicy, type: :policy do    context 'Non Destructive actions →' do      permissions :index? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end      permissions :show? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end    end diff --git a/spec/policies/connection_link_policy_spec.rb b/spec/policies/connection_link_policy_spec.rb index 23e40abe3..6fc9f95df 100644 --- a/spec/policies/connection_link_policy_spec.rb +++ b/spec/policies/connection_link_policy_spec.rb @@ -3,18 +3,18 @@ RSpec.describe ConnectionLinkPolicy, type: :policy do    let( :record ){ build_stubbed :connection_link }    permissions :create? do -      it_behaves_like 'permitted policy and same organisation', "connection_links.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "connection_links.create", archived_and_finalised: true    end    permissions :destroy? do -      it_behaves_like 'permitted policy and same organisation', "connection_links.destroy", archived: true +      it_behaves_like 'permitted policy and same organisation', "connection_links.destroy", archived_and_finalised: true    end    permissions :edit? do -      it_behaves_like 'permitted policy and same organisation', "connection_links.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "connection_links.update", archived_and_finalised: true    end    permissions :new? do -      it_behaves_like 'permitted policy and same organisation', "connection_links.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "connection_links.create", archived_and_finalised: true    end    permissions :update? do -      it_behaves_like 'permitted policy and same organisation', "connection_links.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "connection_links.update", archived_and_finalised: true    end  end diff --git a/spec/policies/group_of_line_policy_spec.rb b/spec/policies/group_of_line_policy_spec.rb index 29fbb1bfb..0aeab97bd 100644 --- a/spec/policies/group_of_line_policy_spec.rb +++ b/spec/policies/group_of_line_policy_spec.rb @@ -10,10 +10,10 @@ RSpec.describe GroupOfLinePolicy, type: :policy do    context 'Non Destructive actions →' do      permissions :index? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end      permissions :show? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end    end @@ -24,19 +24,19 @@ RSpec.describe GroupOfLinePolicy, type: :policy do    context 'Destructive actions →' do      permissions :create? do -      it_behaves_like 'always forbidden', 'group_of_lines.create', archived: true +      it_behaves_like 'always forbidden', 'group_of_lines.create', archived_and_finalised: true      end      permissions :destroy? do -      it_behaves_like 'always forbidden', 'group_of_lines.destroy', archived: true +      it_behaves_like 'always forbidden', 'group_of_lines.destroy', archived_and_finalised: true      end      permissions :edit? do -      it_behaves_like 'always forbidden', 'group_of_lines.update', archived: true +      it_behaves_like 'always forbidden', 'group_of_lines.update', archived_and_finalised: true      end      permissions :new? do -      it_behaves_like 'always forbidden', 'group_of_lines.create', archived: true +      it_behaves_like 'always forbidden', 'group_of_lines.create', archived_and_finalised: true      end      permissions :update? do -      it_behaves_like 'always forbidden', 'group_of_lines.update', archived: true +      it_behaves_like 'always forbidden', 'group_of_lines.update', archived_and_finalised: true      end    end  end diff --git a/spec/policies/journey_pattern_policy_spec.rb b/spec/policies/journey_pattern_policy_spec.rb index 39f849277..b5e72d813 100644 --- a/spec/policies/journey_pattern_policy_spec.rb +++ b/spec/policies/journey_pattern_policy_spec.rb @@ -3,18 +3,18 @@ RSpec.describe JourneyPatternPolicy, type: :policy do    let( :record ){ build_stubbed :journey_pattern }    permissions :create? do -      it_behaves_like 'permitted policy and same organisation', "journey_patterns.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "journey_patterns.create", archived_and_finalised: true    end    permissions :destroy? do -      it_behaves_like 'permitted policy and same organisation', "journey_patterns.destroy", archived: true +      it_behaves_like 'permitted policy and same organisation', "journey_patterns.destroy", archived_and_finalised: true    end    permissions :edit? do -      it_behaves_like 'permitted policy and same organisation', "journey_patterns.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "journey_patterns.update", archived_and_finalised: true    end    permissions :new? do -      it_behaves_like 'permitted policy and same organisation', "journey_patterns.create", archived: true +      it_behaves_like 'permitted policy and same organisation', "journey_patterns.create", archived_and_finalised: true    end    permissions :update? do -      it_behaves_like 'permitted policy and same organisation', "journey_patterns.update", archived: true +      it_behaves_like 'permitted policy and same organisation', "journey_patterns.update", archived_and_finalised: true    end  end diff --git a/spec/policies/line_policy_spec.rb b/spec/policies/line_policy_spec.rb index 452606bcf..555008abf 100644 --- a/spec/policies/line_policy_spec.rb +++ b/spec/policies/line_policy_spec.rb @@ -1,4 +1,3 @@ -# coding: utf-8  RSpec.describe LinePolicy, type: :policy do    let( :record ){ build_stubbed :line } @@ -11,10 +10,10 @@ RSpec.describe LinePolicy, type: :policy do    context 'Non Destructive actions →' do      permissions :index? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end      permissions :show? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end    end @@ -47,14 +46,14 @@ RSpec.describe LinePolicy, type: :policy do    #  ---------------------------    permissions :create_footnote? do -    it_behaves_like 'permitted policy and same organisation', 'footnotes.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'footnotes.create', archived_and_finalised: true    end    permissions :destroy_footnote? do -    it_behaves_like 'permitted policy and same organisation', 'footnotes.destroy', archived: true +    it_behaves_like 'permitted policy and same organisation', 'footnotes.destroy', archived_and_finalised: true    end    permissions :update_footnote? do -    it_behaves_like 'permitted policy and same organisation', 'footnotes.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'footnotes.update', archived_and_finalised: true    end  end diff --git a/spec/policies/network_policy_spec.rb b/spec/policies/network_policy_spec.rb index c09546c22..6dc3f0d46 100644 --- a/spec/policies/network_policy_spec.rb +++ b/spec/policies/network_policy_spec.rb @@ -10,10 +10,10 @@ RSpec.describe Chouette::NetworkPolicy, type: :policy do    context 'Non Destructive actions →' do      permissions :index? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end      permissions :show? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end    end @@ -24,19 +24,19 @@ RSpec.describe Chouette::NetworkPolicy, type: :policy do    context 'Destructive actions →' do      permissions :create? do -      it_behaves_like 'always forbidden', 'networks.create', archived: true +      it_behaves_like 'always forbidden', 'networks.create', archived_and_finalised: true      end      permissions :destroy? do -      it_behaves_like 'always forbidden', 'networks.destroy', archived: true +      it_behaves_like 'always forbidden', 'networks.destroy', archived_and_finalised: true      end      permissions :edit? do -      it_behaves_like 'always forbidden', 'networks.update', archived: true +      it_behaves_like 'always forbidden', 'networks.update', archived_and_finalised: true      end      permissions :new? do -      it_behaves_like 'always forbidden', 'networks.create', archived: true +      it_behaves_like 'always forbidden', 'networks.create', archived_and_finalised: true      end      permissions :update? do -      it_behaves_like 'always forbidden', 'networks.update', archived: true +      it_behaves_like 'always forbidden', 'networks.update', archived_and_finalised: true      end    end  end diff --git a/spec/policies/purchase_window_policy_spec.rb b/spec/policies/purchase_window_policy_spec.rb index f078bf288..184152cec 100644 --- a/spec/policies/purchase_window_policy_spec.rb +++ b/spec/policies/purchase_window_policy_spec.rb @@ -4,12 +4,12 @@ RSpec.describe PurchaseWindowPolicy, type: :policy do    before { stub_policy_scope(record) }    permissions :create? do -    it_behaves_like 'permitted policy and same organisation', "purchase_windows.create", archived: true +    it_behaves_like 'permitted policy and same organisation', "purchase_windows.create", archived_and_finalised: true    end    permissions :destroy? do -    it_behaves_like 'permitted policy and same organisation', "purchase_windows.destroy", archived: true +    it_behaves_like 'permitted policy and same organisation', "purchase_windows.destroy", archived_and_finalised: true    end    permissions :update? do -    it_behaves_like 'permitted policy and same organisation', "purchase_windows.update", archived: true +    it_behaves_like 'permitted policy and same organisation', "purchase_windows.update", archived_and_finalised: true    end  end diff --git a/spec/policies/referential_policy_spec.rb b/spec/policies/referential_policy_spec.rb index d00415fc6..8540d3ce9 100644 --- a/spec/policies/referential_policy_spec.rb +++ b/spec/policies/referential_policy_spec.rb @@ -32,13 +32,13 @@ RSpec.describe ReferentialPolicy, type: :policy do    # ---------------------------------------    permissions :destroy? do -    it_behaves_like 'permitted policy and same organisation', 'referentials.destroy', archived: true +    it_behaves_like 'permitted policy and same organisation', 'referentials.destroy', archived_and_finalised: true    end    permissions :edit? do -    it_behaves_like 'permitted policy and same organisation', 'referentials.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'referentials.update', archived_and_finalised: true    end    permissions :update? do -    it_behaves_like 'permitted policy and same organisation', 'referentials.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'referentials.update', archived_and_finalised: true    end    # @@ -46,7 +46,7 @@ RSpec.describe ReferentialPolicy, type: :policy do    # ------------------    permissions :clone? do -    it_behaves_like 'permitted policy', 'referentials.create', archived: true +    it_behaves_like 'permitted policy', 'referentials.create', archived_and_finalised: true    end    permissions :archive? do diff --git a/spec/policies/route_policy_spec.rb b/spec/policies/route_policy_spec.rb index df2e41a89..5dc8be76f 100644 --- a/spec/policies/route_policy_spec.rb +++ b/spec/policies/route_policy_spec.rb @@ -3,26 +3,26 @@ RSpec.describe Chouette::RoutePolicy, type: :policy do    let( :record ){ build_stubbed :route }    permissions :create? do -    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived_and_finalised: true    end    permissions :duplicate? do -    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived_and_finalised: true    end    permissions :destroy? do -    it_behaves_like 'permitted policy and same organisation', 'routes.destroy', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.destroy', archived_and_finalised: true    end    permissions :edit? do -    it_behaves_like 'permitted policy and same organisation', 'routes.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.update', archived_and_finalised: true    end    permissions :new? do -    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.create', archived_and_finalised: true    end    permissions :update? do -    it_behaves_like 'permitted policy and same organisation', 'routes.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routes.update', archived_and_finalised: true    end  end diff --git a/spec/policies/routing_constraint_zone_policy_spec.rb b/spec/policies/routing_constraint_zone_policy_spec.rb index 2ef15fa95..d619649d3 100644 --- a/spec/policies/routing_constraint_zone_policy_spec.rb +++ b/spec/policies/routing_constraint_zone_policy_spec.rb @@ -4,22 +4,22 @@ RSpec.describe RoutingConstraintZonePolicy, type: :policy do    permissions :create? do -    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.create', archived_and_finalised: true    end    permissions :destroy? do -    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.destroy', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.destroy', archived_and_finalised: true    end    permissions :edit? do -    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.update', archived_and_finalised: true    end    permissions :new? do -    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.create', archived_and_finalised: true    end    permissions :update? do -    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'routing_constraint_zones.update', archived_and_finalised: true    end  end diff --git a/spec/policies/stop_area_policy_spec.rb b/spec/policies/stop_area_policy_spec.rb index 90835d1d8..8144c16e2 100644 --- a/spec/policies/stop_area_policy_spec.rb +++ b/spec/policies/stop_area_policy_spec.rb @@ -11,10 +11,10 @@ RSpec.describe StopAreaPolicy, type: :policy do    context 'Non Destructive actions →' do      permissions :index? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end      permissions :show? do -      it_behaves_like 'always allowed', 'anything', archived: true +      it_behaves_like 'always allowed', 'anything', archived_and_finalised: true      end    end diff --git a/spec/policies/time_table_policy_spec.rb b/spec/policies/time_table_policy_spec.rb index dad3c13bc..5a2abc61d 100644 --- a/spec/policies/time_table_policy_spec.rb +++ b/spec/policies/time_table_policy_spec.rb @@ -3,22 +3,22 @@ RSpec.describe TimeTablePolicy, type: :policy do    let( :record ){ build_stubbed :time_table }    permissions :create? do -    it_behaves_like 'permitted policy and same organisation', 'time_tables.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'time_tables.create', archived_and_finalised: true    end    permissions :destroy? do -    it_behaves_like 'permitted policy and same organisation', 'time_tables.destroy', archived: true +    it_behaves_like 'permitted policy and same organisation', 'time_tables.destroy', archived_and_finalised: true    end    permissions :edit? do -    it_behaves_like 'permitted policy and same organisation', 'time_tables.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'time_tables.update', archived_and_finalised: true    end    permissions :new? do -    it_behaves_like 'permitted policy and same organisation', 'time_tables.create', archived: true +    it_behaves_like 'permitted policy and same organisation', 'time_tables.create', archived_and_finalised: true    end    permissions :update? do -    it_behaves_like 'permitted policy and same organisation', 'time_tables.update', archived: true +    it_behaves_like 'permitted policy and same organisation', 'time_tables.update', archived_and_finalised: true    end  end diff --git a/spec/support/pundit/policies.rb b/spec/support/pundit/policies.rb index a3489d9db..d8d12d735 100644 --- a/spec/support/pundit/policies.rb +++ b/spec/support/pundit/policies.rb @@ -12,11 +12,14 @@ module Support          UserContext.new(user, referential: referential)        end +      def finalise_referential +        referential.referential_suite_id = random_int  +      end +        def remove_permissions(*permissions, from_user:, save: false)          from_user.permissions -= permissions.flatten          from_user.save! if save        end -      end      module PoliciesMacros diff --git a/spec/support/pundit/shared_examples.rb b/spec/support/pundit/shared_examples.rb index 49f915626..13f537c6d 100644 --- a/spec/support/pundit/shared_examples.rb +++ b/spec/support/pundit/shared_examples.rb @@ -1,6 +1,6 @@  RSpec.shared_examples 'always allowed' do -  | permission, archived: false| +  | permission, archived_and_finalised: false |    context 'same organisation →' do      before do        user.organisation_id = referential.organisation_id @@ -8,11 +8,16 @@ RSpec.shared_examples 'always allowed' do      it "allows a user with the same organisation" do        expect_it.to permit(user_context, record)      end -    if archived +    if archived_and_finalised        it 'does not remove permission for archived referentials' do          referential.archived_at = 42.seconds.ago          expect_it.to permit(user_context, record)        end + +      it 'does not remove permission for finalised referentials' do +        finalise_referential +        expect_it.to permit(user_context, record) +      end      end    end @@ -23,27 +28,33 @@ RSpec.shared_examples 'always allowed' do      it "allows a user with a different organisation" do        expect_it.to permit(user_context, record)      end -    if archived +    if archived_and_finalised        it 'does not remove permission for archived referentials' do          referential.archived_at = 42.seconds.ago          expect_it.to permit(user_context, record)        end +      it 'does not remove permission for finalised referentials' do +        finalise_referential +        expect_it.to permit(user_context, record) +      end      end    end  end  RSpec.shared_examples 'always forbidden' do -  | permission, archived: false| +  | permission, archived_and_finalised: false|    context 'same organisation →' do      before do        user.organisation_id = referential.organisation_id      end +      it "allows a user with the same organisation" do        expect_it.not_to permit(user_context, record)      end -    if archived + +    if archived_and_finalised        it 'still no permission for archived referentials' do -        referential.archived_at = 42.seconds.ago +        finalise_referential          expect_it.not_to permit(user_context, record)        end      end @@ -56,17 +67,22 @@ RSpec.shared_examples 'always forbidden' do      it "denies a user with a different organisation" do        expect_it.not_to permit(user_context, record)      end -    if archived +    if archived_and_finalised        it 'still no permission for archived referentials' do          referential.archived_at = 42.seconds.ago          expect_it.not_to permit(user_context, record)        end + +      it 'still no permission for finalised referentials' do +        finalise_referential +        expect_it.not_to permit(user_context, record) +      end      end    end  end  RSpec.shared_examples 'permitted policy and same organisation' do -  | permission, archived: false| +  | permission, archived_and_finalised: false |    context 'permission absent → ' do      it "denies a user with a different organisation" do @@ -92,18 +108,24 @@ RSpec.shared_examples 'permitted policy and same organisation' do        expect_it.to permit(user_context, record)      end -    if archived +    if archived_and_finalised        it 'removes the permission for archived referentials' do          user.organisation_id = referential.organisation_id          referential.archived_at = 42.seconds.ago          expect_it.not_to permit(user_context, record)        end + +      it 'removes the permission for finalised referentials' do +        user.organisation_id = referential.organisation_id +        finalise_referential +        expect_it.not_to permit(user_context, record) +      end      end    end  end  RSpec.shared_examples 'permitted policy' do -  | permission, archived: false| +  | permission, archived_and_finalised: false|    context 'permission absent → ' do      it "denies user" do @@ -120,12 +142,17 @@ RSpec.shared_examples 'permitted policy' do        expect_it.to permit(user_context, record)      end -    if archived +    if archived_and_finalised        it 'removes the permission for archived referentials' do          user.organisation_id = referential.organisation_id          referential.archived_at = 42.seconds.ago          expect_it.not_to permit(user_context, record)        end +      it 'removes the permission for finalised referentials' do +        user.organisation_id = referential.organisation_id +        finalise_referential +        expect_it.not_to permit(user_context, record) +      end      end    end  end @@ -148,4 +175,4 @@ RSpec.shared_examples 'permitted policy outside referential' do        expect_it.to permit(user_context, record)      end    end -end
\ No newline at end of file +end | 
