decidim-dev 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +10 -2
  3. data/config/locales/pt.yml +9 -0
  4. data/lib/decidim/dev/assets/id.jpg +0 -0
  5. data/lib/decidim/dev/test/base_spec_helper.rb +3 -0
  6. data/lib/decidim/dev/test/promoted_participatory_processes_shared_examples.rb +1 -1
  7. data/lib/decidim/dev/test/rspec_support/action_mailer.rb +0 -14
  8. data/lib/decidim/dev/test/rspec_support/active_job.rb +0 -4
  9. data/lib/decidim/dev/test/rspec_support/authorization.rb +43 -0
  10. data/lib/decidim/dev/test/rspec_support/capybara.rb +29 -14
  11. data/lib/decidim/dev/test/rspec_support/capybara_select2.rb +7 -18
  12. data/lib/decidim/dev/test/rspec_support/{factory_girl.rb → factory_bot.rb} +1 -1
  13. data/lib/decidim/dev/test/rspec_support/feature.rb +16 -13
  14. data/lib/decidim/dev/test/rspec_support/feature_context.rb +16 -12
  15. data/lib/decidim/dev/test/rspec_support/helpers.rb +4 -0
  16. data/lib/decidim/dev/test/rspec_support/webmock.rb +2 -1
  17. data/lib/decidim/dev/test/spec_helper.rb +1 -1
  18. data/lib/decidim/dev/version.rb +1 -1
  19. data/lib/tasks/test_app.rake +9 -17
  20. metadata +76 -80
  21. data/lib/decidim/dev/test/rspec_support/authenticated_controller_context.rb +0 -10
  22. data/lib/decidim/dev/test/rspec_support/authorization_handlers.rb +0 -14
  23. data/lib/decidim/dev/test/rspec_support/phantomjs_polyfills/phantomjs-shim.js +0 -208
  24. data/lib/generators/decidim/dummy_generator.rb +0 -85
  25. data/lib/generators/decidim/templates/autoprefixer.yml +0 -8
  26. data/lib/generators/decidim/templates/autoprefixer_initializer.rb +0 -18
  27. data/lib/generators/decidim/templates/no_animations.rb +0 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: b0a57d195860b6ffc9c0a020b8924b0c3cbdd9f4d7f9d5571dbbb607f50cfed4
4
- data.tar.gz: 5a40b3f9ab3a31b1b8aa0e1d04a24e7c082fab100552db1e9d7baa949003b820
2
+ SHA1:
3
+ metadata.gz: 18dcc6c4476ff8323824e9ac13b028ce3bc10ca6
4
+ data.tar.gz: 4f67b818d5cba71eef2e2fa63bb431a9998faa0d
5
5
  SHA512:
6
- metadata.gz: 2226495c862bfdb8679cb357c060bcbec08254329c6be12645d03113fe338a3acc4c525c7a313f2587c0e3ab67fba81ba35394ecdc95042009e63f9e5271d5b3
7
- data.tar.gz: 5228aa104b5806947298b75b93f7af21e1098fe3533283320bd89d731649fd27605a7b91c0085060b3dba3142b17959a23666261e01e3de7d8cfb11d4f62727b
6
+ metadata.gz: 1084217ce160757c1cb1baf581c73e97f34fd4a7e91d565f09b2c647f3d8fefd95b50c7526249e6b5e6d3a5f789f12cabd2c535ece5f651d84467adf041b1846
7
+ data.tar.gz: 1fb5a1db999733b377cc102fcca452332a459f012836d28db3711b519c0b90f4b714696c95ccb831ea81b3ccc6ab1e8e7180977492f20d4caac2fedbef08f534
data/README.md CHANGED
@@ -3,9 +3,14 @@
3
3
  This gem allows local development of decidim's features and other features.
4
4
 
5
5
  ## Usage
6
- TODO: Write docs.
6
+
7
+ `decidim-dev` provides some testing utils such as shared contexts, examples, and
8
+ dummy assets or resources that you can use to test your own plugins. It also
9
+ provides a `decidim:generate_external_test_app` rake task that you can use to
10
+ generate a dummy application to test your plugin.
7
11
 
8
12
  ## Installation
13
+
9
14
  Add this line to your application's Gemfile:
10
15
 
11
16
  ```ruby
@@ -13,12 +18,15 @@ gem 'decidim-dev'
13
18
  ```
14
19
 
15
20
  And then execute:
21
+
16
22
  ```bash
17
- $ bundle
23
+ bundle
18
24
  ```
19
25
 
20
26
  ## Contributing
