page_magic 1.2.8 → 2.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.
- checksums.yaml +5 -5
- data/.rubocop.yml +23 -4
- data/.simplecov +5 -3
- data/.zsh_config +6 -0
- data/Dockerfile +11 -0
- data/Gemfile +13 -13
- data/Gemfile.lock +136 -148
- data/Makefile +17 -0
- data/README.md +26 -5
- data/Rakefile +12 -2
- data/VERSION +1 -1
- data/circle.yml +3 -1
- data/lib/active_support/core_ext/object/to_query.rb +84 -0
- data/lib/page_magic.rb +31 -24
- data/lib/page_magic/class_methods.rb +5 -2
- data/lib/page_magic/comparator.rb +37 -0
- data/lib/page_magic/comparator/fuzzy.rb +23 -0
- data/lib/page_magic/comparator/literal.rb +22 -0
- data/lib/page_magic/comparator/null.rb +26 -0
- data/lib/page_magic/comparator/parameter_map.rb +52 -0
- data/lib/page_magic/driver.rb +3 -0
- data/lib/page_magic/drivers.rb +6 -5
- data/lib/page_magic/drivers/poltergeist.rb +2 -0
- data/lib/page_magic/drivers/rack_test.rb +3 -1
- data/lib/page_magic/drivers/selenium.rb +4 -2
- data/lib/page_magic/element.rb +35 -15
- data/lib/page_magic/element/locators.rb +8 -5
- data/lib/page_magic/element/not_found.rb +38 -0
- data/lib/page_magic/element/query.rb +21 -20
- data/lib/page_magic/element/query/multiple_results.rb +21 -0
- data/lib/page_magic/element/query/prefetched_result.rb +26 -0
- data/lib/page_magic/element/query/single_result.rb +20 -0
- data/lib/page_magic/element/selector.rb +41 -16
- data/lib/page_magic/element/selector/methods.rb +18 -0
- data/lib/page_magic/element/selector/model.rb +21 -0
- data/lib/page_magic/element_context.rb +7 -21
- data/lib/page_magic/element_definition_builder.rb +20 -24
- data/lib/page_magic/elements.rb +65 -69
- data/lib/page_magic/elements/config.rb +103 -0
- data/lib/page_magic/elements/inheritance_hooks.rb +15 -0
- data/lib/page_magic/elements/types.rb +25 -0
- data/lib/page_magic/exceptions.rb +6 -1
- data/lib/page_magic/instance_methods.rb +8 -3
- data/lib/page_magic/mapping.rb +79 -0
- data/lib/page_magic/session.rb +15 -35
- data/lib/page_magic/session_methods.rb +3 -1
- data/lib/page_magic/transitions.rb +49 -0
- data/lib/page_magic/utils/string.rb +18 -0
- data/lib/page_magic/utils/url.rb +20 -0
- data/lib/page_magic/wait_methods.rb +3 -0
- data/lib/page_magic/watcher.rb +12 -17
- data/lib/page_magic/watchers.rb +31 -15
- data/page_magic.gemspec +15 -11
- data/spec/lib/active_support/core_ext/object/to_query_test.rb +78 -0
- data/spec/page_magic/class_methods_spec.rb +66 -37
- data/spec/page_magic/comparator/fuzzy_spec.rb +44 -0
- data/spec/page_magic/comparator/literal_spec.rb +41 -0
- data/spec/page_magic/comparator/null_spec.rb +35 -0
- data/spec/page_magic/comparator/parameter_map_spec.rb +75 -0
- data/spec/page_magic/driver_spec.rb +26 -28
- data/spec/page_magic/drivers/poltergeist_spec.rb +6 -7
- data/spec/page_magic/drivers/rack_test_spec.rb +6 -9
- data/spec/page_magic/drivers/selenium_spec.rb +11 -12
- data/spec/page_magic/drivers_spec.rb +38 -29
- data/spec/page_magic/element/locators_spec.rb +28 -25
- data/spec/page_magic/element/not_found_spec.rb +24 -0
- data/spec/page_magic/element/query/multiple_results_spec.rb +14 -0
- data/spec/page_magic/element/query/single_result_spec.rb +21 -0
- data/spec/page_magic/element/query_spec.rb +26 -45
- data/spec/page_magic/element/selector_spec.rb +120 -110
- data/spec/page_magic/element_context_spec.rb +47 -87
- data/spec/page_magic/element_definition_builder_spec.rb +14 -71
- data/spec/page_magic/element_spec.rb +256 -0
- data/spec/page_magic/elements/config_spec.rb +203 -0
- data/spec/page_magic/elements_spec.rb +90 -134
- data/spec/page_magic/instance_methods_spec.rb +65 -63
- data/spec/page_magic/mapping_spec.rb +181 -0
- data/spec/page_magic/session_methods_spec.rb +29 -25
- data/spec/page_magic/session_spec.rb +109 -199
- data/spec/page_magic/transitions_spec.rb +43 -0
- data/spec/page_magic/utils/string_spec.rb +29 -0
- data/spec/page_magic/utils/url_spec.rb +9 -0
- data/spec/page_magic/wait_methods_spec.rb +16 -22
- data/spec/page_magic/watcher_spec.rb +22 -0
- data/spec/page_magic/watchers_spec.rb +58 -62
- data/spec/page_magic_spec.rb +37 -29
- data/spec/spec_helper.rb +9 -2
- data/spec/support/shared_contexts.rb +3 -1
- data/spec/support/shared_examples.rb +17 -17
- metadata +101 -48
- data/lib/page_magic/element/query_builder.rb +0 -48
- data/lib/page_magic/element/selector_methods.rb +0 -13
- data/lib/page_magic/matcher.rb +0 -121
- data/spec/element_spec.rb +0 -249
- data/spec/page_magic/element/query_builder_spec.rb +0 -108
- data/spec/page_magic/matcher_spec.rb +0 -336
- data/spec/support/shared_contexts/files_context.rb +0 -7
- data/spec/support/shared_contexts/nested_elements_html_context.rb +0 -16
- data/spec/support/shared_contexts/rack_application_context.rb +0 -9
- data/spec/support/shared_contexts/webapp_fixture_context.rb +0 -39
- data/spec/watcher_spec.rb +0 -61
data/lib/page_magic/watchers.rb
CHANGED
|
@@ -1,32 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'watcher'
|
|
2
4
|
|
|
3
5
|
module PageMagic
|
|
4
6
|
# module Watchers - contains methods for adding watchers and checking them
|
|
5
7
|
module Watchers
|
|
6
|
-
ELEMENT_MISSING_MSG = 'Unable to defined watcher: Element or method with the name %s can not be found'
|
|
8
|
+
ELEMENT_MISSING_MSG = 'Unable to defined watcher: Element or method with the name %s can not be found'
|
|
7
9
|
|
|
8
10
|
# @param [Symbol] name - the name of the watcher
|
|
9
11
|
# @return [Boolean] true if a change is detected
|
|
10
12
|
def changed?(name)
|
|
11
13
|
watched_element = watcher(name)
|
|
12
|
-
watched_element.
|
|
14
|
+
watched_element.observed_value != watched_element.check.observed_value
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
# register a new watcher
|
|
16
|
-
# @
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
18
|
+
# @overload watch(:price, context: object, method: :text)
|
|
19
|
+
# @param [Symbol] name of the watcher/element
|
|
20
|
+
# @param [Object] context the object that is being watched - defaults to self
|
|
21
|
+
# @param [Symbol] method - the method on the watched element to check
|
|
22
|
+
# @overload watch(:text)
|
|
23
|
+
# @param [Symbol] method - the method on the watched element to check
|
|
24
|
+
# @overload watch(:text, &blk)
|
|
25
|
+
# @param [Symbol] name of the watcher/element
|
|
26
|
+
# @yieldreturn [Object] the value that should be checked
|
|
27
|
+
# @example
|
|
28
|
+
# watch(:something) do
|
|
23
29
|
# # more complicated code to get value
|
|
24
|
-
#
|
|
25
|
-
def watch(name, method
|
|
26
|
-
|
|
27
|
-
watched_element = block ? Watcher.new(name, &block) : Watcher.new(name, method)
|
|
30
|
+
# end
|
|
31
|
+
def watch(name, context: self, method: nil, &blk)
|
|
32
|
+
watcher = blk ? Watcher.new(name, context: context, &blk) : watch_method(name, context: context, method: method)
|
|
28
33
|
watchers.delete_if { |w| w.name == name }
|
|
29
|
-
watchers <<
|
|
34
|
+
watchers << watcher.check
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
# retrieve a watcher given its name
|
|
@@ -40,5 +45,16 @@ module PageMagic
|
|
|
40
45
|
def watchers
|
|
41
46
|
@watchers ||= []
|
|
42
47
|
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def watch_method(name, context:, method:)
|
|
52
|
+
subject = method || name
|
|
53
|
+
raise ElementMissingException, (ELEMENT_MISSING_MSG % subject) unless context.respond_to?(subject)
|
|
54
|
+
|
|
55
|
+
Watcher.new(name, context: context) do
|
|
56
|
+
public_send(subject)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
43
59
|
end
|
|
44
60
|
end
|
data/page_magic.gemspec
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: page_magic 1.2.
|
|
5
|
+
# stub: page_magic 1.2.9 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "page_magic"
|
|
9
|
-
s.version = "1.2.
|
|
9
|
+
s.version = "1.2.9"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
"Rakefile",
|
|
31
31
|
"VERSION",
|
|
32
32
|
"circle.yml",
|
|
33
|
+
"lib/active_support/core_ext/object/to_query.rb",
|
|
33
34
|
"lib/page_magic.rb",
|
|
34
35
|
"lib/page_magic/class_methods.rb",
|
|
35
36
|
"lib/page_magic/driver.rb",
|
|
@@ -51,11 +52,13 @@ Gem::Specification.new do |s|
|
|
|
51
52
|
"lib/page_magic/matcher.rb",
|
|
52
53
|
"lib/page_magic/session.rb",
|
|
53
54
|
"lib/page_magic/session_methods.rb",
|
|
55
|
+
"lib/page_magic/utils/string.rb",
|
|
54
56
|
"lib/page_magic/wait_methods.rb",
|
|
55
57
|
"lib/page_magic/watcher.rb",
|
|
56
58
|
"lib/page_magic/watchers.rb",
|
|
57
59
|
"page_magic.gemspec",
|
|
58
60
|
"spec/element_spec.rb",
|
|
61
|
+
"spec/lib/active_support/core_ext/object/to_query_test.rb",
|
|
59
62
|
"spec/page_magic/class_methods_spec.rb",
|
|
60
63
|
"spec/page_magic/driver_spec.rb",
|
|
61
64
|
"spec/page_magic/drivers/poltergeist_spec.rb",
|
|
@@ -73,6 +76,7 @@ Gem::Specification.new do |s|
|
|
|
73
76
|
"spec/page_magic/matcher_spec.rb",
|
|
74
77
|
"spec/page_magic/session_methods_spec.rb",
|
|
75
78
|
"spec/page_magic/session_spec.rb",
|
|
79
|
+
"spec/page_magic/utils/string_spec.rb",
|
|
76
80
|
"spec/page_magic/wait_methods_spec.rb",
|
|
77
81
|
"spec/page_magic/watchers_spec.rb",
|
|
78
82
|
"spec/page_magic_spec.rb",
|
|
@@ -95,30 +99,30 @@ Gem::Specification.new do |s|
|
|
|
95
99
|
s.specification_version = 4
|
|
96
100
|
|
|
97
101
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
102
|
+
s.add_runtime_dependency(%q<activesupport-inflector>, [">= 0"])
|
|
98
103
|
s.add_runtime_dependency(%q<capybara>, [">= 2.5"])
|
|
99
|
-
s.
|
|
104
|
+
s.add_development_dependency(%q<github-markup>, ["~> 1.4"])
|
|
100
105
|
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
|
106
|
+
s.add_development_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
101
107
|
s.add_development_dependency(%q<rubocop>, ["~> 0.34"])
|
|
102
108
|
s.add_development_dependency(%q<yard>, ["~> 0.8"])
|
|
103
|
-
s.add_development_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
104
|
-
s.add_development_dependency(%q<github-markup>, ["~> 1.4"])
|
|
105
109
|
else
|
|
110
|
+
s.add_dependency(%q<activesupport-inflector>, [">= 0"])
|
|
106
111
|
s.add_dependency(%q<capybara>, [">= 2.5"])
|
|
107
|
-
s.add_dependency(%q<
|
|
112
|
+
s.add_dependency(%q<github-markup>, ["~> 1.4"])
|
|
108
113
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
114
|
+
s.add_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
109
115
|
s.add_dependency(%q<rubocop>, ["~> 0.34"])
|
|
110
116
|
s.add_dependency(%q<yard>, ["~> 0.8"])
|
|
111
|
-
s.add_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
112
|
-
s.add_dependency(%q<github-markup>, ["~> 1.4"])
|
|
113
117
|
end
|
|
114
118
|
else
|
|
119
|
+
s.add_dependency(%q<activesupport-inflector>, [">= 0"])
|
|
115
120
|
s.add_dependency(%q<capybara>, [">= 2.5"])
|
|
116
|
-
s.add_dependency(%q<
|
|
121
|
+
s.add_dependency(%q<github-markup>, ["~> 1.4"])
|
|
117
122
|
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
123
|
+
s.add_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
118
124
|
s.add_dependency(%q<rubocop>, ["~> 0.34"])
|
|
119
125
|
s.add_dependency(%q<yard>, ["~> 0.8"])
|
|
120
|
-
s.add_dependency(%q<redcarpet>, ["~> 3.3"])
|
|
121
|
-
s.add_dependency(%q<github-markup>, ["~> 1.4"])
|
|
122
126
|
end
|
|
123
127
|
end
|
|
124
128
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'minitest'
|
|
4
|
+
Minitest.autorun
|
|
5
|
+
require 'active_support/core_ext/object/to_query'
|
|
6
|
+
|
|
7
|
+
class ToQueryTest < ::Minitest::Test
|
|
8
|
+
def test_simple_conversion
|
|
9
|
+
assert_query_equal 'a=10', a: 10
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_cgi_escaping
|
|
13
|
+
assert_query_equal 'a%3Ab=c+d', 'a:b' => 'c d'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_nil_parameter_value
|
|
17
|
+
empty = Object.new
|
|
18
|
+
def empty.to_param
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
assert_query_equal 'a=', 'a' => empty
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_nested_conversion
|
|
25
|
+
assert_query_equal 'person%5Blogin%5D=seckar&person%5Bname%5D=Nicholas',
|
|
26
|
+
person: Hash[:login, 'seckar', :name, 'Nicholas']
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_multiple_nested
|
|
30
|
+
assert_query_equal 'account%5Bperson%5D%5Bid%5D=20&person%5Bid%5D=10',
|
|
31
|
+
Hash[:account, { person: { id: 20 } }, :person, { id: 10 }]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_array_values
|
|
35
|
+
assert_query_equal 'person%5Bid%5D%5B%5D=10&person%5Bid%5D%5B%5D=20',
|
|
36
|
+
person: { id: [10, 20] }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_array_values_are_not_sorted
|
|
40
|
+
assert_query_equal 'person%5Bid%5D%5B%5D=20&person%5Bid%5D%5B%5D=10',
|
|
41
|
+
person: { id: [20, 10] }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_empty_array
|
|
45
|
+
assert_equal 'person%5B%5D=', [].to_query('person')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_nested_empty_hash
|
|
49
|
+
assert_equal '',
|
|
50
|
+
{}.to_query
|
|
51
|
+
assert_query_equal 'a=1&b%5Bc%5D=3',
|
|
52
|
+
a: 1, b: { c: 3, d: {} }
|
|
53
|
+
assert_query_equal '',
|
|
54
|
+
a: { b: { c: {} } }
|
|
55
|
+
assert_query_equal 'b%5Bc%5D=false&b%5Be%5D=&b%5Bf%5D=&p=12',
|
|
56
|
+
p: 12, b: { c: false, e: nil, f: '' }
|
|
57
|
+
assert_query_equal 'b%5Bc%5D=3&b%5Bf%5D=',
|
|
58
|
+
b: { c: 3, k: {}, f: '' }
|
|
59
|
+
assert_query_equal 'b=3',
|
|
60
|
+
a: [], b: 3
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_hash_with_namespace
|
|
64
|
+
hash = { name: 'Nakshay', nationality: 'Indian' }
|
|
65
|
+
assert_equal 'user%5Bname%5D=Nakshay&user%5Bnationality%5D=Indian', hash.to_query('user')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_hash_sorted_lexicographically
|
|
69
|
+
hash = { type: 'human', name: 'Nakshay' }
|
|
70
|
+
assert_equal 'name=Nakshay&type=human', hash.to_query
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def assert_query_equal(expected, actual)
|
|
76
|
+
assert_equal expected.split('&'), actual.to_query.split('&')
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -1,63 +1,92 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
RSpec.describe PageMagic::ClassMethods do
|
|
4
|
+
describe '#load' do
|
|
5
|
+
subject(:page_class) do
|
|
4
6
|
Class.new.tap do |clazz|
|
|
5
7
|
clazz.extend(described_class)
|
|
6
|
-
clazz.include(InstanceMethods)
|
|
8
|
+
clazz.include(PageMagic::InstanceMethods)
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<<-HTML
|
|
12
|
+
let(:page_title) { 'page title' }
|
|
13
|
+
let(:page_source) do
|
|
14
|
+
<<-HTML
|
|
14
15
|
<html>
|
|
15
16
|
<head><title>#{page_title}</title></head>
|
|
16
17
|
</html>
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
HTML
|
|
19
|
+
end
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
it 'returns an instance using that source' do
|
|
22
|
+
expect(page_class.load(page_source).title).to eq(page_title)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe 'on_load' do
|
|
27
|
+
subject(:page_class) do
|
|
28
|
+
Class.new.tap do |clazz|
|
|
29
|
+
clazz.extend(described_class)
|
|
22
30
|
end
|
|
23
31
|
end
|
|
24
32
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
expect(subject.on_load).to be(described_class::DEFAULT_ON_LOAD)
|
|
29
|
-
end
|
|
33
|
+
context 'when a block is not set' do
|
|
34
|
+
it 'returns a default block' do
|
|
35
|
+
expect(page_class.on_load).to be(described_class::DEFAULT_ON_LOAD)
|
|
30
36
|
end
|
|
37
|
+
end
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
end
|
|
39
|
+
context 'when a block is set' do
|
|
40
|
+
it 'returns that block' do
|
|
41
|
+
expected_block = proc {}
|
|
42
|
+
page_class.on_load(&expected_block)
|
|
43
|
+
expect(page_class.on_load).to be(expected_block)
|
|
38
44
|
end
|
|
39
45
|
end
|
|
46
|
+
end
|
|
40
47
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
describe '#url' do
|
|
49
|
+
subject(:page_class) do
|
|
50
|
+
Class.new.tap do |clazz|
|
|
51
|
+
clazz.extend(described_class)
|
|
45
52
|
end
|
|
46
53
|
end
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
options: {},
|
|
54
|
-
browser: :rack_test,
|
|
55
|
-
url: subject.url).and_call_original
|
|
55
|
+
it 'get/sets a value' do
|
|
56
|
+
page_class.url(:url)
|
|
57
|
+
expect(page_class.url).to eq(:url)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
describe '#visit' do
|
|
62
|
+
subject(:page_class) do
|
|
63
|
+
Class.new.tap do |clazz|
|
|
64
|
+
clazz.extend(described_class)
|
|
65
|
+
clazz.include(PageMagic::InstanceMethods)
|
|
66
|
+
clazz.url ''
|
|
67
|
+
end
|
|
68
|
+
end
|
|
58
69
|
|
|
59
|
-
|
|
70
|
+
let(:rack_app) do
|
|
71
|
+
Class.new do
|
|
72
|
+
def self.call(_env)
|
|
73
|
+
[200, {}, ['<html><head><title>page1</title></head></html>']]
|
|
74
|
+
end
|
|
60
75
|
end
|
|
61
76
|
end
|
|
77
|
+
|
|
78
|
+
it 'passes all options to create an active session on the registered url' do
|
|
79
|
+
allow(PageMagic).to receive(:session).and_call_original
|
|
80
|
+
|
|
81
|
+
page_class.visit(application: rack_app, options: {}, browser: :rack_test)
|
|
82
|
+
|
|
83
|
+
expected_option = { application: rack_app, options: {}, browser: :rack_test, url: page_class.url }
|
|
84
|
+
expect(PageMagic).to have_received(:session).with(expected_option)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'returns a session' do
|
|
88
|
+
session = page_class.visit(application: rack_app, options: {}, browser: :rack_test)
|
|
89
|
+
expect(session).to be_kind_of(PageMagic::Session)
|
|
90
|
+
end
|
|
62
91
|
end
|
|
63
92
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
RSpec.describe PageMagic::Comparator::Fuzzy do
|
|
2
|
+
describe '#fuzzy?' do
|
|
3
|
+
context 'when one value is fuzzy' do
|
|
4
|
+
it 'returns true' do
|
|
5
|
+
map = described_class.new(//)
|
|
6
|
+
expect(map).to be_fuzzy
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe 'match?' do
|
|
12
|
+
context 'when comparator contains the parameter' do
|
|
13
|
+
it 'returns true' do
|
|
14
|
+
expect(described_class.new(/f*o/)).to be_match('foo')
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context 'when comparator does not contains the parameter' do
|
|
19
|
+
it 'returns false' do
|
|
20
|
+
expect(described_class.new(/f*o/)).not_to be_match('bar')
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe '#<=>' do
|
|
26
|
+
context 'when other is `Null`' do
|
|
27
|
+
it 'is lesser' do
|
|
28
|
+
expect(described_class.new(//) <=> PageMagic::Comparator::Null.new).to be(-1)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'when other is `Fuzzy`' do
|
|
33
|
+
it 'is equal' do
|
|
34
|
+
expect(described_class.new(//) <=> described_class.new(//)).to be 0
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context 'when other is `Literal`' do
|
|
39
|
+
it 'is greater' do
|
|
40
|
+
expect(described_class.new(//) <=> PageMagic::Comparator::Literal.new('/')).to be 1
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
RSpec.describe PageMagic::Comparator::Literal do
|
|
2
|
+
describe 'match?' do
|
|
3
|
+
context 'when parameter is the same' do
|
|
4
|
+
it 'returns true' do
|
|
5
|
+
expect(described_class.new('/')).to be_match('/')
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context 'when it parameter is not the same' do
|
|
10
|
+
it 'returns false' do
|
|
11
|
+
expect(described_class.new('/')).not_to be_match('foo')
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '#fuzzy?' do
|
|
17
|
+
it 'returns false' do
|
|
18
|
+
expect(described_class.new('value')).not_to be_fuzzy
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe '#<=>' do
|
|
23
|
+
context 'when other is `Null`' do
|
|
24
|
+
it 'is greater' do
|
|
25
|
+
expect(described_class.new('/') <=> PageMagic::Comparator::Null.new).to be 1
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when other is `Fuzzy`' do
|
|
30
|
+
it 'is greater' do
|
|
31
|
+
expect(described_class.new('/') <=> PageMagic::Comparator::Fuzzy.new(//)).to be 1
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'when other is `Literal`' do
|
|
36
|
+
it 'is equal' do
|
|
37
|
+
expect(described_class.new('/') <=> described_class.new('/')).to be 0
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|