so_many_devices 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4563bbece97b6bd3ec50f380fc87a52098e4fc70b80bfe6c894e3e3fe1d7d22
4
- data.tar.gz: ffcfe67293875045e902364d374786ee67bdcaa1b00125dbb52146785bfdfca3
3
+ metadata.gz: 2083f8748f8786c8ec499d5f9a67b6d97d5fc5080c3c7bfb82ee2217bb9ae515
4
+ data.tar.gz: '09eb90cbaac0a1ae8d4f2c4dac0dc5e96306bd03bea6d2f6dd8b24fc0b475f7f'
5
5
  SHA512:
6
- metadata.gz: 9d3ab569ad319c3ed04f50d614041bc40500e7116145be28df9ad49565c28fd3a34bafc6d3f88f09e12a26d1f7a44656279863bd757f7f44480d04c49a81de2d
7
- data.tar.gz: e77cb90c14a71bcf687ed62895601ce862daeaac9b17f236973b0f69c08c989a7d268d979fc5de25fe9e41c49ae76d9b759a6f50e58c3290afa556918cc1ec45
6
+ metadata.gz: ef4f46954c438c4be338b370918fed154e2f9dde3d51e765d40ec5ed489c63c827af69f3eb3c432f003deb028dcd58b117ba57fc7d9754599d10e2dbc3e4622b
7
+ data.tar.gz: 2b2509f8b113fea58f28010997f90f58d7d73f365e49b45db826a3dc0a80e5261b04fd1ee5729410cf0c9532ee9ae4d3ab4f04f1e7af80a57e999b7e53950e23
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ Gemfile.lock
@@ -0,0 +1,19 @@
1
+ version: v1.0
2
+ name: main-deploy
3
+ agent:
4
+ machine:
5
+ type: e1-standard-2
6
+ os_image: ubuntu1804
7
+
8
+ blocks:
9
+ - name: main-deploy
10
+ task:
11
+ secrets:
12
+ - name: rubygems-deploy
13
+ jobs:
14
+ - name: main-deploy
15
+ commands:
16
+ - checkout --use-cache
17
+ - gem build so_many_devices
18
+ - chmod 0600 ~/.gem/credentials
19
+ - gem push so_many_devices-*.gem
@@ -0,0 +1,31 @@
1
+ version: "v1.0"
2
+ name: so_many_devices
3
+ agent:
4
+ machine:
5
+ type: e1-standard-2
6
+ os_image: ubuntu1804
7
+ auto_cancel:
8
+ running:
9
+ when: "true"
10
+
11
+ blocks:
12
+ - name: tests
13
+ execution_time_limit:
14
+ minutes: 10
15
+ dependencies: []
16
+ task:
17
+ env_vars:
18
+ - name: RAILS_ENV
19
+ value: test
20
+ jobs:
21
+ - name: tests
22
+ commands:
23
+ - checkout --use-cache
24
+ - cache restore
25
+ - bundle install -j 4 --path vendor/bundle
26
+ - cache store
27
+ - bundle exec standardrb
28
+ - bundle exec rspec
29
+ promotions:
30
+ - name: main
31
+ pipeline_file: main-deploy.yml
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ## [0.3.0] - 2023-01-25
2
+
3
+ - Added two new methods `first_download` and `last_download`.
4
+ - Added more instructions to the README for Chrome with downloads options, in particular to clean up folders.
5
+ - Added an example to read a downloaded file
6
+
7
+ ## [0.2.0] - 2020-06-18
8
+
9
+ - Add chrome with downloads capabilities to the list of already so many devices
10
+
11
+ ## [0.1.0] - 2020-03-02
12
+
13
+ - Initial release
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # So Many Devices! 🕺
2
2
 
