so_many_devices 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.semaphore/master-deploy.yml +19 -0
- data/.semaphore/semaphore.yml +32 -0
- data/Gemfile.lock +56 -0
- data/README.md +36 -6
- data/lib/so_many_devices.rb +14 -3
- data/lib/so_many_devices/downloads_helper.rb +37 -0
- data/lib/so_many_devices/version.rb +1 -1
- data/so_many_devices.gemspec +2 -0
- metadata +23 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c89db46b332aab888e79736d583df4b7897354fa0d5eb7d400ed9518e3ea5c9
|
4
|
+
data.tar.gz: dd7d100ca70832f4cd6fdba1ba3c090893a08de58c7a259b08ac3636ff4bf7ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f819f293cf1f3548930378db087c0329a1d93136e29ae62213a970217622e65be0bc56fe73bf075786fea0dfdea6a9e376a5ee0c4e08cb67b8d8e0cce33c1318
|
7
|
+
data.tar.gz: d4ade32037dbda8691bcf4a60d93d3088cc5337994dfa1c1d63589aaa4263689e1b2d693864a93db198c55458ac3b447d3265726ad4c33bc9c8c47f96d9144cc
|
@@ -0,0 +1,19 @@
|
|
1
|
+
version: v1.0
|
2
|
+
name: master-deploy
|
3
|
+
agent:
|
4
|
+
machine:
|
5
|
+
type: e1-standard-2
|
6
|
+
os_image: ubuntu1804
|
7
|
+
|
8
|
+
blocks:
|
9
|
+
- name: master-deploy
|
10
|
+
task:
|
11
|
+
secrets:
|
12
|
+
- name: rubygems-deploy
|
13
|
+
jobs:
|
14
|
+
- name: master-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,32 @@
|
|
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
|
+
secrets:
|
18
|
+
- name: so_many_devices
|
19
|
+
env_vars:
|
20
|
+
- name: RAILS_ENV
|
21
|
+
value: test
|
22
|
+
jobs:
|
23
|
+
- name: tests
|
24
|
+
commands:
|
25
|
+
- checkout --use-cache
|
26
|
+
- cache restore
|
27
|
+
- bundle install -j 4 --path vendor/bundle
|
28
|
+
- cache store
|
29
|
+
- bundle exec rspec
|
30
|
+
promotions:
|
31
|
+
- name: master
|
32
|
+
pipeline_file: master-deploy.yml
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
so_many_devices (0.2.0)
|
5
|
+
capybara (>= 3.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
addressable (2.7.0)
|
11
|
+
public_suffix (>= 2.0.2, < 5.0)
|
12
|
+
capybara (3.32.1)
|
13
|
+
addressable
|
14
|
+
mini_mime (>= 0.1.3)
|
15
|
+
nokogiri (~> 1.8)
|
16
|
+
rack (>= 1.6.0)
|
17
|
+
rack-test (>= 0.6.3)
|
18
|
+
regexp_parser (~> 1.5)
|
19
|
+
xpath (~> 3.2)
|
20
|
+
diff-lcs (1.3)
|
21
|
+
mini_mime (1.0.2)
|
22
|
+
mini_portile2 (2.4.0)
|
23
|
+
nokogiri (1.10.9)
|
24
|
+
mini_portile2 (~> 2.4.0)
|
25
|
+
public_suffix (4.0.4)
|
26
|
+
rack (2.2.2)
|
27
|
+
rack-test (1.1.0)
|
28
|
+
rack (>= 1.0, < 3)
|
29
|
+
rake (12.3.3)
|
30
|
+
regexp_parser (1.7.0)
|
31
|
+
rspec (3.9.0)
|
32
|
+
rspec-core (~> 3.9.0)
|
33
|
+
rspec-expectations (~> 3.9.0)
|
34
|
+
rspec-mocks (~> 3.9.0)
|
35
|
+
rspec-core (3.9.2)
|
36
|
+
rspec-support (~> 3.9.3)
|
37
|
+
rspec-expectations (3.9.2)
|
38
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
+
rspec-support (~> 3.9.0)
|
40
|
+
rspec-mocks (3.9.1)
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
+
rspec-support (~> 3.9.0)
|
43
|
+
rspec-support (3.9.3)
|
44
|
+
xpath (3.2.0)
|
45
|
+
nokogiri (~> 1.8)
|
46
|
+
|
47
|
+
PLATFORMS
|
48
|
+
ruby
|
49
|
+
|
50
|
+
DEPENDENCIES
|
51
|
+
rake (~> 12.0)
|
52
|
+
rspec (~> 3.0)
|
53
|
+
so_many_devices!
|
54
|
+
|
55
|
+
BUNDLED WITH
|
56
|
+
2.1.4
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# So Many Devices! 🕺
|
2
2
|
|
3
|
+
[](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
|
-
|
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
|
-
|
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
|
-
|
50
|
+
driven_by ENV['SELENIUM_DRIVER'].to_sym
|
49
51
|
end
|
50
52
|
```
|
51
53
|
|
@@ -60,7 +62,35 @@ 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
|
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.include SoManyDevices::DownloadsHelper, type: :system
|
80
|
+
```
|
81
|
+
|
82
|
+
and in your test (just an example...):
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
it 'can download a file', :js do
|
86
|
+
visit funny_page_path
|
87
|
+
click_link 'Download PDF'
|
88
|
+
wait_for_download
|
89
|
+
expect(downloads.length).to eq(1)
|
90
|
+
expect(download).to match(/.*\.pdf/)
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
64
94
|
|
65
95
|
## Development
|
66
96
|
|
@@ -73,7 +103,7 @@ which will create a git tag for the version, push git commits and tags, and push
|
|
73
103
|
|
74
104
|
## Contributing
|
75
105
|
|
76
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/renuo/so_many_devices
|
106
|
+
Bug reports and pull requests are welcome on GitHub at <https://github.com/renuo/so_many_devices>.
|
77
107
|
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).
|
78
108
|
|
79
109
|
Do you think our devices are not that many? 😡
|
@@ -91,4 +121,4 @@ Everyone interacting in the SoManyDevices project's codebases, issue trackers, c
|
|
91
121
|
|
92
122
|
## Special Thanks
|
93
123
|
|
94
|
-
[](https://www.renuo.ch)
|
data/lib/so_many_devices.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
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
9
|
devices = YAML::load_file(File.join(__dir__, 'so_many_devices.yml'))
|
8
10
|
|
@@ -11,7 +13,7 @@ module SoManyDevices
|
|
11
13
|
headless_args = ['--headless', '--disable-site-isolation-trials']
|
12
14
|
headless_args << '--disable-gpu' if Gem.win_platform?
|
13
15
|
|
14
|
-
[[device_name
|
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
19
|
'goog:chromeOptions' => { args: args, mobileEmulation: options }
|
@@ -19,5 +21,14 @@ module SoManyDevices
|
|
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
|
@@ -0,0 +1,37 @@
|
|
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 download_content
|
15
|
+
wait_for_download
|
16
|
+
File.read(download)
|
17
|
+
end
|
18
|
+
|
19
|
+
def wait_for_download
|
20
|
+
Timeout.timeout(TIMEOUT) do
|
21
|
+
sleep 0.1 until downloaded?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def downloaded?
|
26
|
+
!downloading? && downloads.any?
|
27
|
+
end
|
28
|
+
|
29
|
+
def downloading?
|
30
|
+
downloads.grep(/\.crdownload$/).any?
|
31
|
+
end
|
32
|
+
|
33
|
+
def clear_downloads
|
34
|
+
FileUtils.rm_f(downloads)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/so_many_devices.gemspec
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: so_many_devices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alessandro Rodi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
12
|
-
dependencies:
|
11
|
+
date: 2020-06-18 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'
|
13
27
|
description: This incomplete but very satisfying list of devices, will help you run
|
14
28
|
your app on so many devices!
|
15
29
|
email:
|
@@ -20,9 +34,12 @@ extra_rdoc_files: []
|
|
20
34
|
files:
|
21
35
|
- ".gitignore"
|
22
36
|
- ".rspec"
|
37
|
+
- ".semaphore/master-deploy.yml"
|
38
|
+
- ".semaphore/semaphore.yml"
|
23
39
|
- ".travis.yml"
|
24
40
|
- CODE_OF_CONDUCT.md
|
25
41
|
- Gemfile
|
42
|
+
- Gemfile.lock
|
26
43
|
- LICENSE.txt
|
27
44
|
- README.md
|
28
45
|
- Rakefile
|
@@ -30,6 +47,7 @@ files:
|
|
30
47
|
- bin/setup
|
31
48
|
- lib/so_many_devices.rb
|
32
49
|
- lib/so_many_devices.yml
|
50
|
+
- lib/so_many_devices/downloads_helper.rb
|
33
51
|
- lib/so_many_devices/version.rb
|
34
52
|
- logo/renuo.png
|
35
53
|
- so_many_devices.gemspec
|
@@ -55,7 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
73
|
- !ruby/object:Gem::Version
|
56
74
|
version: '0'
|
57
75
|
requirements: []
|
58
|
-
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.7.6.2
|
59
78
|
signing_key:
|
60
79
|
specification_version: 4
|
61
80
|
summary: A list of configurations for so many devices!
|