percy-appium-app 0.0.9.beta0 → 0.0.9.beta.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc4c4c4f66c3a7ecfe019e07eef6a8dfdffd17d57935c12780b441388703a5af
4
- data.tar.gz: 7ee0cd5c07b82d25a5718894fee9891bc612c02ed665cb34cf7f1e46d1fa95d1
3
+ metadata.gz: c6f74600a42302bf5300a766e19c17ebdd04b7458ce55f8685acf7f674f96e43
4
+ data.tar.gz: 9b4442060ca02d391eb2ee5863989f0736dabe38e58fa0d4b83e43c51af042e7
5
5
  SHA512:
6
- metadata.gz: a6e82f7ada4e367c5e74f24a8e9652619b581c3ec00076212ffbeced9e3f203928ad77cf067d0be3270fee228c734963bfbbf8ac5a3c0e6e9d7ad3fe6041aeed
7
- data.tar.gz: f991caac478c3035ae723faf96fb0cc0010631de9832eb5976e6beb325861c52aaf5caa6db658e9d716fcfea2fd9199203fd15c894028e7526b79b8bfd107c11
6
+ metadata.gz: 25b974f6c6de47ec6ecf38547296cbc280ca85a24b356b907fce4db8d416588197d786fddd38df5ec2297e26b28a42eb0aebaed6c6a8591f379f3f9c5d84fe71
7
+ data.tar.gz: 40e6e18819248f11358abd3aa2b0047cfda9062a9519858aad2eeb7a36d92809763bc46f6f68bf0f2dd830b9c33c36bbca2cd0e59aeba10483dbc46713e85e0e
@@ -27,8 +27,7 @@ jobs:
27
27
 
28
28
  container:
29
29
  # A Docker image with Semgrep installed. Do not change this.
30
- image: returntocorp/semgrep
31
-
30
+ image: returntocorp/semgrep:1.166.0
32
31
  # Skip any PR created by dependabot to avoid permission issues:
33
32
  if: (github.actor != 'dependabot[bot]')
34
33
 
@@ -15,12 +15,15 @@ module Percy
15
15
  def device_screen_size
16
16
  caps = capabilities
17
17
  caps = caps.as_json unless caps.is_a?(Hash)
18
+ # Use string keys to match the IosMetadata implementation and every
19
+ # consumer (generic_provider, app_automate, _get_tag), all of which read
20
+ # device_screen_size['width'] / ['height'].
18
21
  if caps['deviceScreenSize'].nil?
19
22
  size = driver.window_size
20
- { width: size.width.to_i, height: size.height.to_i }
23
+ { 'width' => size.width.to_i, 'height' => size.height.to_i }
21
24
  else
22
25
  width, height = caps['deviceScreenSize'].split('x')
23
- { width: width.to_i, height: height.to_i }
26
+ { 'width' => width.to_i, 'height' => height.to_i }
24
27
  end
25
28
  end
26
29
 
@@ -9,7 +9,8 @@ module Percy
9
9
  def self.resolve(driver)
10
10
  capabilities = driver.capabilities
11
11
  capabilities = capabilities.as_json unless capabilities.is_a?(Hash)
12
- platform_name = capabilities.fetch('platformName', '').downcase
12
+ key = capabilities.keys.find { |k| k.downcase.gsub('_', '') == 'platformname' }
13
+ platform_name = capabilities[key]&.downcase
13
14
  case platform_name
14
15
  when 'android'
15
16
  Percy::AndroidMetadata.new(driver)
@@ -137,7 +137,10 @@ module Percy
137
137
 
138
138
  def get_regions_by_xpath(elements_array, xpaths)
139
139
  xpaths.each do |xpath|
140
- element = driver.find_element(Appium::Core::Base::SearchContext::FINDERS[:xpath], xpath)
140
+ # Pass the :xpath finder symbol directly. appium_lib_core 12.x removed
141
+ # Appium::Core::Base::SearchContext::FINDERS; the symbol form works
142
+ # across all supported appium_lib versions.
143
+ element = driver.find_element(:xpath, xpath)
141
144
  selector = "xpath: #{xpath}"
142
145
  if element
143
146
  region = get_region_object(selector, element)
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.9.beta0'.freeze
4
+ VERSION = '0.0.9.beta.2'.freeze
5
5
  end
@@ -46,13 +46,21 @@ class TestAndroidMetadata < Minitest::Test
46
46
 
47
47
  # Call the method and assert the result
48
48
  result = @android_metadata.device_screen_size
49
- assert_equal({ width: 1080, height: 1920 }, result)
49
+ assert_equal({ 'width' => 1080, 'height' => 1920 }, result)
50
50
 
51
51
  # Verify mocks
52
52
  mock_window_size.verify
53
53
  @mock_webdriver.verify
54
54
  end
55
55
 
56
+ def test_device_screen_size_when_device_screen_size_is_present
57
+ # 'deviceScreenSize' => '1080x2280' from get_android_capabilities; parsed into string-keyed hash
58
+ @mock_webdriver.expect(:capabilities, get_android_capabilities)
59
+ result = @android_metadata.device_screen_size
60
+ assert_equal({ 'width' => 1080, 'height' => 2280 }, result)
61
+ @mock_webdriver.verify
62
+ end
63
+
56
64
  def test_get_system_bars