3
+ [![status](https://renuo.semaphoreci.com/badges/so_many_devices.svg)](https://renuo.semaphoreci.com/projects/so_many_devices)
4
+
3
5
  This gem provides a list of Capybara Selenium configurations that you can use.
4
6
  Probably useful to run your system tests on different devices.
5
7
 
@@ -29,7 +31,7 @@ In your `rails_helper.rb` you can configure your preferred device for tests:
29
31
 
30
32
  ```ruby
31
33
  config.before(:each, type: :system, js: true) do
32
- driven_by :iphone_6_7_8
34
+ driven_by :iphone_6_7_8
33
35
  end
34
36
  ```
35
37
 
@@ -37,7 +39,7 @@ You can always use the headless version of each device by appending `_headless`
37
39
 
38
40
  ```ruby
39
41
  config.before(:each, type: :system, js: true) do
40
- driven_by :iphone_6_7_8_headless
42
+ driven_by :iphone_6_7_8_headless
41
43
  end
42
44
  ```
43
45
 
@@ -45,7 +47,7 @@ We use it to run our system tests on so many devices! Here is our standard confi
45
47
 
46
48
  ```ruby
47
49
  config.before(:each, type: :system, js: true) do
48
- driven_by ENV['SELENIUM_DRIVER'].to_sym
50
+ driven_by ENV['SELENIUM_DRIVER'].to_sym
49
51
  end
50
52
  ```
51
53
 
@@ -60,7 +62,63 @@ of course, your tests need to run on so many devices!
60
62
 
61
63
  ## Available devices
62
64
 
63
- Check [the YML file containing all the devices](./lib/so_many_devices/so_many_devices.yml). So many!
65
+ Check [the YML file containing all the devices](./lib/so_many_devices.yml). So many!
66
+
67
+ ## Chrome with downloads capabilities
68
+
69
+ We provide also an instance of Chrome already configured with
70
+ Downloads capabilities and a `SoManyDevices::DownloadsHelper` that you can use in your project.
71
+
72
+ Use the following:
73
+
74
+ ```ruby
75
+ config.before(:each, type: :system, js: true) do
76
+ driven_by :selenium_chrome_with_download_headless # or non-headless version
77
+ end
78
+
79
+ config.after(:each, type: :system, js: true) do
80
+ clear_downloads
81
+ end
82
+
83
+ config.include SoManyDevices::DownloadsHelper, type: :system
84
+ ```
85
+
86
+ and in your test (just an example...):
87
+
88
+ ```ruby
89
+ it 'can download a file', :js do
90
+ visit funny_page_path
91
+ click_link 'Download PDF'
92
+ wait_for_download
93
+ expect(downloads.length).to eq(1)
94
+ expect(last_download).to match(/.*\.pdf/)
95
+ last_pdf = File.read(last_download)
96
+ end
97
+ ```
98
+
99
+ If you prefer to use this driver only on selected tests, you can use the following:
100
+
101
+ ```ruby
102
+ config.before(:each, type: :system, js: true, with_downloads: true) do
103
+ driven_by :selenium_chrome_with_download_headless
104
+ end
105
+
106
+ config.after(:each, type: :system, js: true, with_downloads: true) do
107
+ clear_downloads
108
+ end
109
+
110
+ config.include SoManyDevices::DownloadsHelper, type: :system
111
+ ```
112
+
113
+ and in your test (just an example...):
114
+
115
+ ```ruby
116
+ it 'can download a file', :js, :with_downloads do
117
+ end
118
+ ```
119
+
120
+ The call to `clear_downloads` makes sure that all the downloads are removed from the downloads folder.
121
+ All downloads are performed in the `tmp/downloads` folder of your project.
64
122
 
65
123
  ## Development
66
124
 
@@ -73,8 +131,8 @@ which will create a git tag for the version, push git commits and tags, and push
73
131
 
74
132
  ## Contributing
75
133
 
76
- Bug reports and pull requests are welcome on GitHub at https://github.com/renuo/so_many_devices.
77
- This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/renuo/so_many_devices/blob/master/CODE_OF_CONDUCT.md).
134
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/renuo/so_many_devices>.
135
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/renuo/so_many_devices/blob/main/CODE_OF_CONDUCT.md).
78
136
 
