percy-appium-app 0.0.1 → 0.0.2

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.
@@ -9,197 +9,199 @@ require_relative '../lib/cli_wrapper'
9
9
  require_relative '../lib/tile'
10
10
  require_relative '../common/common'
11
11
 
12
- class GenericProvider
13
- attr_accessor :driver, :metadata, :debug_url
12
+ module Percy
13
+ class GenericProvider
14
+ attr_accessor :driver, :metadata, :debug_url
15
+
16
+ def initialize(driver, metadata)
17
+ @driver = driver
18
+ @metadata = metadata
19
+ @debug_url = ''
20
+ end
14
21
 
15
- def initialize(driver, metadata)
16
- @driver = driver
17
- @metadata = metadata
18
- @debug_url = ''
19
- end
22
+ def self.supports(_remote_url)
23
+ true
24
+ end
20
25
 
21
- def self.supports(_remote_url)
22
- true
23
- end
26
+ def screenshot(name, **kwargs)
27
+ tiles = _get_tiles(**kwargs)
28
+ tag = _get_tag(**kwargs)
29
+ ignore_regions = {
30
+ 'ignoreElementsData' => _find_regions(
31
+ xpaths: kwargs.fetch(:ignore_regions_xpaths, []),
32
+ accessibility_ids: kwargs.fetch(:ignore_region_accessibility_ids, []),
33
+ appium_elements: kwargs.fetch(:ignore_region_appium_elements, []),
34
+ custom_locations: kwargs.fetch(:custom_ignore_regions, [])
35
+ )
36
+ }
37
+ consider_regions = {
38
+ 'considerElementsData' => _find_regions(
39
+ xpaths: kwargs.fetch(:consider_regions_xpaths, []),
40
+ accessibility_ids: kwargs.fetch(:consider_region_accessibility_ids, []),
41
+ appium_elements: kwargs.fetch(:consider_region_appium_elements, []),
42
+ custom_locations: kwargs.fetch(:custom_consider_regions, [])
43
+ )
44
+ }
45
+
46
+ _post_screenshots(name, tag, tiles, get_debug_url, ignore_regions, consider_regions)
47
+ end
24
48
 
25
- def screenshot(name, **kwargs)
26
- tiles = _get_tiles(**kwargs)
27
- tag = _get_tag(**kwargs)
28
- ignore_regions = {
29
- 'ignoreElementsData' => _find_regions(
30
- xpaths: kwargs.fetch(:ignore_regions_xpaths, []),
31
- accessibility_ids: kwargs.fetch(:ignore_region_accessibility_ids, []),
32
- appium_elements: kwargs.fetch(:ignore_region_appium_elements, []),
33
- custom_locations: kwargs.fetch(:custom_ignore_regions, [])
34
- )
35
- }
36
- consider_regions = {
37
- 'considerElementsData' => _find_regions(
38
- xpaths: kwargs.fetch(:consider_regions_xpaths, []),
39
- accessibility_ids: kwargs.fetch(:consider_region_accessibility_ids, []),
40
- appium_elements: kwargs.fetch(:consider_region_appium_elements, []),
41
- custom_locations: kwargs.fetch(:custom_consider_regions, [])
42
- )
43
- }
44
-
45
- _post_screenshots(name, tag, tiles, get_debug_url, ignore_regions, consider_regions)
46
- end
49
+ def _get_tag(**kwargs)
50
+ name = kwargs[:device_name] || metadata.device_name
51
+ os_name = metadata.os_name
52
+ os_version = metadata.os_version
53
+ width = metadata.device_screen_size['width'] || 1
54
+ height = metadata.device_screen_size['height'] || 1
55
+ orientation = metadata.get_orientation(**kwargs).downcase
56
+
57
+ {
58
+ 'name' => name,
59
+ 'os_name' => os_name,
60
+ 'os_version' => os_version,
61
+ 'width' => width,
62
+ 'height' => height,
63
+ 'orientation' => orientation
64
+ }
65
+ end
47
66
 