57
65
  system_bars = {
58
66
  'statusBar' => { 'height' => 83 },
@@ -67,9 +67,12 @@ class TestAppAutomate < Minitest::Test
67
67
  end
68
68
 
69
69
  def test_execute_percy_screenshot_end
70
- @app_automate.stub(:execute_percy_screenshot_begin, 'deviceName' => 'abc', 'osVersion' => '123') do
70
+ # Wrap the stub return hashes in explicit braces. Under Ruby 3 keyword
71
+ # argument separation, a bare trailing hash is otherwise parsed as keyword
72
+ # args to Minitest's stub, raising ArgumentError.
73
+ @app_automate.stub(:execute_percy_screenshot_begin, { 'deviceName' => 'abc', 'osVersion' => '123' }) do
71
74
  @app_automate.stub(:execute_percy_screenshot_end, nil) do
72
- @app_automate.stub(:screenshot, 'link' => 'https://link') do
75
+ @app_automate.stub(:screenshot, { 'link' => 'https://link' }) do
73
76
  @app_automate.screenshot('name')
74
77
  end
75
78
  end
@@ -256,7 +256,7 @@ class TestGenericProvider < Minitest::Test
256
256
  end
257
257
 
258
258
  @mock_webdriver.expect(:find_element, mock_element,
259
- [Appium::Core::Base::SearchContext::FINDERS[:xpath], '//path/to/element'])
259
+ [:xpath, '//path/to/element'])
260
260
 
261
261
  elements_array = []
262
262
  xpaths = ['//path/to/element']
@@ -271,7 +271,7 @@ class TestGenericProvider < Minitest::Test
271
271
  end
272
272
 
273
273
  def test_get_regions_by_xpath_with_non_existing_element
274
- @mock_webdriver.expect(:find_element, [Appium::Core::Base::SearchContext::FINDERS[:xpath], '//path/to/element']) do
274
+ @mock_webdriver.expect(:find_element, [:xpath, '//path/to/element']) do
275
275
  raise Appium::Core::Error::NoSuchElementError, 'Test error'
276
276
  end
277
277
  elements_array = []
@@ -309,7 +309,7 @@ class TestGenericProvider < Minitest::Test
309
309
  mock_element.expect(:size, Selenium::WebDriver::Dimension.new(100, 200))
310
310
  end
311
311
 
312
- @mock_webdriver.expect(:find_element, [Appium::Core::Base::SearchContext::FINDERS[:accessibility_id], 'id1']) do
312
+ @mock_webdriver.expect(:find_element, [:accessibility_id, 'id1']) do
313
313
  raise Appium::Core::Error::NoSuchElementError, 'Test error'
314
314
  end
315
315
 
@@ -20,6 +20,24 @@ class MetadataResolverTestCase < Minitest::Test
20
20
  assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
21
21
  @mock_webdriver.verify
22
22
  end
23
+
24
+ def test_android_resolved_with_PLATFORM_NAME
25
+ @mock_webdriver.expect(:capabilities, { 'PLATFORM_NAME' => 'Android' })
26
+ @mock_webdriver.expect(:capabilities, { 'PLATFORM_NAME' => 'Android' })
27
+ resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
28
+
29
+ assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
30
+ @mock_webdriver.verify
31
+ end
32
+
33
+ def test_android_resolved_with_platform_name
34
+ @mock_webdriver.expect(:capabilities, { 'platform_name' => 'Android' })
35
+ @mock_webdriver.expect(:capabilities, { 'platform_name' => 'Android' })
36
+ resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
37
+
38
+ assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
39
+ @mock_webdriver.verify
40
+ end
23
41
 
24
42
  def test_ios_resolved
25
43
  @mock_webdriver.expect(:capabilities, { 'platformName' => 'iOS' })
@@ -29,6 +47,23 @@ class MetadataResolverTestCase < Minitest::Test
29
47
  @mock_webdriver.verify
30
48
  end
31
49
 
50
+ def test_ios_resolved_with_platform_name
51
+ @mock_webdriver.expect(:capabilities, { 'platform_name' => 'iOS' })
52
+ resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
53
+
54
+ assert_instance_of(Percy::IOSMetadata, resolved_metadata)
55
+ @mock_webdriver.verify
56
+ end
57
+
58
+ def test_platformName_precedence_over_platform_name
59
+ @mock_webdriver.expect(:capabilities, { 'platformName' => 'Android', 'platform_name' => 'iOS' })
60
+ @mock_webdriver.expect(:capabilities, { 'platformName' => 'Android', 'platform_name' => 'iOS' })
61
+ resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
62
+
63
+ assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
64
+ @mock_webdriver.verify
65
+ end
66
+
32
67
  def test_unknown_platform_exception
33
68
  @mock_webdriver.expect(:capabilities, { 'platformName' => 'Something Random' })
34
69
 
@@ -38,4 +73,14 @@ class MetadataResolverTestCase < Minitest::Test
38
73
 
39
74
  @mock_webdriver.verify
40
75
  end
76
+
77
+ def test_unknown_platform_exception_with_platform_name
78
+ @mock_webdriver.expect(:capabilities, { 'platform_name' => 'Something Random' })
79
+
80
+ assert_raises(PlatformNotSupported) do
81
+ Percy::MetadataResolver.resolve(@mock_webdriver)
82
+ end
83
+
84
+ @mock_webdriver.verify
85
+ end
41
86
  end
data/specs/screenshot.rb CHANGED
@@ -383,7 +383,7 @@ class TestPercyScreenshot < Minitest::Test
383
383
  })
384
384
  end
385
385
  driver.expect(:find_element, mock_element,
386
- [Appium::Core::Base::SearchContext::FINDERS[:xpath], '//path/to/element'])
386
+ [:xpath, '//path/to/element'])
387
387
 
388
388
  percy_screenshot(driver, 'screenshot 1', ignore_regions_xpaths: xpaths)
389
389
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-appium-app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9.beta0
4
+ version: 0.0.9.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - BroswerStack
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
202
  requirements: []
203
- rubygems_version: 3.6.7
203
+ rubygems_version: 3.6.9
204
204
  specification_version: 4
205
205
  summary: Percy visual testing for Ruby Appium Mobile Apps
206
206
  test_files: []