79
137
  Do you think our devices are not that many? 😡
80
138
 
@@ -86,9 +144,9 @@ The gem is available as open source under the terms of the [MIT License](https:/
86
144
 
87
145
  ## Code of Conduct
88
146
 
89
- Everyone interacting in the SoManyDevices project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/renuo/so_many_devices/blob/master/CODE_OF_CONDUCT.md).
147
+ Everyone interacting in the SoManyDevices project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/renuo/so_many_devices/blob/main/CODE_OF_CONDUCT.md).
90
148
 
91
149
 
92
150
  ## Special Thanks
93
151
 
94
- [![Renuo AG](/logo/renuo.png)](https://renuo.ch)
152
+ [![Renuo AG](./logo/renuo.png)](https://www.renuo.ch)
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -0,0 +1,45 @@
1
+ module SoManyDevices
2
+ module DownloadsHelper
3
+ TIMEOUT = 10
4
+ PATH = "#{Dir.pwd}/tmp/downloads"
5
+
6
+ def downloads
7
+ Dir["#{PATH}/*"]
8
+ end
9
+
10
+ def download
11
+ downloads.first
12
+ end
13
+
14
+ def first_download
15
+ downloads.first
16
+ end
17
+
18
+ def last_download
19
+ downloads.last
20
+ end
21
+
22
+ def download_content
23
+ wait_for_download
24
+ File.read(download)
25
+ end
26
+
27
+ def wait_for_download
28
+ Timeout.timeout(TIMEOUT) do
29
+ sleep 0.1 until downloaded?
30
+ end
31
+ end
32
+
33
+ def downloaded?
34
+ !downloading? && downloads.any?
35
+ end
36
+
37
+ def downloading?
38
+ downloads.grep(/\.crdownload$/).any?
39
+ end
40
+
41
+ def clear_downloads
42
+ FileUtils.rm_f(downloads)
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module SoManyDevices
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,23 +1,34 @@
1
1
  require "so_many_devices/version"
2
+ require "so_many_devices/downloads_helper"
3
+ require "yaml"
4
+ require "capybara"
2
5
 
3
6
  module SoManyDevices
4
- class Error < StandardError;
5
- end
7
+ class Error < StandardError; end
6
8
 
7
- devices = YAML::load_file(File.join(__dir__, 'so_many_devices.yml'))
9
+ devices = YAML.load_file(File.join(__dir__, "so_many_devices.yml"))
8
10
 
9
11
  devices.each do |device_name, options|
10
- standard_args = ['--disable-site-isolation-trials']
11
- headless_args = ['--headless', '--disable-site-isolation-trials']
12
- headless_args << '--disable-gpu' if Gem.win_platform?
12
+ standard_args = ["--disable-site-isolation-trials"]
13
+ headless_args = ["--headless", "--disable-site-isolation-trials"]
14
+ headless_args << "--disable-gpu" if Gem.win_platform?
13
15
 
14
- [[device_name.to_sym, standard_args], ["#{device_name}_headless".to_sym, headless_args]].each do |device_name, args|
16
+ [[device_name, standard_args], ["#{device_name}_headless", headless_args]].each do |device_name, args|
15
17
  Capybara.register_driver device_name.to_sym do |app|
16
18
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
17
- 'goog:chromeOptions' => { args: args, mobileEmulation: options }
19
+ "goog:chromeOptions" => {args: args, mobileEmulation: options}
18
20
  )
19
21
  Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities)
20
22
  end
21
23
  end
24
+
25
+ [[:selenium_chrome_with_download, standard_args], [:selenium_chrome_with_download_headless, headless_args]].each do |device_name, args|
26
+ Capybara.register_driver device_name do |app|
27
+ browser_options = ::Selenium::WebDriver::Chrome::Options.new(args: args)
28
+ browser_options.add_preference(:download, prompt_for_download: false, default_directory: SoManyDevices::DownloadsHelper::PATH.to_s)
29
+ browser_options.add_preference(:browser, set_download_behavior: {behavior: "allow"})
30
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
31
+ end
32
+ end
22
33
  end