48
- def _get_tag(**kwargs)
49
- name = kwargs[:device_name] || metadata.device_name
50
- os_name = metadata.os_name
51
- os_version = metadata.os_version
52
- width = metadata.device_screen_size['width'] || 1
53
- height = metadata.device_screen_size['height'] || 1
54
- orientation = metadata.get_orientation(**kwargs).downcase
55
-
56
- {
57
- 'name' => name,
58
- 'os_name' => os_name,
59
- 'os_version' => os_version,
60
- 'width' => width,
61
- 'height' => height,
62
- 'orientation' => orientation
63
- }
64
- end
67
+ def _get_tiles(**kwargs)
68
+ fullpage_ss = kwargs[:fullpage] || false
69
+ if fullpage_ss
70
+ log('Full page screenshot is only supported on App Automate. Falling back to single page screenshot.')
71
+ end
65
72
 
66
- def _get_tiles(**kwargs)
67
- fullpage_ss = kwargs[:fullpage] || false
68
- if fullpage_ss
69
- log('Full page screenshot is only supported on App Automate. Falling back to single page screenshot.')
73
+ png_bytes = driver.screenshot_as(:png)
74
+ directory = _get_dir
75
+ path = _write_screenshot(png_bytes, directory)
76
+
77
+ fullscreen = kwargs[:full_screen] || false
78
+ status_bar_height = kwargs[:status_bar_height] || metadata.status_bar_height
79
+ nav_bar_height = kwargs[:nav_bar_height] || metadata.navigation_bar_height
80
+ header_height = 0
81
+ footer_height = 0
82
+ [
83
+ Percy::Tile.new(status_bar_height, nav_bar_height, header_height, footer_height, filepath: path, fullscreen: fullscreen)
84
+ ]
70
85
  end
71
86
 
72
- png_bytes = driver.screenshot_as(:png)
73
- directory = _get_dir
74
- path = _write_screenshot(png_bytes, directory)
75
-
76
- fullscreen = kwargs[:full_screen] || false
77
- status_bar_height = kwargs[:status_bar_height] || metadata.status_bar_height
78
- nav_bar_height = kwargs[:nav_bar_height] || metadata.navigation_bar_height
79
- header_height = 0
80
- footer_height = 0
81
- [
82
- Tile.new(status_bar_height, nav_bar_height, header_height, footer_height, filepath: path, fullscreen: fullscreen)
83
- ]
84
- end
87
+ def _find_regions(xpaths:, accessibility_ids:, appium_elements:, custom_locations:)
88
+ elements_array = []
89
+ get_regions_by_xpath(elements_array, xpaths)
90
+ get_regions_by_ids(elements_array, accessibility_ids)
91
+ get_regions_by_elements(elements_array, appium_elements)
92
+ get_regions_by_location(elements_array, custom_locations)
93
+ elements_array
94
+ end
85
95
 
86
- def _find_regions(xpaths:, accessibility_ids:, appium_elements:, custom_locations:)
87
- elements_array = []
88
- get_regions_by_xpath(elements_array, xpaths)
89
- get_regions_by_ids(elements_array, accessibility_ids)
90
- get_regions_by_elements(elements_array, appium_elements)
91
- get_regions_by_location(elements_array, custom_locations)
92
- elements_array
93
- end
96
+ def _post_screenshots(name, tag, tiles, debug_url, ignored_regions, considered_regions)
97
+ Percy::CLIWrapper.new.post_screenshots(name, tag, tiles, debug_url, ignored_regions, considered_regions)
98
+ end
94
99
 
95
- def _post_screenshots(name, tag, tiles, debug_url, ignored_regions, considered_regions)
96
- CLIWrapper.new.post_screenshots(name, tag, tiles, debug_url, ignored_regions, considered_regions)
97
- end
100
+ def _write_screenshot(png_bytes, directory)
101
+ filepath = _get_path(directory)
102
+ File.open(filepath, 'wb') { |f| f.write(png_bytes) }
103
+ filepath
104
+ end
98
105
 
