orderly 0.1.0 → 0.1.1
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/README.md +33 -8
- data/lib/orderly.rb +22 -7
- data/lib/orderly/version.rb +1 -1
- data/spec/lib/orderly_spec.rb +44 -0
- data/spec/test_app.rb +38 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b7a52ca99c21471d257d31243449fe036db51c784d0dfd22b01ff96397fe00d
|
4
|
+
data.tar.gz: 9abdc383f871e3c53d8af0c3949f9f5de2762f03b41c37697579d542c93805e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58409a784670ceed76d638d35465cc1f2c5ecf83e48955772347b889ea5a73034d348bda45fb1f12b75b8f16282039ff99286041f7b898c10f153d1ef4a0f73c
|
7
|
+
data.tar.gz: d13c0ed1d8fbef1701afaf853f58545db4ff3cc930109c4c11917d4132cc624862de3edcaccba62e20500a9a0a63adf7a54b052994d5ff9f3bdb10c53d152890
|
data/README.md
CHANGED
@@ -20,19 +20,44 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
In an rspec request spec, do
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
```ruby
|
24
|
+
let(:this) { "<li>Andrea</li>" }
|
25
|
+
let(:that) { "<li>Luis</li>" }
|
26
26
|
|
27
|
-
|
27
|
+
expect(this).to appear_before(that)
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
# or use capybara elements
|
30
|
+
this = find('.this')
|
31
|
+
that = find('.that')
|
32
32
|
|
33
|
-
|
33
|
+
expect(this).to appear_before(that)
|
34
|
+
```
|
35
|
+
|
36
|
+
To assert that something does not appear before
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
expect(this).to_not appear_before(that)
|
40
|
+
```
|
41
|
+
|
42
|
+
By default, `appear_before` matches against HTML. If you want to only compare text, use the `only_text`-option:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
# <dl>
|
46
|
+
# <dt>First name:</dt>
|
47
|
+
# <dd>Andrea</dt>
|
48
|
+
#
|
49
|
+
# <dt>Last name:</dt>
|
50
|
+
# <dd>Robbinovich</dt>
|
51
|
+
# </dl>
|
52
|
+
|
53
|
+
expect("First name: Andrea").to appear_before("Last name: Robbinovich", only_text: true)
|
54
|
+
```
|
34
55
|
|
35
56
|
## Changelog
|
57
|
+
### 0.1.1 (2020-02-20)
|
58
|
+
- Add support for `only_text`-option
|
59
|
+
- Add support for using capybara nodes
|
60
|
+
|
36
61
|
### 0.1.0 (2019-08-08)
|
37
62
|
- Add support for capybara `within`-blocks
|
38
63
|
|
data/lib/orderly.rb
CHANGED
@@ -2,12 +2,13 @@ require "orderly/version"
|
|
2
2
|
require "rspec/expectations"
|
3
3
|
|
4
4
|
module Orderly
|
5
|
-
RSpec::Matchers.define :appear_before do |later_content|
|
5
|
+
RSpec::Matchers.define :appear_before do |later_content, only_text: false|
|
6
6
|
match do |earlier_content|
|
7
7
|
begin
|
8
8
|
node = page.respond_to?(:current_scope) ? page.current_scope : page.send(:current_node)
|
9
|
-
|
10
|
-
|
9
|
+
data = only_text ? text_for_node(node) : html_for_node(node)
|
10
|
+
|
11
|
+
data.index(extract_content(earlier_content)) < data.index(extract_content(later_content))
|
11
12
|
rescue ArgumentError
|
12
13
|
raise "Could not locate later content on page: #{later_content}"
|
13
14
|
rescue NoMethodError
|
@@ -17,12 +18,26 @@ module Orderly
|
|
17
18
|
|
18
19
|
def html_for_node(node)
|
19
20
|
if node.is_a?(Capybara::Node::Document)
|
20
|
-
|
21
|
-
elsif node.native.respond_to?(:
|
22
|
-
node.native.
|
21
|
+
html_for_node(node.find(:xpath, '//body'))
|
22
|
+
elsif node.native.respond_to?(:to_html)
|
23
|
+
node.native.to_html
|
23
24
|
else
|
24
|
-
|
25
|
+
node.evaluate_script("this.outerHTML")
|
25
26
|
end
|
26
27
|
end
|
28
|
+
|
29
|
+
def extract_content(node)
|
30
|
+
if node.is_a?(String)
|
31
|
+
node
|
32
|
+
else
|
33
|
+
html_for_node(node)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def text_for_node(node)
|
38
|
+
# NOTE: we need to normalize spaces due to differences between rack-test
|
39
|
+
# and headless chrome.
|
40
|
+
node.text.gsub(/[[:space:]]+/, ' ').strip
|
41
|
+
end
|
27
42
|
end
|
28
43
|
end
|
data/lib/orderly/version.rb
CHANGED
data/spec/lib/orderly_spec.rb
CHANGED
@@ -50,5 +50,49 @@ describe Orderly do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
context "when only_text option is passed" do
|
55
|
+
context "when that is equal to option from HTML" do
|
56
|
+
let(:this) { "ability" }
|
57
|
+
let(:that) { "option" }
|
58
|
+
|
59
|
+
it "asserts this is before that" do
|
60
|
+
page.visit "/options"
|
61
|
+
|
62
|
+
expect(this).to appear_before(that, only_text: true)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when text is split in HTML" do
|
67
|
+
let(:this) { "First name: Andrea" }
|
68
|
+
let(:that) { "Last name: Robbinovich" }
|
69
|
+
|
70
|
+
it "asserts this is before that" do
|
71
|
+
page.visit "/description-list"
|
72
|
+
|
73
|
+
expect(this).to appear_before(that, only_text: true)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when a capybara element is passed" do
|
79
|
+
it "asserts that the first capybara element appears before the second" do
|
80
|
+
page.visit "/elements-with-ids"
|
81
|
+
div1 = page.find("#div-1")
|
82
|
+
div2 = page.find("#div-2")
|
83
|
+
|
84
|
+
expect(div1).to appear_before(div2)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "when the page returns tags without closing forward slashes" do
|
89
|
+
it "normalizes those tags" do
|
90
|
+
page.visit "/response-with-unclosed-tag"
|
91
|
+
img1 = page.find("#img-1")
|
92
|
+
img2 = page.find("#img-2")
|
93
|
+
|
94
|
+
expect(img1).to appear_before(img2)
|
95
|
+
end
|
96
|
+
end
|
53
97
|
end
|
54
98
|
end
|
data/spec/test_app.rb
CHANGED
@@ -25,12 +25,48 @@ class TestApp < Sinatra::Base
|
|
25
25
|
end
|
26
26
|
|
27
27
|
get '/thatthisthatthis' do
|
28
|
-
|
28
|
+
<<-HTML
|
29
|
+
#{that}
|
29
30
|
<div class='outer-div'>
|
30
31
|
#{this}
|
31
32
|
<div class='inner-div'>
|
32
33
|
#{that + this}
|
33
34
|
</div>
|
34
|
-
</div>
|
35
|
+
</div>
|
36
|
+
HTML
|
37
|
+
end
|
38
|
+
|
39
|
+
get '/options' do
|
40
|
+
<<-HTML
|
41
|
+
<select>
|
42
|
+
<option>ability</option>
|
43
|
+
<option>option</option>
|
44
|
+
</select>
|
45
|
+
HTML
|
46
|
+
end
|
47
|
+
|
48
|
+
get '/description-list' do
|
49
|
+
<<-HTML
|
50
|
+
<dl>
|
51
|
+
<dt>First name:</dt>
|
52
|
+
<dd>Andrea</dt>
|
53
|
+
<dt>Last name:</dt>
|
54
|
+
<dd>Robbinovich</dt>
|
55
|
+
</dl>
|
56
|
+
HTML
|
57
|
+
end
|
58
|
+
|
59
|
+
get '/elements-with-ids' do
|
60
|
+
<<-HTML
|
61
|
+
<div id="div-1">Foo</div>
|
62
|
+
<div id="div-2">Bar</div>
|
63
|
+
HTML
|
64
|
+
end
|
65
|
+
|
66
|
+
get '/response-with-unclosed-tag' do
|
67
|
+
<<-HTML
|
68
|
+
<img id="img-1" src="https://i.picsum.photos/id/1082/200/300.jpg">
|
69
|
+
<img id="img-2" src="https://i.picsum.photos/id/1082/200/300.jpg" />
|
70
|
+
HTML
|
35
71
|
end
|
36
72
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orderly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Gesimondo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
requirements: []
|
155
|
-
rubygems_version: 3.
|
155
|
+
rubygems_version: 3.1.2
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Assert this is before that
|