27
+
21
28
  See [Decidim](https://github.com/decidim/decidim).
22
29
 
23
30
  ## License
31
+
24
32
  See [Decidim](https://github.com/decidim/decidim).
@@ -0,0 +1,9 @@
1
+ pt:
2
+ decidim:
3
+ dummy:
4
+ admin:
5
+ exports:
6
+ dummies: Bobos
7
+ resource_links:
8
+ test_link:
9
+ dummy_resource_dummy: Manequim relacionado
@@ -22,9 +22,12 @@ require "decidim/core"
22
22
  require "decidim/core/test"
23
23
 
24
24
  require_relative "rspec_support/feature.rb"
25
+ require_relative "rspec_support/authorization.rb"
25
26
 
26
27
  require "#{Decidim::Dev.dummy_app_path}/config/environment"
27
28
 
28
29
  Dir["#{engine_spec_dir}/shared/**/*.rb"].each { |f| require f }
29
30
 
31
+ require "paper_trail/frameworks/rspec"
32
+
30
33
  require_relative "spec_helper"
@@ -2,7 +2,7 @@
2
2
 
3
3
  shared_examples "with promoted participatory processes" do
4
4
  before do
5
- @request.env["decidim.current_organization"] = organization
5
+ request.env["decidim.current_organization"] = organization
6
6
  end
7
7
 
8
8
  describe "promoted_participatory_processes" do
@@ -57,17 +57,3 @@ end
57
57
  RSpec.configure do |config|
58
58
  config.include MailerHelpers
59
59
  end
60
-
61
- RSpec.configure do |config|
62
- config.before :example, perform_enqueued: true do
63
- @old_perform_enqueued_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_jobs
64
- @old_perform_enqueued_at_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs
65
- ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
66
- ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = true
67
- end
68
-
69
- config.after :example, perform_enqueued: true do
70
- ActiveJob::Base.queue_adapter.perform_enqueued_jobs = @old_perform_enqueued_jobs
71
- ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = @old_perform_enqueued_at_jobs
72
- end
73
- end
@@ -2,10 +2,6 @@
2
2
 
3
3
  RSpec.configure do |config|
4
4
  config.include ActiveJob::TestHelper
5
-
6
- config.before(:each) do
7
- clear_enqueued_jobs
8
- end
9
5
  end
10
6
 
11
7
  ActiveJob::Base.queue_adapter = :test
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/verifications/workflows"
4
+
5
+ module Decidim
6
+ module Verifications
7
+ module DummyVerification
8
+ # Dummy engine to be able to test verifications.
9
+ class Engine < ::Rails::Engine
10
+ isolate_namespace Decidim::Verifications::DummyVerification
11
+
12
+ routes do
13
+ root to: proc { [200, {}, ["DUMMY VERIFICATION ENGINE"]] }
14
+ get :edit_authorization, to: proc { [200, {}, ["CONTINUE YOUR VERIFICATION"]] }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ Decidim::Verifications.register_workflow(:dummy_authorization_workflow) do |workflow|
22
+ workflow.engine = Decidim::Verifications::DummyVerification::Engine
23
+ end
24
+
25
+ RSpec.configure do |config|
26
+ config.around(:example, :with_authorization_workflows) do |example|
27
+ begin
28
+ previous_workflows = Decidim::Verifications.workflows.dup
29
+
30
+ new_workflows = example.metadata[:with_authorization_workflows].map do |name|
31
+ Decidim::Verifications.find_workflow_manifest(name)
32
+ end
33
+
34
+ Decidim::Verifications.reset_workflows(*new_workflows)
35
+ Rails.application.reload_routes!
36
+
37
+ example.run
38
+ ensure
39
+ Decidim::Verifications.reset_workflows(*previous_workflows)
40
+ Rails.application.reload_routes!
41
+ end
42
+ end
43
+ end
@@ -22,11 +22,33 @@ module Decidim
22
22
  end
23
23
 
24
24
  Capybara.register_driver :headless_chrome do |app|
25
- browser_options = ::Selenium::WebDriver::Chrome::Options.new
26
- browser_options.args << "--headless"
27
- browser_options.args << "--no-sandbox"
28
- browser_options.args << "--window-size=1024,768"
29
- Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
25
+ http_client = Selenium::WebDriver::Remote::Http::Default.new
26
+ http_client.read_timeout = 120
27
+
28
+ options = ::Selenium::WebDriver::Chrome::Options.new
29
+ options.args << "--headless"
30
+ options.args << "--no-sandbox"
31
+ options.args << "--window-size=1024,768"
32
+
33
+ Capybara::Selenium::Driver.new(
34
+ app,
35
+ browser: :chrome,
36
+ options: options,
37
+ http_client: http_client
38
+ )
39
+ end
40
+
41
+ # Monkeypatch the other place where capybara can timeout. We should contribute
42
+ # the configurability to capybara if this works consistently and proves to be
43
+ # useful
44
+ module Capybara
45
+ class Server
46
+ def wait_for_pending_requests
47
+ Timeout.timeout(120) { sleep(0.01) while pending_requests? }
48
+ rescue Timeout::Error
49
+ raise "Requests did not finish in 60 seconds"
50
+ end
51
+ end
30
52
  end
31
53
 
32
54
  Capybara::Screenshot.prune_strategy = :keep_last_run
@@ -41,6 +63,8 @@ Capybara.configure do |config|
41
63
  config.default_driver = :headless_chrome
42
64
  end
43
65
 
66
+ Capybara.asset_host = "http://localhost:3000"
67
+
44
68
  RSpec.configure do |config|
45
69
  config.before :each, type: :feature do
46
70
  Capybara.current_session.driver.reset!
@@ -48,13 +72,4 @@ RSpec.configure do |config|
48
72
  end
49
73
 
50
74
  config.include Decidim::CapybaraTestHelpers, type: :feature
51
-
52
- if ENV["CI"]
53
- require "rspec/repeat"
54
-
55
- config.include RSpec::Repeat
56
- config.around :each, type: :feature do |example|
57
- repeat example, 5.times, wait: 1, verbose: true
58
- end
59
- end
60
75
  end
@@ -1,32 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Adapted from https://github.com/goodwill/capybara-select2
4
-
5
3
  module Capybara
6
4
  module Select2
7
- def select2(value, xpath:, search:)
8
- expect(page).to have_xpath(xpath)
9
- select2_container = find(:xpath, xpath)
5
+ def select2(value, from:)
6
+ expect(page).to have_xpath("//select[@id='#{from}']/..")
7
+ select2_container = find(:xpath, "//select[@id='#{from}']/..")
10
8
 
11
9
  expect(select2_container).to have_selector(".select2-selection")
12
10
  select2_container.find(".select2-selection").click
13
11
 
14
- if search
15
- body = find(:xpath, "//body")
16
- expect(body).to have_selector(".select2-search input.select2-search__field")
17
- body.find(".select2-search input.select2-search__field").set(value)
18
-
19
- page.execute_script(%|$("input.select2-search__field:visible").keyup();|)
20
- drop_container = ".select2-results"
21
- else
22
- drop_container = ".select2-dropdown"
23
- end
24
-
25
12
  expect(page).to have_no_content("Searching...")
26
13
 
27
14
  body = find(:xpath, "//body")
28
- expect(body).to have_selector("#{drop_container} li.select2-results__option", text: value)
29
- body.find("#{drop_container} li.select2-results__option", text: value).click
15
+ expect(body).to have_selector(".select2-dropdown li.select2-results__option", text: value)
16
+
17
+ body.find(".select2-dropdown li.select2-results__option", text: value).click
18
+ expect(page).to have_select(from, with_options: [value])
30
19
  end
31
20
  end
32
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.configure do |config|
4
- config.include FactoryGirl::Syntax::Methods
4
+ config.include FactoryBot::Syntax::Methods
5
5
  end
@@ -41,6 +41,7 @@ module Decidim
41
41
  include HasScope
42
42
  include Decidim::Comments::Commentable
43
43
  include Followable
44
+ include Traceable
44
45
 
45
46
  feature_manifest_name "dummy"
46
47
 
@@ -115,19 +116,21 @@ end
115
116
 
116
117
  RSpec.configure do |config|
117
118
  config.before(:suite) do
118
- unless ActiveRecord::Base.connection.data_source_exists?("decidim_dummy_resources")
119
- ActiveRecord::Migration.create_table :decidim_dummy_resources do |t|
120
- t.string :title
121
- t.text :address
122
- t.float :latitude
123
- t.float :longitude
124
-
125
- t.references :decidim_feature, index: true
126
- t.references :decidim_author, index: true
127
- t.references :decidim_category, index: true
128
- t.references :decidim_scope, index: true
129
-
130
- t.timestamps
119
+ ActiveRecord::Migration.suppress_messages do
120
+ unless ActiveRecord::Base.connection.data_source_exists?("decidim_dummy_resources")
121
+ ActiveRecord::Migration.create_table :decidim_dummy_resources do |t|
122
+ t.string :title
123
+ t.text :address
124
+ t.float :latitude
125
+ t.float :longitude
126
+
127
+ t.references :decidim_feature, index: true
128
+ t.references :decidim_author, index: true
129
+ t.references :decidim_category, index: true
130
+ t.references :decidim_scope, index: true
131
+
132
+ t.timestamps
133
+ end
131
134
  end
132
135
  end
133
136
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- shared_context "feature" do
3
+ shared_context "with a feature" do
4
4
  let(:manifest) { Decidim.find_feature_manifest(manifest_name) }
5
5
 
6
6
  let(:user) { create :user, :confirmed, organization: organization }
@@ -32,18 +32,11 @@ shared_context "feature" do
32
32
  end
33
33
  end
34
34
 
35
- shared_context "feature admin" do
36
- include_context "feature"
35
+ shared_context "when managing a feature" do
36
+ include_context "with a feature"
37
37
 
38
38
  let(:current_feature) { feature }
39
39
 
40
- let(:user) do
41
- create :user,
42
- :admin,
43
- :confirmed,
44
- organization: organization
45
- end
46
-
47
40
  before do
48
41
  login_as user, scope: :user
49
42
  visit_feature_admin
@@ -63,8 +56,19 @@ shared_context "feature admin" do
63
56
  end
64
57
  end
65
58
 
66
- shared_context "feature process admin" do
67
- include_context "feature admin"
59
+ shared_context "when managing a feature as an admin" do
60
+ include_context "when managing a feature"
61
+
62
+ let(:user) do
63
+ create :user,
64
+ :admin,
65
+ :confirmed,
66
+ organization: organization
67
+ end
68
+ end
69
+
70
+ shared_context "when managing a feature as a process admin" do
71
+ include_context "when managing a feature"
68
72
 
69
73
  let(:user) do
70
74
  create :user,
@@ -35,6 +35,10 @@ module Decidim::FeatureTestHelpers
35
35
  def expect_user_logged
36
36
  expect(page).to have_css(".topbar__user__logged")
37
37
  end
38
+
39
+ def have_admin_callout(text)
40
+ have_selector(".callout--full", text: text)
41
+ end
38
42
  end
39
43
 
40
44
  RSpec.configure do |config|
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "webmock/rspec"
4
- WebMock.allow_net_connect!
4
+
5
+ WebMock.disable_net_connect!(allow_localhost: true)
@@ -4,7 +4,7 @@ ENV["RAILS_ENV"] ||= "test"
4
4
 
5
5
  require "rails-controller-testing"
6
6
  require "rspec/rails"
7
- require "factory_girl_rails"
7
+ require "factory_bot_rails"
8
8
  require "database_cleaner"
9
9
  require "byebug"
10
10
  require "cancan/matchers"
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-dev version.
5
5
  module Dev
6
6
  def self.version
7
- "0.7.4"
7
+ "0.8.0"
8
8
  end
9
9
  end
10
10
  end
@@ -1,29 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "generators/decidim/dummy_generator"
3
+ require "generators/decidim/app_generator"
4
4
 
5
5
  namespace :decidim do
6
- desc "Generates a dummy app for testing"
7
- task :generate_test_app do
8
- dummy_app_path = File.expand_path(File.join(Dir.pwd, "spec", "decidim_dummy_app"))
9
-
10
- Bundler.with_clean_env do
11
- Decidim::Generators::DummyGenerator.start(
12
- [
13
- "--dummy_app_path=#{dummy_app_path}"
14
- ]
15
- )
16
- end
17
- end
18
-
19
6
  desc "Generates a dummy app for testing in external installations"
20
7
  task :generate_external_test_app do
21
8
  dummy_app_path = File.expand_path(File.join(Dir.pwd, "spec", "decidim_dummy_app"))
22
9
 
23
- Decidim::Generators::DummyGenerator.start(
10
+ Decidim::Generators::AppGenerator.start(
24
11
  [
25
- "--dummy_app_path=#{dummy_app_path}",
26
- "--skip_gemfile"
12
+ dummy_app_path,
13
+ "--path",
14
+ "../..",
15
+ "--recreate_db",
16
+ "--app_const_base=DummyApplication",
17
+ "--skip_gemfile",
18
+ "--demo"
27
19
  ]
28
20
  )
29
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,36 +10,36 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-11-23 00:00:00.000000000 Z
13
+ date: 2017-12-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: decidim
16
+ name: capybara
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '='
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: 0.7.4
21
+ version: '2.15'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '='
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: 0.7.4
28
+ version: '2.15'
29
29
  - !ruby/object:Gem::Dependency
30
- name: factory_girl_rails
30
+ name: capybara-screenshot
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ">="
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '0'
35
+ version: '1.0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ">="
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '0'
42
+ version: '1.0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: database_cleaner
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -55,89 +55,89 @@ dependencies:
55
55
  - !ruby/object:Gem::Version
56
56
  version: '1.6'
57
57
  - !ruby/object:Gem::Dependency
58
- name: capybara
58
+ name: decidim
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: '2.15'
63
+ version: 0.8.0
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - "~>"
68
+ - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: '2.15'
70
+ version: 0.8.0
71
71
  - !ruby/object:Gem::Dependency
72
- name: capybara-screenshot
72
+ name: factory_bot_rails
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '1.0'
77
+ version: '4.8'
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: '1.0'
84
+ version: '4.8'
85
85
  - !ruby/object:Gem::Dependency
86
- name: rspec-rails
86
+ name: byebug
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: '3.6'
91
+ version: '0'
92
92
  type: :runtime
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - "~>"
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
- version: '3.6'
98
+ version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
- name: rspec-repeat
100
+ name: codecov
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - "~>"
104
104
  - !ruby/object:Gem::Version
105
- version: '1.0'
105
+ version: 0.1.9
106
106
  type: :runtime
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: '1.0'
112
+ version: 0.1.9
113
113
  - !ruby/object:Gem::Dependency
114
- name: byebug
114
+ name: db-query-matchers
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - ">="
117
+ - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0'
119
+ version: 0.9.0
120
120
  type: :runtime
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ">="
124
+ - - "~>"
125
125
  - !ruby/object:Gem::Version
126
- version: '0'
126
+ version: 0.9.0
127
127
  - !ruby/object:Gem::Dependency
128
- name: wisper-rspec
128
+ name: i18n-tasks
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - "~>"
131
+ - - '='
132
132
  - !ruby/object:Gem::Version
133
- version: 0.0.3
133
+ version: 0.9.18
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - "~>"
138
+ - - '='
139
139
  - !ruby/object:Gem::Version
140
- version: 0.0.3
140
+ version: 0.9.18
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: listen
143
143
  requirement: !ruby/object:Gem::Requirement
@@ -153,63 +153,63 @@ dependencies:
153
153
  - !ruby/object:Gem::Version
154
154
  version: '3.1'
155
155
  - !ruby/object:Gem::Dependency
156
- name: i18n-tasks
156
+ name: nokogiri
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - '='
159
+ - - "~>"
160
160
  - !ruby/object:Gem::Version
161
- version: 0.9.18
161
+ version: '1.8'
162
162
  type: :runtime
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - '='
166
+ - - "~>"
167
167
  - !ruby/object:Gem::Version
168
- version: 0.9.18
168
+ version: '1.8'
169
169
  - !ruby/object:Gem::Dependency
170
- name: rails-controller-testing
170
+ name: puma
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - "~>"
174
174
  - !ruby/object:Gem::Version
175
- version: '1.0'
175
+ version: '3.10'
176
176
  type: :runtime
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
180
  - - "~>"
181
181
  - !ruby/object:Gem::Version
182
- version: '1.0'
182
+ version: '3.10'
183
183
  - !ruby/object:Gem::Dependency
184
- name: rspec-html-matchers
184
+ name: rails-controller-testing
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - "~>"
188
188
  - !ruby/object:Gem::Version
189
- version: 0.9.1
189
+ version: '1.0'
190
190
  type: :runtime
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
194
  - - "~>"
195
195
  - !ruby/object:Gem::Version
196
- version: 0.9.1
196
+ version: '1.0'
197
197
  - !ruby/object:Gem::Dependency
198
- name: rubocop
198
+ name: rspec-html-matchers
199
199
  requirement: !ruby/object:Gem::Requirement
200
200
  requirements:
201
201
  - - "~>"
202
202
  - !ruby/object:Gem::Version
203
- version: 0.51.0
203
+ version: 0.9.1
204
204
  type: :runtime
205
205
  prerelease: false
206
206
  version_requirements: !ruby/object:Gem::Requirement
207
207
  requirements:
208
208
  - - "~>"
209
209
  - !ruby/object:Gem::Version
210
- version: 0.51.0
210
+ version: 0.9.1
211
211
  - !ruby/object:Gem::Dependency
212
- name: selenium-webdriver
212
+ name: rspec-rails
213
213
  requirement: !ruby/object:Gem::Requirement
214
214
  requirements:
215
215
  - - "~>"
@@ -223,89 +223,89 @@ dependencies:
223
223
  - !ruby/object:Gem::Version
224
224
  version: '3.7'
225
225
  - !ruby/object:Gem::Dependency
226
- name: simplecov
226
+ name: rubocop
227
227
  requirement: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - "~>"
230
230
  - !ruby/object:Gem::Version
231
- version: '0.13'
231
+ version: 0.51.0
232
232
  type: :runtime
233
233
  prerelease: false
234
234
  version_requirements: !ruby/object:Gem::Requirement
235
235
  requirements:
236
236
  - - "~>"
237
237
  - !ruby/object:Gem::Version
238
- version: '0.13'
238
+ version: 0.51.0
239
239
  - !ruby/object:Gem::Dependency
240
- name: codecov
240
+ name: rubocop-rspec
241
241
  requirement: !ruby/object:Gem::Requirement
242
242
  requirements:
243
243
  - - "~>"
244
244
  - !ruby/object:Gem::Version
245
- version: 0.1.9
245
+ version: '1.20'
246
246
  type: :runtime
247
247
  prerelease: false
248
248
  version_requirements: !ruby/object:Gem::Requirement
249
249
  requirements:
250
250
  - - "~>"
251
251
  - !ruby/object:Gem::Version
252
- version: 0.1.9
252
+ version: '1.20'
253
253
  - !ruby/object:Gem::Dependency
254
- name: db-query-matchers
254
+ name: selenium-webdriver
255
255
  requirement: !ruby/object:Gem::Requirement
256
256
  requirements:
257
257
  - - "~>"
258
258
  - !ruby/object:Gem::Version
259
- version: 0.9.0
259
+ version: '3.7'
260
260
  type: :runtime
261
261
  prerelease: false
262
262
  version_requirements: !ruby/object:Gem::Requirement
263
263
  requirements:
264
264
  - - "~>"
265
265
  - !ruby/object:Gem::Version
266
- version: 0.9.0
266
+ version: '3.7'
267
267
  - !ruby/object:Gem::Dependency
268
- name: webmock
268
+ name: simplecov
269
269
  requirement: !ruby/object:Gem::Requirement
270
270
  requirements:
271
271
  - - "~>"
272
272
  - !ruby/object:Gem::Version
273
- version: '3.0'
273
+ version: '0.13'
274
274
  type: :runtime
275
275
  prerelease: false
276
276
  version_requirements: !ruby/object:Gem::Requirement
277
277
  requirements:
278
278
  - - "~>"
279
279
  - !ruby/object:Gem::Version
280
- version: '3.0'
280
+ version: '0.13'
281
281
  - !ruby/object:Gem::Dependency
282
- name: puma
282
+ name: webmock
283
283
  requirement: !ruby/object:Gem::Requirement
284
284
  requirements:
285
285
  - - "~>"
286
286
  - !ruby/object:Gem::Version
287
- version: '3.10'
287
+ version: '3.0'
288
288
  type: :runtime
289
289
  prerelease: false
290
290
  version_requirements: !ruby/object:Gem::Requirement
291
291
  requirements:
292
292
  - - "~>"
293
293
  - !ruby/object:Gem::Version
294
- version: '3.10'
294
+ version: '3.0'
295
295
  - !ruby/object:Gem::Dependency
296
- name: nokogiri
296
+ name: wisper-rspec
297
297
  requirement: !ruby/object:Gem::Requirement
298
298
  requirements:
299
299
  - - "~>"
300
300
  - !ruby/object:Gem::Version
301
- version: '1.8'
301
+ version: 0.0.3
302
302
  type: :runtime
303
303
  prerelease: false
304
304
  version_requirements: !ruby/object:Gem::Requirement
305
305
  requirements:
306
306
  - - "~>"
307
307
  - !ruby/object:Gem::Version
308
- version: '1.8'
308
+ version: 0.0.3
309
309
  description: Utilities and tools we need to develop Decidim
310
310
  email:
311
311
  - josepjaume@gmail.com
@@ -328,6 +328,7 @@ files:
328
328
  - config/locales/it.yml
329
329
  - config/locales/nl.yml
330
330
  - config/locales/pl.yml
331
+ - config/locales/pt.yml
331
332
  - config/locales/ru.yml
332
333
  - config/locales/uk.yml
333
334
  - lib/decidim/dev.rb
@@ -337,6 +338,7 @@ files:
337
338
  - lib/decidim/dev/assets/city2.jpeg
338
339
  - lib/decidim/dev/assets/city3.jpeg
339
340
  - lib/decidim/dev/assets/icon.png
341
+ - lib/decidim/dev/assets/id.jpg
340
342
  - lib/decidim/dev/assets/malicious.jpg
341
343
  - lib/decidim/dev/common_rake.rb
342
344
  - lib/decidim/dev/railtie.rb
@@ -346,19 +348,17 @@ files:
346
348
  - lib/decidim/dev/test/rspec_support/action_mailer.rb
347
349
  - lib/decidim/dev/test/rspec_support/active_job.rb
348
350
  - lib/decidim/dev/test/rspec_support/attachments.rb
349
- - lib/decidim/dev/test/rspec_support/authenticated_controller_context.rb
350
- - lib/decidim/dev/test/rspec_support/authorization_handlers.rb
351
+ - lib/decidim/dev/test/rspec_support/authorization.rb
351
352
  - lib/decidim/dev/test/rspec_support/capybara.rb
352
353
  - lib/decidim/dev/test/rspec_support/capybara_select2.rb
353
354
  - lib/decidim/dev/test/rspec_support/comments.rb
354
355
  - lib/decidim/dev/test/rspec_support/database_cleaner.rb
355
- - lib/decidim/dev/test/rspec_support/factory_girl.rb
356
+ - lib/decidim/dev/test/rspec_support/factory_bot.rb
356
357
  - lib/decidim/dev/test/rspec_support/feature.rb
357
358
  - lib/decidim/dev/test/rspec_support/feature_context.rb
358
359
  - lib/decidim/dev/test/rspec_support/geocoder.rb
359
360
  - lib/decidim/dev/test/rspec_support/helpers.rb
360
361
  - lib/decidim/dev/test/rspec_support/html_matchers.rb
361
- - lib/decidim/dev/test/rspec_support/phantomjs_polyfills/phantomjs-shim.js
362
362
  - lib/decidim/dev/test/rspec_support/route_helpers.rb
363
363
  - lib/decidim/dev/test/rspec_support/translation_helpers.rb
364
364
  - lib/decidim/dev/test/rspec_support/warden.rb
@@ -366,10 +366,6 @@ files:
366
366
  - lib/decidim/dev/test/rspec_support/wisper.rb
367
367
  - lib/decidim/dev/test/spec_helper.rb
368
368
  - lib/decidim/dev/version.rb
369
- - lib/generators/decidim/dummy_generator.rb
370
- - lib/generators/decidim/templates/autoprefixer.yml
371
- - lib/generators/decidim/templates/autoprefixer_initializer.rb
372
- - lib/generators/decidim/templates/no_animations.rb
373
369
  - lib/tasks/locale_checker.rake
374
370
  - lib/tasks/test_app.rake
375
371
  homepage: https://github.com/decidim/decidim
@@ -392,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
392
388
  version: '0'
393
389
  requirements: []
394
390
  rubyforge_project:
395
- rubygems_version: 2.7.1
391
+ rubygems_version: 2.6.13
396
392
  signing_key:
397
393
  specification_version: 4
398
394
  summary: Decidim Dev tools
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- shared_context "authenticated user" do
4
- let(:user) { create(:user, :confirmed) }
5
-
6
- before do
7
- @request.env["decidim.current_organization"] = user.organization
8
- sign_in user, scope: :user
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.configure do |config|
4
- config.around(:example, without_authorizations: true) do |example|
5
- begin
6
- previous_handlers = Decidim.authorization_handlers
7
- Decidim.authorization_handlers = []
8
-
9
- example.run
10
- ensure
11
- Decidim.authorization_handlers = previous_handlers
12
- end
13
- end
14
- end
@@ -1,208 +0,0 @@
1
- /**
2
- * Adapted from https://github.com/Raynos/function-bind
3
- * Copyright 2013 Raynos.
4
- * MIT license, see license.md for detail.
5
- */
6
-
7
- (function() {
8
- if (Function.prototype.bind) {
9
- return;
10
- }
11
-
12
- var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
13
- var slice = Array.prototype.slice;
14
- var toStr = Object.prototype.toString;
15
- var funcType = '[object Function]';
16
-
17
- Function.prototype.bind = function bind(that) {
18
- var target = this;
19
- if (typeof target !== 'function' || toStr.call(target) !== funcType) {
20
- throw new TypeError(ERROR_MESSAGE + target);
21
- }
22
- var args = slice.call(arguments, 1);
23
-
24
- var binder = function () {
25
- if (this instanceof bound) {
26
- var result = target.apply(this, args.concat(slice.call(arguments)));
27
- if (Object(result) === result) {
28
- return result;
29
- }
30
- return this;
31
- } else {
32
- return target.apply(that, args.concat(slice.call(arguments)));
33
- }
34
- };
35
-
36
- var boundLength = Math.max(0, target.length - args.length);
37
- var boundArgs = [];
38
- for (var i = 0; i < boundLength; i++) {
39
- boundArgs.push('$' + i);
40
- }
41
-
42
- var bound = Function('binder', 'return function (' + boundArgs.join(',') +
43
- '){ return binder.apply(this,arguments); }')(binder);
44
-
45
- if (target.prototype) {
46
- var Empty = function Empty() {};
47
- Empty.prototype = target.prototype;
48
- bound.prototype = new Empty();
49
- Empty.prototype = null;
50
- }
51
-
52
- return bound;
53
- };
54
-
55
- }());
56
-
57
- /**
58
- * Polyfill for requestAnimationFrame
59
- * http://paulirish.com/2011/requestanimationframe-for-smart-animating/
60
- * http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
61
- * requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
62
- * MIT license
63
- */
64
- (function() {
65
- var lastTime = 0;
66
- var vendors = ['ms', 'moz', 'webkit', 'o'];
67
- for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
68
- window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
69
- window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame']
70
- || window[vendors[x] + 'CancelRequestAnimationFrame'];
71
- }
72
- if(!window.requestAnimationFrame)
73
- window.requestAnimationFrame = function(callback, element) {
74
- var currTime = new Date().getTime();
75
- var timeToCall = Math.max(0, 16 - (currTime - lastTime));
76
- var id = window.setTimeout(function() {
77
- callback(currTime + timeToCall);
78
- },
79
- timeToCall);
80
- lastTime = currTime + timeToCall;
81
- return id;
82
- };
83
- if(!window.cancelAnimationFrame)
84
- window.cancelAnimationFrame = function(id) {
85
- clearTimeout(id);
86
- };
87
- }());
88
-
89
- /**
90
- * Polyfill for String.startsWith
91
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
92
- */
93
- (function() {
94
- if (!String.prototype.startsWith) {
95
- String.prototype.startsWith = function(searchString, position) {
96
- position = position || 0;
97
- return this.indexOf(searchString, position) === position;
98
- };
99
- }
100
- })();
101
-
102
- /**
103
- * Polyfill for String.repeat
104
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
105
- */
106
- (function() {
107
- if (!String.prototype.repeat) {
108
- String.prototype.repeat = function(count) {
109
- 'use strict';
110
- if (this == null) {
111
- throw new TypeError('can\'t convert ' + this + ' to object');
112
- }
113
- var str = '' + this;
114
- count = +count;
115
- if (count != count) {
116
- count = 0;
117
- }
118
- if (count < 0) {
119
- throw new RangeError('repeat count must be non-negative');
120
- }
121
- if (count == Infinity) {
122
- throw new RangeError('repeat count must be less than infinity');
123
- }
124
- count = Math.floor(count);
125
- if (str.length == 0 || count == 0) {
126
- return '';
127
- }
128
- // Ensuring count is a 31-bit integer allows us to heavily optimize the
129
- // main part. But anyway, most current (August 2014) browsers can't handle
130
- // strings 1 << 28 chars or longer, so:
131
- if (str.length * count >= 1 << 28) {
132
- throw new RangeError('repeat count must not overflow maximum string size');
133
- }
134
- var rpt = '';
135
- for (;;) {
136
- if ((count & 1) == 1) {
137
- rpt += str;
138
- }
139
- count >>>= 1;
140
- if (count == 0) {
141
- break;
142
- }
143
- str += str;
144
- }
145
- // Could we try:
146
- // return Array(count + 1).join(this);
147
- return rpt;
148
- }
149
- }})();
150
-
151
- /**
152
- * Polyfill for String.includes
153
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
154
- */
155
- (function() {
156
- if (!String.prototype.includes) {
157
- String.prototype.includes = function(search, start) {
158
- 'use strict';
159
- if (typeof start !== 'number') {
160
- start = 0;
161
- }
162
-
163
- if (start + search.length > this.length) {
164
- return false;
165
- } else {
166
- return this.indexOf(search, start) !== -1;
167
- }
168
- };
169
- }
170
- })();
171
-
172
- /**
173
- * Polyfill for Object.assign
174
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
175
- */
176
- if (typeof Object.assign != 'function') {
177
- (function () {
178
- Object.assign = function (target) {
179
- 'use strict';
180
- if (target === undefined || target === null) {
181
- throw new TypeError('Cannot convert undefined or null to object');
182
- }
183
-
184
- var output = Object(target);
185
- for (var index = 1; index < arguments.length; index++) {
186
- var source = arguments[index];
187
- if (source !== undefined && source !== null) {
188
- for (var nextKey in source) {
189
- if (source.hasOwnProperty(nextKey)) {
190
- output[nextKey] = source[nextKey];
191
- }
192
- }
193
- }
194
- }
195
- return output;
196
- };
197
- })();
198
- }
199
-
200
- /**
201
- * Polyfill for Array.from
202
- */
203
- if (!Array.from) {
204
- Array.from = function (object) {
205
- 'use strict';
206
- return [].slice.call(object);
207
- };
208
- }
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails/generators"
4
- require "generators/decidim/app_generator"
5
-
6
- module Decidim
7
- module Generators
8
- # Generates a dummy test Rails app for the given library folder. It uses
9
- # the `AppGenerator` class to actually generate the Rails app, so this
10
- # generator only sets the path and some flags.
11
- #
12
- # The Rails app will be installed with some flags to disable git, tests,
13
- # Gemfile and other options. Refer to the `create_dummy_app` method to see
14
- # all the flags passed to the `AppGenerator` class, which is the one that
15
- # actually generates the Rails app.
16
- #
17
- # Remember that, because of how generators work, actions are executed based
18
- # on the definition order of the public methods.
19
- class DummyGenerator < Rails::Generators::Base
20
- desc "Generate dummy app for testing purposes"
21
-
22
- class_option :dummy_app_path, type: :string,
23
- desc: "The path where the dummy app will be installed"
24
- class_option :skip_gemfile, type: :boolean,
25
- default: false,
26
- desc: "Don't generate a Gemfile for the application"
27
-
28
- def source_paths
29
- [
30
- File.expand_path("templates", __dir__)
31
- ]
32
- end
33
-
34
- def cleanup
35
- remove_directory_if_exists(dummy_app_path)
36
- end
37
-
38
- def create_dummy_app
39
- Decidim::Generators::AppGenerator.start [
40
- dummy_app_path,
41
- "--path",
42
- "../..",
43
- "--app_const_base=DummyApplication",
44
- "--recreate_db",
45
- "--skip_gemfile=#{options[:skip_gemfile]}",
46
- "--demo"
47
- ]
48
- end
49
-
50
- def decidim_dev
51
- # TODO: Remove these after PhantomJS updates WebKit version (see YML and
52
- # initializer comments)
53
- template "autoprefixer.yml", "#{dummy_app_path}/config/autoprefixer.yml"
54
- template "autoprefixer_initializer.rb", "#{dummy_app_path}/config/initializers/autoprefixer.rb"
55
-
56
- template "no_animations.rb", "#{dummy_app_path}/app/middleware/no_animations.rb"
57
- end
58
-
59
- def test_env
60
- gsub_file "#{dummy_app_path}/config/environments/test.rb",
61
- /allow_forgery_protection = (.*)/, "allow_forgery_protection = true"
62
-
63
- inject_into_file "#{dummy_app_path}/config/environments/test.rb",
64
- after: "allow_forgery_protection = true\n" do
65
- <<~RUBY.gsub(/^ *\|/, "")
66
- |
67
- | # Inject middleware to disable CSS animations
68
- | config.middleware.use NoAnimations
69
- |
70
- RUBY
71
- end
72
- end
73
-
74
- private
75
-
76
- def dummy_app_path
77
- options[:dummy_app_path]
78
- end
79
-
80
- def remove_directory_if_exists(path)
81
- remove_dir(path) if File.directory?(path)
82
- end
83
- end
84
- end
85
- end
@@ -1,8 +0,0 @@
1
- # Loading the autoprefixer for WebKit browsers during tests will cause some
2
- # tests to fail since parts of the UI are rendered differently. This is due to
3
- # WebKit version used in PhantomJS that does not render some of the modern CSS
4
- # features the same way as expected by the Foundation framework. For example,
5
- # some elements are overlapping other elements which causes the elements to be
6
- # inaccessible during the specific tests.
7
- browsers:
8
- - "Firefox > 2"
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AutoprefixerRails
4
- class Sprockets
5
- singleton_class.send(:alias_method, :call_original, :call)
6
-
7
- def self.call(input)
8
- filename = input[:name]
9
-
10
- # Disable autoprefixer for the graphiql-rails gem's assets because it
11
- # breaks some of the API tests when the '-webkit' prefixes are applied to
12
- # its CSS.
13
- return if filename.match?(%r{^graphiql/.*})
14
-
15
- call_original(input)
16
- end
17
- end
18
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #
4
- # Disables CSS3 and jQuery animations
5
- #
6
- class NoAnimations
7
- def initialize(app, _options = {})
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- @status, @headers, @body = @app.call(env)
13
- return [@status, @headers, @body] unless html?
14
- response = Rack::Response.new([], @status, @headers)
15
-
16
- @body.each { |fragment| response.write inject(fragment) }
17
- @body.close if @body.respond_to?(:close)
18
-
19
- response.finish
20
- end
21
-
22
- private
23
-
24
- def html?
25
- @headers["Content-Type"] =~ /html/
26
- end
27
-
28
- def inject(fragment)
29
- disable_animations = <<~JS
30
- <script type="text/javascript">(typeof jQuery !== 'undefined') && (jQuery.fx.off = true);</script>
31
- <style>
32
- * {
33
- -o-transition: none !important;
34
- -moz-transition: none !important;
35
- -ms-transition: none !important;
36
- -webkit-transition: none !important;
37
- transition: none !important;
38
- -o-transform: none !important;
39
- -moz-transform: none !important;
40
- -ms-transform: none !important;
41
- -webkit-transform: none !important;
42
- transform: none !important;
43
- -webkit-animation: none !important;
44
- -moz-animation: none !important;
45
- -o-animation: none !important;
46
- -ms-animation: none !important;
47
- animation: none !important;
48
- }
49
- </style>
50
- JS
51
-
52
- fragment.gsub(%r{</head>}, disable_animations + "</head>")
53
- end
54
- end