23
34
  end
@@ -1,27 +1,30 @@
1
- require_relative 'lib/so_many_devices/version'
1
+ require_relative "lib/so_many_devices/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = "so_many_devices"
5
- spec.version = SoManyDevices::VERSION
6
- spec.authors = ["Alessandro Rodi"]
7
- spec.email = ["coorasse@gmail.com"]
4
+ spec.name = "so_many_devices"
5
+ spec.version = SoManyDevices::VERSION
6
+ spec.authors = ["Alessandro Rodi"]
7
+ spec.email = ["coorasse@gmail.com"]
8
8
 
9
- spec.summary = %q{A list of configurations for so many devices!}
10
- spec.description = %q{This incomplete but very satisfying list of devices, will help you run your app on so many devices!}
11
- spec.homepage = "https://github.com/renuo/so_many_devices"
12
- spec.license = "MIT"
9
+ spec.summary = "A list of configurations for so many devices!"
10
+ spec.description = "This incomplete but very satisfying list of devices, will help you run your app on so many devices!"
11
+ spec.homepage = "https://github.com/renuo/so_many_devices"
12
+ spec.license = "MIT"
13
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
14
 
15
15
  spec.metadata["homepage_uri"] = spec.homepage
16
16
  spec.metadata["source_code_uri"] = "https://github.com/renuo/so_many_devices"
17
- spec.metadata["changelog_uri"] = "https://github.com/renuo/so_many_devices/CHANGELOG.md"
17
+ spec.metadata["changelog_uri"] = "https://github.com/renuo/so_many_devices/blob/main/CHANGELOG.md"
18
18
 
19
19
  # Specify which files should be added to the gem when it is released.
20
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
21
+ spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
22
22
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
23
  end
24
- spec.bindir = "exe"
25
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.bindir = "exe"
25
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ["lib"]
27
+
28
+ spec.add_dependency "capybara", ">= 3.0"
29
+ spec.add_development_dependency "standard"
27
30
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: so_many_devices
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Rodi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-02 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2023-01-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capybara
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: standard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: This incomplete but very satisfying list of devices, will help you run
14
42
  your app on so many devices!
15
43
  email:
@@ -20,7 +48,10 @@ extra_rdoc_files: []
20
48
  files:
21
49
  - ".gitignore"
22
50
  - ".rspec"
51
+ - ".semaphore/main-deploy.yml"
52
+ - ".semaphore/semaphore.yml"
23
53
  - ".travis.yml"
54
+ - CHANGELOG.md
24
55
  - CODE_OF_CONDUCT.md
25
56
  - Gemfile
26
57
  - LICENSE.txt
@@ -30,6 +61,7 @@ files:
30
61
  - bin/setup
31
62
  - lib/so_many_devices.rb
32
63
  - lib/so_many_devices.yml
64
+ - lib/so_many_devices/downloads_helper.rb
33
65
  - lib/so_many_devices/version.rb
34
66
  - logo/renuo.png
35
67
  - so_many_devices.gemspec
@@ -39,8 +71,8 @@ licenses:
39
71
  metadata:
40
72
  homepage_uri: https://github.com/renuo/so_many_devices
41
73
  source_code_uri: https://github.com/renuo/so_many_devices
42
- changelog_uri: https://github.com/renuo/so_many_devices/CHANGELOG.md
43
- post_install_message:
74
+ changelog_uri: https://github.com/renuo/so_many_devices/blob/main/CHANGELOG.md
75
+ post_install_message:
44
76
  rdoc_options: []
45
77
  require_paths:
46
78
  - lib
@@ -55,8 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
87
  - !ruby/object:Gem::Version
56
88
  version: '0'
57
89
  requirements: []
58
- rubygems_version: 3.0.1
59
- signing_key:
90
+ rubygems_version: 3.3.10
91
+ signing_key:
60
92
  specification_version: 4
61
93
  summary: A list of configurations for so many devices!
62
94
  test_files: []