99
- def _write_screenshot(png_bytes, directory)
100
- filepath = _get_path(directory)
101
- File.open(filepath, 'wb') { |f| f.write(png_bytes) }
102
- filepath
103
- end
106
+ def get_region_object(selector, element)
107
+ scale_factor = metadata.scale_factor
108
+ location = hashed(element.location)
109
+ size = hashed(element.size)
110
+ coordinates = {
111
+ 'top' => location['y'] * scale_factor,
112
+ 'bottom' => (location['y'] + size['height']) * scale_factor,
113
+ 'left' => location['x'] * scale_factor,
114
+ 'right' => (location['x'] + size['width']) * scale_factor
115
+ }
116
+ { 'selector' => selector, 'coOrdinates' => coordinates }
117
+ end
104
118
 
105
- def get_region_object(selector, element)
106
- scale_factor = metadata.scale_factor
107
- location = hashed(element.location)
108
- size = hashed(element.size)
109
- coordinates = {
110
- 'top' => location['y'] * scale_factor,
111
- 'bottom' => (location['y'] + size['height']) * scale_factor,
112
- 'left' => location['x'] * scale_factor,
113
- 'right' => (location['x'] + size['width']) * scale_factor
114
- }
115
- { 'selector' => selector, 'coOrdinates' => coordinates }
116
- end
119
+ def get_regions_by_xpath(elements_array, xpaths)
120
+ xpaths.each do |xpath|
121
+ element = driver.find_element(Appium::Core::Base::SearchContext::FINDERS[:xpath], xpath)
122
+ selector = "xpath: #{xpath}"
123
+ if element
124
+ region = get_region_object(selector, element)
125
+ elements_array << region
126
+ end
127
+ rescue Appium::Core::Error::NoSuchElementError => e
128
+ log("Appium Element with xpath: #{xpath} not found. Ignoring this xpath.")
129
+ log(e, on_debug: true)
130
+ end
131
+ end
117
132
 
118
- def get_regions_by_xpath(elements_array, xpaths)
119
- xpaths.each do |xpath|
120
- element = driver.find_element(Appium::Core::Base::SearchContext::FINDERS[:xpath], xpath)
121
- selector = "xpath: #{xpath}"
122
- if element
133
+ def get_regions_by_ids(elements_array, ids)
134
+ ids.each do |id|
135
+ element = driver.find_element(Appium::Core::Base::SearchContext::FINDERS[:accessibility_id], id)
136
+ selector = "id: #{id}"
123
137
  region = get_region_object(selector, element)
124
138
  elements_array << region
139
+ rescue Appium::Core::Error::NoSuchElementError => e
140
+ log("Appium Element with id: #{id} not found. Ignoring this id.")
141
+ log(e, on_debug: true)
125
142
  end
126
- rescue Appium::Core::Error::NoSuchElementError => e
127
- log("Appium Element with xpath: #{xpath} not found. Ignoring this xpath.")
128
- log(e, on_debug: true)
129
143
  end
130
- end
131
-
132
- def get_regions_by_ids(elements_array, ids)
133
- ids.each do |id|
134
- element = driver.find_element(Appium::Core::Base::SearchContext::FINDERS[:accessibility_id], id)
135
- selector = "id: #{id}"
136
- region = get_region_object(selector, element)
137
- elements_array << region
138
- rescue Appium::Core::Error::NoSuchElementError => e
139
- log("Appium Element with id: #{id} not found. Ignoring this id.")
140
- log(e, on_debug: true)
141
- end
142
- end
143
144
 
144
- def get_regions_by_elements(elements_array, elements)
145
- elements.each_with_index do |element, index|
146
- class_name = element.attribute('class')
147
- selector = "element: #{index} #{class_name}"
148
- region = get_region_object(selector, element)
149
- elements_array << region
150
- rescue Appium::Core::Error::NoSuchElementError => e
151
- log("Correct Element not passed at index #{index}")
152
- log(e, on_debug: true)
145
+ def get_regions_by_elements(elements_array, elements)
146
+ elements.each_with_index do |element, index|
147
+ class_name = element.attribute('class')
148
+ selector = "element: #{index} #{class_name}"
149
+ region = get_region_object(selector, element)
150
+ elements_array << region
151
+ rescue Appium::Core::Error::NoSuchElementError => e
152
+ log("Correct Element not passed at index #{index}")
153
+ log(e, on_debug: true)
154
+ end
153
155
  end
