From e82600d2efcc90f327b90d04239fe41b80031ad4 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 27 Nov 2017 10:25:43 +0100 Subject: Refs: #5006@3h; Zip Support for Specs, allowing to create zip archives in memory * create zip archive from hash or directory tree * Metaspecs -- commented out - for potential refactoring of Zip Support - as readable documentation on how to use Zip Support --- spec/support/helpers/tree_walker.rb | 15 +++++++ spec/support/zip_support.rb | 25 +++++++++++ spec/support/zip_support/create_zip_data.rb | 70 +++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 spec/support/helpers/tree_walker.rb create mode 100644 spec/support/zip_support.rb create mode 100644 spec/support/zip_support/create_zip_data.rb (limited to 'spec/support') diff --git a/spec/support/helpers/tree_walker.rb b/spec/support/helpers/tree_walker.rb new file mode 100644 index 000000000..b86c3a8e1 --- /dev/null +++ b/spec/support/helpers/tree_walker.rb @@ -0,0 +1,15 @@ +module TreeWalker extend self + MAX_LEVEL = 5 + def walk_tree path, max_level: MAX_LEVEL, level: 0, yield_dirs: :no, &blk + raise RuntimeError, "too many levels in tree walk, > #{max_level}" if level > max_level + Dir.glob(File.join(path, '*')) do | file | + if File.directory?( file ) + blk.(:dir, file) if yield_dirs == :before + walk_tree(file, max_level: max_level, level: level.succ, yield_dirs: yield_dirs, &blk) + blk.(:dir, file) if yield_dirs == :after + else + blk.(:file, file) + end + end + end +end diff --git a/spec/support/zip_support.rb b/spec/support/zip_support.rb new file mode 100644 index 000000000..3d9b2f97c --- /dev/null +++ b/spec/support/zip_support.rb @@ -0,0 +1,25 @@ +require_relative 'helpers/tree_walker' +module ZipSupport + + module Helper extend self + def remove + -> filetype, path do + filetype == :file ? File.unlink(path) : Dir.unlink(path) + end + end + end + + def zip_fixtures_path(file_name) + fixtures_path(File.join('zip', file_name)) + end + + def clear_all_zip_fixtures! relpath = '' + raise ArgumentError, 'up dir not allowed (..)' if %r{\.\.} === relpath + TreeWalker.walk_tree zip_fixtures_path(relpath), yield_dirs: :after, &Helper.remove + end +end + +RSpec.configure do |conf| + conf.include ZipSupport, type: :zip +end + diff --git a/spec/support/zip_support/create_zip_data.rb b/spec/support/zip_support/create_zip_data.rb new file mode 100644 index 000000000..250d67f74 --- /dev/null +++ b/spec/support/zip_support/create_zip_data.rb @@ -0,0 +1,70 @@ +require_relative '../helpers/tree_walker' +module ZipSupport + module CreateZipData + + class ZipData < Struct.new(:name, :data) + + def write_to file + File.write(file, data) + end + + end + + class Implementation + + attr_reader :name, :prefix, :zip + + def initialize name + @name = name + @prefix = "#{name}/" + @zip = ZipData.new(name, '') + end + + def make_from names_to_content_map + os = Zip::OutputStream.write_buffer do | zio | + names_to_content_map.each(&add_entries(zio)) + end + zip.data = os.string + zip + end + + def make_from_tree + os = Zip::OutputStream.write_buffer do | zio | + TreeWalker.walk_tree(name, &add_entry(zio)) + end + zip.data = os.string + zip + end + + private + + def add_entry zio + -> _, path do + rel_path = path.sub(prefix, '') + zio.put_next_entry(rel_path) + zio.write(File.read(path)) + end + end + + def add_entries zio + -> name, content do + zio.put_next_entry(name) + zio.write(content) + end + end + end + + + def make_zip(name, names_to_content_map = {}) + Implementation.new(name).make_from(names_to_content_map) + end + + def make_zip_from_tree(dir) + Implementation.new(dir).make_from_tree + end + end +end + +RSpec.configure do |conf| + conf.include ZipSupport::CreateZipData, type: :zip +end -- cgit v1.2.3 From 443de38df52143f72d97308c28ac68f99e009757 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 15 Dec 2017 08:24:24 +0100 Subject: Fixes: #5281@1.2h; View specs and minor CR change from #5006 - CR change from #5006, severity of zip file messages :warning -> :error - View specs for showing import_messages --- spec/support/referential.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'spec/support') diff --git a/spec/support/referential.rb b/spec/support/referential.rb index b615491da..7f56e5143 100644 --- a/spec/support/referential.rb +++ b/spec/support/referential.rb @@ -29,7 +29,6 @@ module ReferentialHelper end end - end end -- cgit v1.2.3 From 88b8e30a415f300108be4a19a53ca9768671d21e Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 09:11:04 +0100 Subject: Refs #5287; Add specs for the view. Refactor to come --- spec/support/integration_spec_helper.rb | 17 +++++++++++++++++ spec/support/pundit/pundit_view_policy.rb | 16 +++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 spec/support/integration_spec_helper.rb (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb new file mode 100644 index 000000000..958aab9d5 --- /dev/null +++ b/spec/support/integration_spec_helper.rb @@ -0,0 +1,17 @@ +module IntegrationSpecHelper + extend ActiveSupport::Concern + + included do + def self.with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? + end + end + end +end + + +RSpec.configure do |config| + config.include IntegrationSpecHelper, type: :view +end diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index b8434cac0..02a78a4e0 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -3,14 +3,16 @@ module Pundit extend ActiveSupport::Concern included do + + let(:permissions){ nil } + let(:current_referential){ build_stubbed :referential } + let(:current_user){ build_stubbed :user, permissions: permissions } + let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } before do - controller.singleton_class.class_eval do - def policy(instance) - Class.new do - def method_missing(*args, &block); true; end - end.new - end - helper_method :policy + allow(view).to receive(:pundit_user) { pundit_user } + + allow(view).to receive(:policy) do |instance| + ::Pundit.policy pundit_user, instance end end end -- cgit v1.2.3 From cd92a6e07393b1b6ee57a8d980f072aa8a034874 Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 11:27:14 +0100 Subject: - Fix specs on connections_links/index - Fix specs on connections_links/show - Update pundit view specs helper to use the current referential when it has already been defined --- spec/support/pundit/pundit_view_policy.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'spec/support') diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index 02a78a4e0..6a663a471 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -5,8 +5,9 @@ module Pundit included do let(:permissions){ nil } - let(:current_referential){ build_stubbed :referential } - let(:current_user){ build_stubbed :user, permissions: permissions } + let(:organisation){ referential.try(:organisation) } + let(:current_referential){ referential || build_stubbed(:referential) } + let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } before do allow(view).to receive(:pundit_user) { pundit_user } -- cgit v1.2.3 From 1b2c50949d827d8f82a40d591489394f5dc2f993 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 18 Dec 2017 09:25:10 +0100 Subject: Refs #5287; CR 1 - Get rid of ActiveSupport::Concern in the spec helpers - Rename misnamed spec files --- spec/support/integration_spec_helper.rb | 15 +++++---------- spec/support/pundit/pundit_view_policy.rb | 17 +++++++---------- 2 files changed, 12 insertions(+), 20 deletions(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 958aab9d5..182cadf24 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,17 +1,12 @@ module IntegrationSpecHelper - extend ActiveSupport::Concern - - included do - def self.with_permission permission, &block - context "with permission #{permission}" do - let(:permissions){ [permission] } - context('', &block) if block_given? - end + def with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? end end end - RSpec.configure do |config| - config.include IntegrationSpecHelper, type: :view + config.extend IntegrationSpecHelper, type: :view end diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index 6a663a471..91be0624c 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -1,15 +1,12 @@ module Pundit module PunditViewPolicy - extend ActiveSupport::Concern - - included do - - let(:permissions){ nil } - let(:organisation){ referential.try(:organisation) } - let(:current_referential){ referential || build_stubbed(:referential) } - let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } - let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } - before do + def self.included into + into.let(:permissions){ nil } + into.let(:organisation){ referential.try(:organisation) } + into.let(:current_referential){ referential || build_stubbed(:referential) } + into.let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } + into.let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } + into.before do allow(view).to receive(:pundit_user) { pundit_user } allow(view).to receive(:policy) do |instance| -- cgit v1.2.3 From 74a601f6f35e0a547d3cde0501081e6e9f509959 Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 17:01:49 +0100 Subject: Ref #5291@2h; Specs setup - Refactor specs helper to be more generic - Write missing specs for the Workbenches#show view We now have failing tests highlighting the bug --- spec/support/integration_spec_helper.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 182cadf24..5bcf0bd3a 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -4,9 +4,39 @@ module IntegrationSpecHelper let(:permissions){ [permission] } context('', &block) if block_given? end + + def paginate_collection klass, decorator, page=1 + ModelDecorator.decorate( klass.page(page), with: decorator ) + end + + def build_paginated_collection factory, decorator, opts={} + count = opts.delete(:count) || 2 + page = opts.delete(:page) || 1 + klass = nil + count.times { klass ||= create(factory, opts).class } + paginate_collection klass, decorator, page + end end end RSpec.configure do |config| config.extend IntegrationSpecHelper, type: :view end + +RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| + match do |actual| + collection.each do |item| + expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']", count: 1) + end + end + description { "have #{name} link for each item" } +end + +RSpec::Matchers.define :have_the_right_number_of_links do |collection, count| + match do |actual| + collection.each do |item| + expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a", count: count) + end + end + description { "have #{count} links for each item" } +end -- cgit v1.2.3 From 3aa5ff0d1f5e74b4c46c14e6240e7def82f0451d Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 18 Dec 2017 09:34:15 +0100 Subject: Refs #5291@0.1h; Fix rebase Fix integration_spec_helper after rebase --- spec/support/integration_spec_helper.rb | 37 ++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 5bcf0bd3a..78efb9027 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,26 +1,33 @@ module IntegrationSpecHelper - def with_permission permission, &block - context "with permission #{permission}" do - let(:permissions){ [permission] } - context('', &block) if block_given? - end - def paginate_collection klass, decorator, page=1 - ModelDecorator.decorate( klass.page(page), with: decorator ) - end + def paginate_collection klass, decorator, page=1 + ModelDecorator.decorate( klass.page(page), with: decorator ) + end - def build_paginated_collection factory, decorator, opts={} - count = opts.delete(:count) || 2 - page = opts.delete(:page) || 1 - klass = nil - count.times { klass ||= create(factory, opts).class } - paginate_collection klass, decorator, page + def build_paginated_collection factory, decorator, opts={} + count = opts.delete(:count) || 2 + page = opts.delete(:page) || 1 + klass = nil + count.times { klass ||= create(factory, opts).class } + paginate_collection klass, decorator, page + end + + module Methods + def with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? + end end end + + def self.included into + into.extend Methods + end end RSpec.configure do |config| - config.extend IntegrationSpecHelper, type: :view + config.include IntegrationSpecHelper, type: :view end RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| -- cgit v1.2.3 From 98c08c6fae5b0bf59231b3e402ca91307c200297 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 18 Dec 2017 17:18:25 +0100 Subject: Refs #5333@1.5h; Use permissions to sync StopAreas and Lines - add missing policies - update permissions translator - update views to check for the permission - update views helper to check for the permission - uipdate controllers to check for the permission --- spec/support/controller_spec_helper.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 spec/support/controller_spec_helper.rb (limited to 'spec/support') diff --git a/spec/support/controller_spec_helper.rb b/spec/support/controller_spec_helper.rb new file mode 100644 index 000000000..1d0288dea --- /dev/null +++ b/spec/support/controller_spec_helper.rb @@ -0,0 +1,18 @@ +module ControllerSpecHelper + def with_permission permission, &block + context "with permission #{permission}" do + login_user + before(:each) do + @user.permissions << permission + @user.save! + sign_in @user + end + context('', &block) if block_given? + end + end + +end + +RSpec.configure do |config| + config.extend ControllerSpecHelper, type: :controller +end -- cgit v1.2.3 From 676f45e8fd85c1422345d4d27ba2385e4bd536fe Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 09:11:04 +0100 Subject: Refs #5287; Add specs for the view. Refactor to come --- spec/support/integration_spec_helper.rb | 17 +++++++++++++++++ spec/support/pundit/pundit_view_policy.rb | 16 +++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 spec/support/integration_spec_helper.rb (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb new file mode 100644 index 000000000..958aab9d5 --- /dev/null +++ b/spec/support/integration_spec_helper.rb @@ -0,0 +1,17 @@ +module IntegrationSpecHelper + extend ActiveSupport::Concern + + included do + def self.with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? + end + end + end +end + + +RSpec.configure do |config| + config.include IntegrationSpecHelper, type: :view +end diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index b8434cac0..02a78a4e0 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -3,14 +3,16 @@ module Pundit extend ActiveSupport::Concern included do + + let(:permissions){ nil } + let(:current_referential){ build_stubbed :referential } + let(:current_user){ build_stubbed :user, permissions: permissions } + let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } before do - controller.singleton_class.class_eval do - def policy(instance) - Class.new do - def method_missing(*args, &block); true; end - end.new - end - helper_method :policy + allow(view).to receive(:pundit_user) { pundit_user } + + allow(view).to receive(:policy) do |instance| + ::Pundit.policy pundit_user, instance end end end -- cgit v1.2.3 From 357563bbf408aa2000097ee200dfbfba1f677121 Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 11:27:14 +0100 Subject: - Fix specs on connections_links/index - Fix specs on connections_links/show - Update pundit view specs helper to use the current referential when it has already been defined --- spec/support/pundit/pundit_view_policy.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'spec/support') diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index 02a78a4e0..6a663a471 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -5,8 +5,9 @@ module Pundit included do let(:permissions){ nil } - let(:current_referential){ build_stubbed :referential } - let(:current_user){ build_stubbed :user, permissions: permissions } + let(:organisation){ referential.try(:organisation) } + let(:current_referential){ referential || build_stubbed(:referential) } + let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } before do allow(view).to receive(:pundit_user) { pundit_user } -- cgit v1.2.3 From 548fe7f13d698fe9a6620ef60fc239f28347af79 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 18 Dec 2017 09:25:10 +0100 Subject: Refs #5287; CR 1 - Get rid of ActiveSupport::Concern in the spec helpers - Rename misnamed spec files --- spec/support/integration_spec_helper.rb | 15 +++++---------- spec/support/pundit/pundit_view_policy.rb | 17 +++++++---------- 2 files changed, 12 insertions(+), 20 deletions(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 958aab9d5..182cadf24 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,17 +1,12 @@ module IntegrationSpecHelper - extend ActiveSupport::Concern - - included do - def self.with_permission permission, &block - context "with permission #{permission}" do - let(:permissions){ [permission] } - context('', &block) if block_given? - end + def with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? end end end - RSpec.configure do |config| - config.include IntegrationSpecHelper, type: :view + config.extend IntegrationSpecHelper, type: :view end diff --git a/spec/support/pundit/pundit_view_policy.rb b/spec/support/pundit/pundit_view_policy.rb index 6a663a471..91be0624c 100644 --- a/spec/support/pundit/pundit_view_policy.rb +++ b/spec/support/pundit/pundit_view_policy.rb @@ -1,15 +1,12 @@ module Pundit module PunditViewPolicy - extend ActiveSupport::Concern - - included do - - let(:permissions){ nil } - let(:organisation){ referential.try(:organisation) } - let(:current_referential){ referential || build_stubbed(:referential) } - let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } - let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } - before do + def self.included into + into.let(:permissions){ nil } + into.let(:organisation){ referential.try(:organisation) } + into.let(:current_referential){ referential || build_stubbed(:referential) } + into.let(:current_user){ build_stubbed :user, permissions: permissions, organisation: organisation } + into.let(:pundit_user){ UserContext.new(current_user, referential: current_referential) } + into.before do allow(view).to receive(:pundit_user) { pundit_user } allow(view).to receive(:policy) do |instance| -- cgit v1.2.3 From 2736ff5e010586266176a9a0fb0ac8dc6e227f63 Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 17:01:49 +0100 Subject: Ref #5291@2h; Specs setup - Refactor specs helper to be more generic - Write missing specs for the Workbenches#show view We now have failing tests highlighting the bug --- spec/support/integration_spec_helper.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 182cadf24..5bcf0bd3a 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -4,9 +4,39 @@ module IntegrationSpecHelper let(:permissions){ [permission] } context('', &block) if block_given? end + + def paginate_collection klass, decorator, page=1 + ModelDecorator.decorate( klass.page(page), with: decorator ) + end + + def build_paginated_collection factory, decorator, opts={} + count = opts.delete(:count) || 2 + page = opts.delete(:page) || 1 + klass = nil + count.times { klass ||= create(factory, opts).class } + paginate_collection klass, decorator, page + end end end RSpec.configure do |config| config.extend IntegrationSpecHelper, type: :view end + +RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| + match do |actual| + collection.each do |item| + expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']", count: 1) + end + end + description { "have #{name} link for each item" } +end + +RSpec::Matchers.define :have_the_right_number_of_links do |collection, count| + match do |actual| + collection.each do |item| + expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a", count: count) + end + end + description { "have #{count} links for each item" } +end -- cgit v1.2.3 From c3ce5e25c3596329bd1ff9542d73354e1a2bb368 Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 15 Dec 2017 17:01:49 +0100 Subject: Ref #5291@2h; Specs setup - Refactor specs helper to be more generic - Write missing specs for the Workbenches#show view We now have failing tests highlighting the bug --- spec/support/integration_spec_helper.rb | 36 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 5bcf0bd3a..6edec2a05 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,26 +1,32 @@ module IntegrationSpecHelper - def with_permission permission, &block - context "with permission #{permission}" do - let(:permissions){ [permission] } - context('', &block) if block_given? - end + def paginate_collection klass, decorator, page=1 + ModelDecorator.decorate( klass.page(page), with: decorator ) + end - def paginate_collection klass, decorator, page=1 - ModelDecorator.decorate( klass.page(page), with: decorator ) - end + def build_paginated_collection factory, decorator, opts={} + count = opts.delete(:count) || 2 + page = opts.delete(:page) || 1 + klass = nil + count.times { klass ||= create(factory, opts).class } + paginate_collection klass, decorator, page + end - def build_paginated_collection factory, decorator, opts={} - count = opts.delete(:count) || 2 - page = opts.delete(:page) || 1 - klass = nil - count.times { klass ||= create(factory, opts).class } - paginate_collection klass, decorator, page + module Methods + def with_permission permission, &block + context "with permission #{permission}" do + let(:permissions){ [permission] } + context('', &block) if block_given? + end end end + + def self.included into + into.extend Methods + end end RSpec.configure do |config| - config.extend IntegrationSpecHelper, type: :view + config.include IntegrationSpecHelper, type: :view end RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| -- cgit v1.2.3 From 12924f238cc02a671a4c535b49320cd3b0ce7302 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 18 Dec 2017 09:34:15 +0100 Subject: Refs #5291@0.1h; Fix rebase Fix integration_spec_helper after rebase --- spec/support/integration_spec_helper.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 6edec2a05..78efb9027 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,4 +1,5 @@ module IntegrationSpecHelper + def paginate_collection klass, decorator, page=1 ModelDecorator.decorate( klass.page(page), with: decorator ) end -- cgit v1.2.3 From ffa7c137f0d06f37f67561f09472b304efa90069 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Wed, 20 Dec 2017 20:52:58 +0100 Subject: Add StopArea#waiting_time with support in stop_areas#index/show. Refs #5351 --- spec/support/decorator_helpers.rb | 5 ----- 1 file changed, 5 deletions(-) (limited to 'spec/support') diff --git a/spec/support/decorator_helpers.rb b/spec/support/decorator_helpers.rb index ffedd479b..9d450deb1 100644 --- a/spec/support/decorator_helpers.rb +++ b/spec/support/decorator_helpers.rb @@ -1,5 +1,4 @@ module Support - module DecoratorHelpers def self.included(into) into.instance_eval do @@ -21,7 +20,3 @@ module Support end end end - -RSpec.configure do | c | - c.include Support::DecoratorHelpers, type: :decorator -end -- cgit v1.2.3 From 4eadd762a0005e3e452aa757495e02dc244db3dc Mon Sep 17 00:00:00 2001 From: Zog Date: Thu, 21 Dec 2017 11:14:23 +0100 Subject: Refs #5355 @0.5h; Add opposite route button on timetables --- spec/support/integration_spec_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 78efb9027..1bf211fe1 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,7 +1,11 @@ module IntegrationSpecHelper def paginate_collection klass, decorator, page=1 - ModelDecorator.decorate( klass.page(page), with: decorator ) + coll = klass.page(page) + if decorator + coll = ModelDecorator.decorate( coll, with: decorator ) + end + coll end def build_paginated_collection factory, decorator, opts={} -- cgit v1.2.3 From 4918ffcd7492661f36a763cdf248757993f9bff4 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Tue, 19 Dec 2017 16:35:09 +0100 Subject: Remove `hstore_accessor` usage The places we were using `hstore_accessor` have now been converted to Postgres JSON fields. Thus we no longer need `hstore_accessor` in order to add accessors for the fields. Instead we can use Rails' built-in support for Postgres JSON fields and create accessors for our JSON hash keys with `store_accessor`. We get rid of the data types because `store_accessor` doesn't work like that and JSON already types our values with primitive data types. Finally, add some extra validation tests now that the vaildation for our JSON fields should work. Refs #5316 --- spec/support/shared_examples/compliance_control_validation.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'spec/support') diff --git a/spec/support/shared_examples/compliance_control_validation.rb b/spec/support/shared_examples/compliance_control_validation.rb index d4ab9f41d..c76712c4c 100644 --- a/spec/support/shared_examples/compliance_control_validation.rb +++ b/spec/support/shared_examples/compliance_control_validation.rb @@ -1,6 +1,9 @@ RSpec.shared_examples_for 'has min_max_values' do context "is valid" do + it { should validate_numericality_of(:minimum) } + it { should validate_numericality_of(:maximum) } + it 'if no value is provided' do expect_it.to be_valid end @@ -41,3 +44,10 @@ RSpec.shared_examples_for 'has min_max_values' do end end end + + +RSpec.shared_examples_for "has target attribute" do + context "is valid" do + it { should validate_presence_of(:target) } + end +end -- cgit v1.2.3 From 9a34cb48f49df574ae1e7c599713ed246e2938cf Mon Sep 17 00:00:00 2001 From: Zog Date: Wed, 20 Dec 2017 12:58:20 +0100 Subject: Refs #5430 @2h; Deactivate lines instead of destroying them - Add `activate` and `deactivate` actions in `LinesController`, as well as corresponding routes - Add `activate!` and `deactivate!` methods in `Chouette::Line`, as well as `activated?` - Add `activate?` and `deactivate?` permissions in `LinePolicy` - Add corresponding `action_links`in the Decorator - Create helper for these actions - Add an optional `'extra_class` to the Links - Update styles for ".delete-action" to handle the case where there are several - Add I18n keys accordingly --- spec/support/integration_spec_helper.rb | 34 +++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'spec/support') diff --git a/spec/support/integration_spec_helper.rb b/spec/support/integration_spec_helper.rb index 1bf211fe1..36306559d 100644 --- a/spec/support/integration_spec_helper.rb +++ b/spec/support/integration_spec_helper.rb @@ -1,19 +1,20 @@ module IntegrationSpecHelper - def paginate_collection klass, decorator, page=1 - coll = klass.page(page) + def paginate_collection klass, decorator, page=1, context={} + collection = klass.page(page) if decorator - coll = ModelDecorator.decorate( coll, with: decorator ) + collection = ModelDecorator.decorate(collection, with: decorator, context: context) end - coll + collection end def build_paginated_collection factory, decorator, opts={} + context = opts.delete(:context) || {} count = opts.delete(:count) || 2 page = opts.delete(:page) || 1 klass = nil - count.times { klass ||= create(factory, opts).class } - paginate_collection klass, decorator, page + count.times { klass = create(factory, opts).class } + paginate_collection klass, decorator, page, context end module Methods @@ -34,20 +35,33 @@ RSpec.configure do |config| config.include IntegrationSpecHelper, type: :view end -RSpec::Matchers.define :have_link_for_each_item do |collection, name, href| +RSpec::Matchers.define :have_link_for_each_item do |collection, name, opts| + opts = {href: opts} unless opts.is_a? Hash + href = opts[:href] + method = opts[:method] + method_selector = method.present? ? "[data-method='#{method.downcase}']": "" match do |actual| collection.each do |item| - expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']", count: 1) + @selector = "tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a[href='#{href.call(item)}']#{method_selector}" + expect(rendered).to have_selector(@selector, count: 1) end end description { "have #{name} link for each item" } + failure_message do + "expected view to have #{name} link for each item, failed with selector: \"#{@selector}\"" + end end RSpec::Matchers.define :have_the_right_number_of_links do |collection, count| - match do |actual| + match do collection.each do |item| - expect(rendered).to have_selector("tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a", count: count) + @selector = "tr.#{TableBuilderHelper.item_row_class_name(collection)}-#{item.id} .actions a" + expect(rendered).to have_selector(@selector, count: count) end end description { "have #{count} links for each item" } + failure_message do + actual = Capybara::Node::Simple.new(rendered).all(@selector).count + "expected #{count} links for each item, got #{actual} for \"#{@selector}\"" + end end -- cgit v1.2.3 From d3445d085b607544dc6355956cd228835258d612 Mon Sep 17 00:00:00 2001 From: Zog Date: Tue, 26 Dec 2017 11:23:53 +0100 Subject: Refs #5382 @1h; Enable all area types for Stopareas in Routes Given that the organisation has the matching feature. --- spec/support/controller_spec_helper.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'spec/support') diff --git a/spec/support/controller_spec_helper.rb b/spec/support/controller_spec_helper.rb index 1d0288dea..dbc7d582b 100644 --- a/spec/support/controller_spec_helper.rb +++ b/spec/support/controller_spec_helper.rb @@ -11,6 +11,21 @@ module ControllerSpecHelper end end + def with_feature feature, &block + context "with feature #{feature}" do + login_user + before(:each) do + organisation = @user.organisation + unless organisation.has_feature?(feature) + organisation.features << feature + organisation.save! + end + sign_in @user + end + context('', &block) if block_given? + end + end + end RSpec.configure do |config| -- cgit v1.2.3