diff options
| author | Zog | 2018-01-22 09:54:20 +0100 | 
|---|---|---|
| committer | Zog | 2018-01-25 17:18:01 +0100 | 
| commit | ff5d96b530a41669c394b7b0dc138e29da48e97d (patch) | |
| tree | cc731e14383ef8f47302478faebac493dadacdf8 /spec | |
| parent | 872f9476971d3bde6e6f470153af09ed87af1b28 (diff) | |
| download | chouette-core-ff5d96b530a41669c394b7b0dc138e29da48e97d.tar.bz2 | |
Refs #5586 @2h; Fix specs
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/decorators/referential_decorator_spec.rb | 52 | ||||
| -rw-r--r-- | spec/helpers/table_builder_helper_spec.rb | 70 | ||||
| -rw-r--r-- | spec/support/decorator_helpers.rb | 23 | 
3 files changed, 97 insertions, 48 deletions
| diff --git a/spec/decorators/referential_decorator_spec.rb b/spec/decorators/referential_decorator_spec.rb index 9e34a0109..efc438132 100644 --- a/spec/decorators/referential_decorator_spec.rb +++ b/spec/decorators/referential_decorator_spec.rb @@ -21,8 +21,8 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do      context 'unarchived referential' do        context 'no rights' do -        it 'has only a Calendar action' do -          expect_action_link_hrefs.to eq([referential_time_tables_path(object)]) +        it 'has only show and Calendar actions' do +          expect_action_link_hrefs.to eq([[object], referential_time_tables_path(object)])          end        end @@ -31,8 +31,9 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do          let( :user ){ build_stubbed :allmighty_user }          it 'has only default actions' do -          expect_action_link_elements.to be_empty +          expect_action_link_elements.to eq ["Consulter", "Calendriers", "Dupliquer"]            expect_action_link_hrefs.to eq([ +            [object],              referential_time_tables_path(object),              new_referential_path(from: object)            ]) @@ -41,16 +42,36 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do        context 'all rights and same organisation' do          let( :user ){ build_stubbed :allmighty_user, organisation: referential.organisation } +        let( :action){ :index } +        context "on index" do +          it 'has corresponding actions' do +            expect_action_link_elements(action).to eq ["Consulter", "Editer", "Calendriers", "Dupliquer", "Valider", "Conserver","<span class=\"fa fa-trash mr-xs\"></span>Supprimer"] +            expect_action_link_hrefs(action).to eq([ +              [object], +              [:edit, object], +              referential_time_tables_path(object), +              new_referential_path(from: object), +              referential_select_compliance_control_set_path(object), +              archive_referential_path(object), +              referential_path(object) +            ]) +          end +        end -        it 'has all actions' do -          expect_action_link_elements.to eq(%w{Purger}) -          expect_action_link_hrefs.to eq([ -            referential_time_tables_path(object), -            new_referential_path(from: object), -            referential_select_compliance_control_set_path(object), -            archive_referential_path(object), -            referential_path(object) -          ]) +        context "on show" do +          let( :action){ :show } +          it 'has corresponding actions' do +            expect_action_link_elements(action).to eq ["Editer", "Calendriers", "Dupliquer", "Valider", "Conserver", "Purger", "<span class=\"fa fa-trash mr-xs\"></span>Supprimer"] +            expect_action_link_hrefs(action).to eq([ +              [:edit, object], +              referential_time_tables_path(object), +              new_referential_path(from: object), +              referential_select_compliance_control_set_path(object), +              archive_referential_path(object), +              "#", +              referential_path(object) +            ]) +          end          end        end      end @@ -58,16 +79,17 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do      context 'archived referential' do        before { referential.archived_at = 42.seconds.ago }        context 'no rights' do -        it 'has only a Calendar action' do -          expect_action_link_hrefs.to eq([referential_time_tables_path(object)]) +        it 'has only ahow and calendar actions' do +          expect_action_link_hrefs.to eq([[object], referential_time_tables_path(object)])          end        end        context 'all rights and different organisation' do          let( :user ){ build_stubbed :allmighty_user }          it 'has only default actions' do -          expect_action_link_elements.to be_empty +          expect_action_link_elements.to eq ["Consulter", "Calendriers", "Dupliquer"]            expect_action_link_hrefs.to eq([ +            [object],              referential_time_tables_path(object),              new_referential_path(from: object)            ]) diff --git a/spec/helpers/table_builder_helper_spec.rb b/spec/helpers/table_builder_helper_spec.rb index 8b383d88d..5bddbb16f 100644 --- a/spec/helpers/table_builder_helper_spec.rb +++ b/spec/helpers/table_builder_helper_spec.rb @@ -6,6 +6,13 @@ module TableBuilderHelper  end  describe TableBuilderHelper, type: :helper do +  let(:features){ [] } +  before do +    allow_any_instance_of(AF83::Decorator::Link).to receive(:check_feature){|f| +      features.include?(f) +    } +  end +    describe "#table_builder_2" do      it "builds a table" do        referential = build_stubbed(:workbench_referential) @@ -36,9 +43,8 @@ describe TableBuilderHelper, type: :helper do          id: referentials[0].workbench.id        }) -      referentials = ModelDecorator.decorate( -        referentials, -        with: ReferentialDecorator +      referentials = ReferentialDecorator.decorate( +        referentials        )        expected = <<-HTML @@ -77,15 +83,21 @@ describe TableBuilderHelper, type: :helper do              <td class="actions">                  <div class="btn-group">                      <div class="btn dropdown-toggle" data-toggle="dropdown"><span class="fa fa-cog"></span></div> -                    <ul class="dropdown-menu"> -                        <li><a href="/referentials/#{referential.id}">Consulter</a></li> -                        <li><a href="/referentials/#{referential.id}/edit">Editer</a></li> -                        <li><a href="/referentials/#{referential.id}/time_tables">Calendriers</a></li> -                        <li><a href="/referentials/new?from=#{referential.id}">Dupliquer</a></li> -                        <li><a href="/referentials/#{referential.id}/select_compliance_control_set">Valider</a></li> -                        <li><a rel="nofollow" data-method="put" href="/referentials/#{referential.id}/archive">Conserver</a></li> -                        <li class="delete-action"><a data-confirm="Etes vous sûr de vouloir supprimer ce jeu de données ?" rel="nofollow" data-method="delete" href="/referentials/#{referential.id}"><span class="fa fa-trash mr-xs"></span>Supprimer</a></li> -                    </ul> +                    <div class="dropdown-menu"> +                        <ul class="primary"> +                            <li class=""><a href="/referentials/#{referential.id}">Consulter</a></li> +                            <li class=""><a href="/referentials/#{referential.id}/edit">Editer</a></li> +                        </ul> +                        <ul class="other"> +                            <li class=""><a href="/referentials/#{referential.id}/time_tables">Calendriers</a></li> +                            <li class=""><a href="/referentials/new?from=#{referential.id}">Dupliquer</a></li> +                            <li class=""><a href="/referentials/#{referential.id}/select_compliance_control_set">Valider</a></li> +                            <li class=""><a rel="nofollow" data-method="put" href="/referentials/#{referential.id}/archive">Conserver</a></li> +                        </ul> +                        <ul class="footer"> +                            <li class=" delete-action"><a data-confirm="Etes vous sûr de vouloir supprimer ce jeu de données ?" rel="nofollow" data-method="delete" href="/referentials/#{referential.id}"><span class="fa fa-trash mr-xs"></span>Supprimer</a></li> +                        </ul> +                    </div>                  </div>              </td>          </tr> @@ -149,7 +161,7 @@ describe TableBuilderHelper, type: :helper do            )          ],          selectable: true, -        links: [:show, :edit], +        action: :index,          cls: 'table has-filter has-search'        ) @@ -195,9 +207,9 @@ describe TableBuilderHelper, type: :helper do          referential_id: referential.id        }) -      companies = ModelDecorator.decorate( +      companies = CompanyDecorator.decorate(          companies, -        with: CompanyDecorator +        context: { referential: referential }        )        stub_policy_scope(company) @@ -223,9 +235,11 @@ describe TableBuilderHelper, type: :helper do              <td class="actions">                  <div class="btn-group">                      <div class="btn dropdown-toggle" data-toggle="dropdown"><span class="fa fa-cog"></span></div> -                    <ul class="dropdown-menu"> -                        <li><a href="/referentials/#{referential.id}/companies/#{company.id}">Consulter</a></li> -                    </ul> +                    <div class="dropdown-menu"> +                        <ul class="primary"> +                            <li class=""><a href="/referentials/#{referential.id}/companies/#{company.id}">Consulter</a></li> +                        </ul> +                    </div>                  </div>              </td>          </tr> @@ -307,9 +321,8 @@ describe TableBuilderHelper, type: :helper do          referential_id: referential.id        }) -      companies = ModelDecorator.decorate( +      companies = CompanyDecorator.decorate(          companies, -        with: CompanyDecorator,          context: { referential: line_referential }        )        stub_policy_scope(company) @@ -336,9 +349,11 @@ describe TableBuilderHelper, type: :helper do              <td class="actions">                  <div class="btn-group">                      <div class="btn dropdown-toggle" data-toggle="dropdown"><span class="fa fa-cog"></span></div> -                    <ul class="dropdown-menu"> -                        <li><a href="/referentials/#{referential.id}/companies/#{company.id}">Consulter</a></li> -                    </ul> +                    <div class="dropdown-menu"> +                        <ul class="primary"> +                            <li class=""><a href="/line_referentials/#{line_referential.id}/companies/#{company.id}">Consulter</a></li> +                        </ul> +                    </div>                  </div>              </td>          </tr> @@ -374,7 +389,6 @@ describe TableBuilderHelper, type: :helper do            ),          ],          sortable: false, -        links: [:show, :edit, :delete],          cls: 'table has-search'        ) @@ -425,7 +439,7 @@ describe TableBuilderHelper, type: :helper do          let(:selectable){ false }          it "sets all rows as non selectable" do            items.each do |i| -            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name) +            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name, :index)              klass = "#{TableBuilderHelper.item_row_class_name([referential])}-#{i.id}"              selector = "tr.#{klass} [type=checkbox]"              expect(tr).to_not have_selector selector @@ -437,7 +451,7 @@ describe TableBuilderHelper, type: :helper do          let(:selectable){ true }          it "adds a checkbox in all rows" do            items.each do |i| -            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name) +            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name, :index)              klass = "#{TableBuilderHelper.item_row_class_name([referential])}-#{i.id}"              selector = "tr.#{klass} [type=checkbox]"              expect(tr).to have_selector selector @@ -449,14 +463,14 @@ describe TableBuilderHelper, type: :helper do          let(:selectable){ ->(i){ i.id != item.id } }          it "adds a checkbox in all rows" do            items.each do |i| -            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name) +            tr = helper.send(:tr, i, columns, selectable, links, overhead, model_name, :index)              klass = "#{TableBuilderHelper.item_row_class_name([referential])}-#{i.id}"              selector = "tr.#{klass} [type=checkbox]"              expect(tr).to have_selector selector            end          end          it "disables this rows checkbox" do -          tr = helper.send(:tr, item, columns, selectable, links, overhead, model_name) +          tr = helper.send(:tr, item, columns, selectable, links, overhead, model_name, :index)            klass = "#{TableBuilderHelper.item_row_class_name([referential])}-#{item.id}"            selector = "tr.#{klass} [type=checkbox][disabled]"            expect(tr).to have_selector selector diff --git a/spec/support/decorator_helpers.rb b/spec/support/decorator_helpers.rb index 9d450deb1..b2c41e842 100644 --- a/spec/support/decorator_helpers.rb +++ b/spec/support/decorator_helpers.rb @@ -5,18 +5,31 @@ module Support          subject{ object.decorate }          let( :policy ){ ::Pundit.policy(user_context, object) }          let( :user_context ){ UserContext.new(user, referential: referential) } - +        let( :features ){ [] } +        let( :filtered_action_links){}          before do            allow_any_instance_of(Draper::HelperProxy).to receive(:policy).and_return policy +          allow_any_instance_of(AF83::Decorator::Link).to receive(:check_feature){|f| +            features.include?(f) +          }          end        end      end -    def expect_action_link_hrefs -      expect( subject.action_links.select(&Link.method(:===)).map(&:href) ) +    def expect_action_link_hrefs(action=:index) +      if subject.action_links.is_a? AF83::Decorator::ActionLinks +        expect( subject.action_links(action).map(&:href) ) +      else +        expect( subject.action_links.select(&Link.method(:===)).map(&:href) ) +      end      end -    def expect_action_link_elements -      expect( subject.action_links.select(&HTMLElement.method(:===)).map(&:content) ) + +    def expect_action_link_elements(action=:index) +      if subject.action_links.is_a? AF83::Decorator::ActionLinks +        expect( subject.action_links(action).map(&:content) ) +      else +        expect( subject.action_links.select(&HTMLElement.method(:===)).map(&:content) ) +      end      end    end  end | 