154
- end
155
156
 
156
- def get_regions_by_location(elements_array, custom_locations)
157
- custom_locations.each_with_index do |custom_location, index|
158
- screen_width = metadata.device_screen_size['width']
159
- screen_height = metadata.device_screen_size['height']
160
- if custom_location.valid?(screen_height, screen_width)
161
- region = {
162
- selector: "custom ignore region: #{index}",
163
- coOrdinates: {
164
- top: custom_location.top,
165
- bottom: custom_location.bottom,
166
- left: custom_location.left,
167
- right: custom_location.right
157
+ def get_regions_by_location(elements_array, custom_locations)
158
+ custom_locations.each_with_index do |custom_location, index|
159
+ screen_width = metadata.device_screen_size['width']
160
+ screen_height = metadata.device_screen_size['height']
161
+ if custom_location.valid?(screen_height, screen_width)
162
+ region = {
163
+ selector: "custom ignore region: #{index}",
164
+ coOrdinates: {
165
+ top: custom_location.top,
166
+ bottom: custom_location.bottom,
167
+ left: custom_location.left,
168
+ right: custom_location.right
169
+ }
168
170
  }
169
- }
170
- elements_array << region
171
- else
172
- log("Values passed in custom ignored region at index: #{index} are not valid")
171
+ elements_array << region
172
+ else
173
+ log("Values passed in custom ignored region at index: #{index} are not valid")
174
+ end
173
175
  end
174
176
  end
175
- end
176
177
 
177
- def log(message, on_debug: false)
178
- puts message if on_debug
179
- end
178
+ def log(message, on_debug: false)
179
+ puts message if on_debug
180
+ end
180
181
 
181
- def get_debug_url
182
- debug_url
183
- end
182
+ def get_debug_url
183
+ debug_url
184
+ end
184
185
 
185
- def get_device_name
186
- ''
187
- end
186
+ def get_device_name
187
+ ''
188
+ end
188
189
 
189
- def _get_dir
190
- dir_path = ENV['PERCY_TMP_DIR'] || nil
191
- if dir_path
192
- Pathname.new(dir_path).mkpath
193
- return dir_path
190
+ def _get_dir
191
+ dir_path = ENV['PERCY_TMP_DIR'] || nil
192
+ if dir_path
193
+ Pathname.new(dir_path).mkpath
194
+ return dir_path
195
+ end
196
+ Dir.mktmpdir
194
197
  end
195
- Dir.mktmpdir
196
- end
197
198
 
198
- def _get_path(directory)
199
- suffix = '.png'
200
- prefix = 'percy-appium-'
201
- file = Tempfile.new([prefix, suffix], directory)
202
- file.close
203
- file.path
199
+ def _get_path(directory)
200
+ suffix = '.png'
201
+ prefix = 'percy-appium-'
202
+ file = Tempfile.new([prefix, suffix], directory)
203
+ file.close
204
+ file.path
205
+ end
204
206
  end
205
207
  end
@@ -5,13 +5,15 @@ require_relative '../metadata/metadata_resolver'
5
5
  require_relative 'app_automate'
6
6
  require_relative 'generic_provider'
7
7
 
8
- class ProviderResolver
9
- def self.resolve(driver)
10
- metadata = MetadataResolver.resolve(driver)
11
- providers = [AppAutomate, GenericProvider]
12
- providers.each do |provider|
13
- return provider.new(driver, metadata) if provider.supports(metadata.remote_url)
8
+ module Percy
9
+ class ProviderResolver
10
+ def self.resolve(driver)
11
+ metadata = Percy::MetadataResolver.resolve(driver)
12
+ providers = [Percy::AppAutomate, Percy::GenericProvider]
13
+ providers.each do |provider|
14
+ return provider.new(driver, metadata) if provider.supports(metadata.remote_url)
15
+ end
16
+ raise UnknownProvider
14
17
  end
15
- raise UnknownProvider
16
18
  end
17
19
  end
data/percy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Percy
4
- VERSION = '0.0.1'.freeze
4
+ VERSION = '0.0.2'.freeze
5
5
  end
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ['percy']
27
27
 
28
28
  spec.add_runtime_dependency 'appium_lib', '~> 12.0'
29
+ spec.add_runtime_dependency 'dotenv', '~> 2.8'
29
30
 
30
31
  spec.add_development_dependency 'bundler', '~> 2.4'
31
32
  spec.add_development_dependency 'minitest', '~> 5.20'
@@ -1,19 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Metrics/MethodLength
4
-
5
3
  require 'minitest/autorun'
6
4
  require 'minitest/mock'
7
5
  require 'appium_lib'
8
6
  require_relative 'mocks/mock_methods'
9
7
  require_relative '../percy/metadata/android_metadata'
10
8
 
11
- # Test suite for the AndroidMetadata class
9
+ # Test suite for the Percy::AndroidMetadata class
12
10
  class TestAndroidMetadata < Minitest::Test
13
11
  def setup
14
12
  @mock_webdriver = Minitest::Mock.new
15
13
  @mock_webdriver.expect(:capabilities, get_android_capabilities)
16
- @android_metadata = AndroidMetadata.new(@mock_webdriver)
14
+ @android_metadata = Percy::AndroidMetadata.new(@mock_webdriver)
17
15
  end
18
16
 
19
17
  def test_android_execute_script
@@ -1,23 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Metrics/MethodLength
4
- # rubocop:disable Metrics/AbcSize
5
-
6
3
  require 'minitest/autorun'
7
4
  require 'minitest/mock'
8
5
  require_relative '../percy/providers/app_automate'
9
6
  require_relative '../percy/metadata/android_metadata'
10
7
  require_relative 'mocks/mock_methods'
11
8
 
12
- # Test suite for the AppAutomate class
9
+ # Test suite for the Percy::AppAutomate class
13
10
  class TestAppAutomate < Minitest::Test
14
11
  COMPARISON_RESPONSE = { 'success' => true, 'link' => 'https://snapshots-url' }.freeze
15
12
 
16
13
  def setup
17
14
  @mock_webdriver = Minitest::Mock.new
18
15
  @mock_webdriver.expect(:capabilities, get_android_capabilities)
19
- @metadata = AndroidMetadata.new(@mock_webdriver)
20
- @app_automate = AppAutomate.new(@mock_webdriver, @metadata)
16
+ @metadata = Percy::AndroidMetadata.new(@mock_webdriver)
17
+ @app_automate = Percy::AppAutomate.new(@mock_webdriver, @metadata)
21
18
  end
22
19
 
23
20
  def test_app_automate_get_debug_url
@@ -28,18 +25,18 @@ class TestAppAutomate < Minitest::Test
28
25
  end
29
26
 
30
27
  def test_app_automate_supports_with_correct_url
31
- app_automate_session = AppAutomate.supports('https://hub-cloud.browserstack.com/wd/hub')
28
+ app_automate_session = Percy::AppAutomate.supports('https://hub-cloud.browserstack.com/wd/hub')
32
29
  assert_equal true, app_automate_session
33
30
  end
34
31
 
35
32
  def test_app_automate_supports_with_incorrect_url
36
- app_automate_session = AppAutomate.supports('https://hub-cloud.generic.com/wd/hub')
33
+ app_automate_session = Percy::AppAutomate.supports('https://hub-cloud.generic.com/wd/hub')
37
34
  assert_equal false, app_automate_session
38
35
  end
39
36
 
40
37
  def test_app_automate_supports_with_AA_DOMAIN
41
38
  ENV['AA_DOMAIN'] = 'bsstag'
42
- app_automate_session = AppAutomate.supports('bsstag.com')
39
+ app_automate_session = Percy::AppAutomate.supports('bsstag.com')
43
40
  assert_equal true, app_automate_session
44
41
  ENV['AA_DOMAIN'] = nil
45
42
  end
@@ -80,23 +77,23 @@ class TestAppAutomate < Minitest::Test
80
77
  end
81
78
 
82
79
  def test_get_tiles
83
- # Mocking Metadata's session_id method
80
+ # Mocking Percy::Metadata's session_id method
84
81
  metadata_mock = Minitest::Mock.new
85
82
  metadata_mock.expect(:session_id, 'session_id_123')
86
83
 
87
- # Mocking AndroidMetadata's methods
84
+ # Mocking Percy::AndroidMetadata's methods
88
85
  android_metadata_mock = Minitest::Mock.new
89
86
  android_metadata_mock.expect(:device_screen_size, { 'width' => 1080, 'height' => 1920 })
90
87
  android_metadata_mock.expect(:navigation_bar_height, 150)
91
88
  android_metadata_mock.expect(:status_bar_height, 100)
92
89
 
93
- Metadata.class_eval do
90
+ Percy::Metadata.class_eval do
94
91
  define_method(:session_id) do
95
92
  metadata_mock.session_id
96
93
  end
97
94
  end
98
95
 
99
- AndroidMetadata.class_eval do
96
+ Percy::AndroidMetadata.class_eval do
100
97
  define_method(:device_screen_size) do
101
98
  android_metadata_mock.device_screen_size
102
99
  end
data/specs/app_percy.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Metrics/MethodLength
4
-
5
3
  require 'minitest/autorun'
6
4
  # require 'webmock/minitest'
7
5
  require_relative '../percy/lib/app_percy'
@@ -12,7 +10,7 @@ require_relative '../percy/providers/generic_provider'
12
10
  require_relative '../percy/lib/cli_wrapper'
13
11
  require_relative 'mocks/mock_methods'
14
12
 
15
- # Test suite for the AppPercy class
13
+ # Test suite for the Percy::AppPercy class
16
14
  class TestAppPercy < Minitest::Test
17
15
  COMPARISON_RESPONSE = { 'link' => 'https://snapshot_url', 'success' => true }.freeze
18
16
 
@@ -38,10 +36,10 @@ class TestAppPercy < Minitest::Test
38
36
 
39
37
  ENV['PERCY_DISABLE_REMOTE_UPLOADS'] = 'true'
40
38
 
41
- app_percy = AppPercy.new(@mock_android_webdriver)
39
+ app_percy = Percy::AppPercy.new(@mock_android_webdriver)
42
40
 
43
- assert_instance_of(AndroidMetadata, app_percy.metadata)
44
- assert_instance_of(AppAutomate, app_percy.provider)
41
+ assert_instance_of(Percy::AndroidMetadata, app_percy.metadata)
42
+ assert_instance_of(Percy::AppAutomate, app_percy.provider)
45
43
  end
46
44
 
47
45
  def test_android_on_non_app_automate
@@ -57,9 +55,9 @@ class TestAppPercy < Minitest::Test
57
55
  5.times do
58
56
  @mock_android_webdriver.expect(:capabilities, get_android_capabilities)
59
57
  end
60
- app_percy = AppPercy.new(@mock_android_webdriver)
61
- assert_instance_of(AndroidMetadata, app_percy.metadata)
62
- assert_instance_of(GenericProvider, app_percy.provider)
58
+ app_percy = Percy::AppPercy.new(@mock_android_webdriver)
59
+ assert_instance_of(Percy::AndroidMetadata, app_percy.metadata)
60
+ assert_instance_of(Percy::GenericProvider, app_percy.provider)
63
61
  end
64
62
 
65
63
  def test_ios_on_app_automate
@@ -68,9 +66,9 @@ class TestAppPercy < Minitest::Test
68
66
  5.times do
69
67
  @mock_ios_webdriver.expect(:capabilities, get_ios_capabilities)
70
68
  end
71
- app_percy = AppPercy.new(@mock_ios_webdriver)
72
- assert_instance_of(IOSMetadata, app_percy.metadata)
73
- assert_instance_of(AppAutomate, app_percy.provider)
69
+ app_percy = Percy::AppPercy.new(@mock_ios_webdriver)
70
+ assert_instance_of(Percy::IOSMetadata, app_percy.metadata)
71
+ assert_instance_of(Percy::AppAutomate, app_percy.provider)
74
72
  end
75
73
 
76
74
  def test_ios_on_non_app_automate
@@ -84,16 +82,16 @@ class TestAppPercy < Minitest::Test
84
82
  3.times do
85
83
  @mock_ios_webdriver.expect(:capabilities, get_ios_capabilities)
86
84
  end
87
- app_percy = AppPercy.new(@mock_ios_webdriver)
88
- assert_instance_of(IOSMetadata, app_percy.metadata)
89
- assert_instance_of(GenericProvider, app_percy.provider)
85
+ app_percy = Percy::AppPercy.new(@mock_ios_webdriver)
86
+ assert_instance_of(Percy::IOSMetadata, app_percy.metadata)
87
+ assert_instance_of(Percy::GenericProvider, app_percy.provider)
90
88
  end
91
89
 
92
90
  def test_screenshot_with_percy_options_disabled
93
91
  disable_percy_options(@mock_android_webdriver, num = 5)
94
92
  make_mock_driver_appium(@mock_android_webdriver)
95
93
  mock_driver_remote_url(@mock_android_webdriver, 'some-other-url', num = 2)
96
- app_percy = AppPercy.new(@mock_android_webdriver)
94
+ app_percy = Percy::AppPercy.new(@mock_android_webdriver)
97
95
  assert_nil app_percy.screenshot('screenshot 1')
98
96
  end
99
97
 
@@ -101,7 +99,7 @@ class TestAppPercy < Minitest::Test
101
99
  disable_percy_options(@mock_android_webdriver, num = 5)
102
100
  make_mock_driver_appium(@mock_android_webdriver)
103
101
  mock_driver_remote_url(@mock_android_webdriver, 'some-other-url', num = 2)
104
- app_percy = AppPercy.new(@mock_android_webdriver)
102
+ app_percy = Percy::AppPercy.new(@mock_android_webdriver)
105
103
  assert_nil app_percy.screenshot('screenshot 1')
106
104
  end
107
105
 
@@ -112,7 +110,7 @@ class TestAppPercy < Minitest::Test
112
110
  })
113
111
 
114
112
  assert_raises(Exception) do
115
- AppPercy.screenshot(@mock_android_webdriver, 'screenshot')
113
+ Percy::AppPercy.screenshot(@mock_android_webdriver, 'screenshot')
116
114
  end
117
115
  end
118
116
 
@@ -125,16 +123,16 @@ class TestAppPercy < Minitest::Test
125
123
  @mock_android_webdriver.expect(:capabilities, caps)
126
124
  end
127
125
 
128
- GenericProvider.stub(:supports, false) do
126
+ Percy::GenericProvider.stub(:supports, false) do
129
127
  assert_raises(UnknownProvider) do
130
- _provider = AppPercy.new(@mock_android_webdriver).provider
128
+ _provider = Percy::AppPercy.new(@mock_android_webdriver).provider
131
129
  end
132
130
  end
133
131
  end
134
132
 
135
133
  def test_invalid_driver
136
134
  assert_raises(DriverNotSupported) do
137
- AppPercy.new(Object.new)
135
+ Percy::AppPercy.new(Object.new)
138
136
  end
139
137
  end
140
138
 
@@ -169,7 +167,7 @@ class TestAppPercy < Minitest::Test
169
167
  })
170
168
 
171
169
  assert_raises(Exception) do
172
- AppPercy.screenshot(mock_webdriver, 'screenshot')
170
+ Percy::AppPercy.screenshot(mock_webdriver, 'screenshot')
173
171
  end
174
172
  end
175
173
  end