rspec-sitemap-matchers 0.0.1 → 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.
- data/README.md +5 -2
- data/lib/rspec/sitemap/matchers/include_url.rb +20 -3
- data/lib/rspec/sitemap/matchers/version.rb +1 -1
- data/spec/rspec/sitemap/matchers/include_url_spec.rb +32 -35
- data/spec/spec_helper.rb +1 -0
- data/spec/support/fixtures/sitemaps/with_valid_priority.xml +2 -0
- data/spec/support/shared_examples.rb +47 -0
- metadata +7 -5
data/README.md
CHANGED
@@ -44,10 +44,13 @@ These matchers can be used on `File`s, `String`s and any arbitary `IO` instance
|
|
44
44
|
The matchers also support more specific attribution matching, such as priorities as per the Sitemap protocol. These can be chained together:
|
45
45
|
|
46
46
|
it { should include_url('http://www.example.com').priority(0.5) }
|
47
|
+
it { should include_url('http://www.example.com').changefreq('weekly') }
|
48
|
+
it { should include_url('http://www.example.com').lastmod('2012-07-16T19:20+01:00') }
|
49
|
+
|
50
|
+
Note: You can chanin multiple attribute matchers together, like `.lastod('…').changefreq('…')` etc.
|
47
51
|
|
48
52
|
## Planned features
|
49
53
|
|
50
|
-
* More chainable attribute modifiers, such as `lastmod` and `changefreq`
|
51
54
|
* Stricter markup and structure validation
|
52
55
|
* Encoding validation matcher (Sitemaps must be UTF-8 encoded)
|
53
56
|
* `be_a_valid_sitemap` matcher
|
@@ -64,4 +67,4 @@ The matchers also support more specific attribution matching, such as priorities
|
|
64
67
|
|
65
68
|
## Copyright
|
66
69
|
|
67
|
-
Copyright © 2012 Attila Györffy
|
70
|
+
Copyright © 2012 Attila Györffy, [Unboxed Consulting](http://www.unboxedconsulting.com) and [contributors](http://github.com/unboxed/rspec-sitemap-matchers/graphs/contributors). See LICENSE for details.
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module RSpec::Sitemap::Matchers
|
2
2
|
class IncludeUrl
|
3
|
+
|
4
|
+
ALLOWED_ATTRS = %w(priority changefreq lastmod)
|
5
|
+
|
3
6
|
def initialize(expected_location)
|
4
7
|
@expected_location = expected_location
|
5
8
|
end
|
@@ -29,7 +32,21 @@ module RSpec::Sitemap::Matchers
|
|
29
32
|
self
|
30
33
|
end
|
31
34
|
|
32
|
-
|
35
|
+
def lastmod(expected_lastmod)
|
36
|
+
expected_attributes.merge!(:lastmod => expected_lastmod)
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
def changefreq(expected_changefreq)
|
41
|
+
expected_attributes.merge!(:changefreq => expected_changefreq)
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
ALLOWED_ATTRS.each do |attr|
|
46
|
+
alias_method "with_#{attr}".to_sym, attr.to_sym
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
33
50
|
|
34
51
|
def expected_attributes
|
35
52
|
@expected_attributes ||= {}
|
@@ -43,8 +60,8 @@ module RSpec::Sitemap::Matchers
|
|
43
60
|
|
44
61
|
def matched_attributes
|
45
62
|
attributes = {}
|
46
|
-
matched_node.
|
47
|
-
attributes[node.name.to_sym] = node.text
|
63
|
+
unless matched_node.nil?
|
64
|
+
matched_node.children.each { |node| attributes[node.name.to_sym] = node.text }
|
48
65
|
end
|
49
66
|
attributes
|
50
67
|
end
|
@@ -6,20 +6,6 @@ module RSpec::Sitemap::Matchers
|
|
6
6
|
|
7
7
|
describe "#matches?" do
|
8
8
|
|
9
|
-
shared_examples_for "a matcher that passes or fails" do
|
10
|
-
it "passes" do
|
11
|
-
sitemap.should include_url('http://www.example.com')
|
12
|
-
end
|
13
|
-
|
14
|
-
it "fails" do
|
15
|
-
expect {
|
16
|
-
sitemap.should include_url('http://www.not-an-example.com')
|
17
|
-
}.to raise_error { |error|
|
18
|
-
error.message.should match("to include a URL to http://www.not-an-example.com")
|
19
|
-
}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
9
|
context "on a File" do
|
24
10
|
it_should_behave_like "a matcher that passes or fails" do
|
25
11
|
let(:sitemap) { fixture('basic') }
|
@@ -43,32 +29,43 @@ module RSpec::Sitemap::Matchers
|
|
43
29
|
end
|
44
30
|
end
|
45
31
|
|
32
|
+
describe "#failure_message" do
|
33
|
+
|
34
|
+
let(:sitemap) { fixture('basic').read }
|
35
|
+
|
36
|
+
it "should not raise error when attributes are queried on missing url" do
|
37
|
+
expect {
|
38
|
+
# not included url
|
39
|
+
sitemap.should include_url('http://www.example.org').priority(0.5)
|
40
|
+
}.to_not raise_error NoMethodError
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
46
44
|
describe "#priority" do
|
47
|
-
context "when it is set" do
|
48
|
-
let(:sitemap) { fixture('with_valid_priority') }
|
49
|
-
it "passes" do
|
50
|
-
sitemap.should include_url('http://www.example.com').priority('0.5')
|
51
|
-
end
|
52
45
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
}.to raise_error { |error|
|
57
|
-
error.message.should match('to include a URL to http://www.example.com with a priority of 0.8 but it was set to 0.5')
|
58
|
-
}
|
59
|
-
end
|
46
|
+
it_should_behave_like "an attribute matcher", "priority", 0.5, 0.8 do
|
47
|
+
let(:passing_sitemap) { fixture('with_valid_priority') }
|
48
|
+
let(:failing_sitemap) { fixture('basic') }
|
60
49
|
end
|
61
50
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
}
|
70
|
-
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#changefreq" do
|
54
|
+
|
55
|
+
it_should_behave_like "an attribute matcher", "changefreq", "weekly", "daily" do
|
56
|
+
let(:passing_sitemap) { fixture('with_valid_priority') }
|
57
|
+
let(:failing_sitemap) { fixture('basic') }
|
71
58
|
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#lastmod" do
|
63
|
+
|
64
|
+
it_should_behave_like "an attribute matcher", "lastmod", "2012-11-27T16:40:53+01:00", "not prova" do
|
65
|
+
let(:passing_sitemap) { fixture('with_valid_priority') }
|
66
|
+
let(:failing_sitemap) { fixture('basic') }
|
67
|
+
end
|
68
|
+
|
72
69
|
end
|
73
70
|
end
|
74
71
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
shared_examples_for "a matcher that passes or fails" do
|
2
|
+
it "passes" do
|
3
|
+
sitemap.should include_url('http://www.example.com')
|
4
|
+
end
|
5
|
+
|
6
|
+
it "fails" do
|
7
|
+
expect {
|
8
|
+
sitemap.should include_url('http://www.not-an-example.com')
|
9
|
+
}.to raise_error { |error|
|
10
|
+
error.message.should match("to include a URL to http://www.not-an-example.com")
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
shared_examples_for "an attribute matcher" do |attribute, expected, not_expected|
|
16
|
+
|
17
|
+
context "when #{attribute} is set" do
|
18
|
+
|
19
|
+
it "passes" do
|
20
|
+
passing_sitemap.should include_url('http://www.example.com').send(attribute, expected)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "passes when invoked with with_ syntax" do
|
24
|
+
passing_sitemap.should include_url('http://www.example.com').send("with_#{attribute}", expected)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "fails" do
|
28
|
+
expect {
|
29
|
+
passing_sitemap.should include_url('http://www.example.com').send(attribute, not_expected)
|
30
|
+
}.to raise_error { |error|
|
31
|
+
error.message.should include("to include a URL to http://www.example.com with a #{attribute} of #{not_expected} but it was set to #{expected}")
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when #{attribute} is NOT set" do
|
37
|
+
|
38
|
+
it "fails" do
|
39
|
+
expect {
|
40
|
+
failing_sitemap.should include_url('http://www.example.com').send(attribute, expected)
|
41
|
+
}.to raise_error { |error|
|
42
|
+
error.message.should include("to include a URL to http://www.example.com with a #{attribute} of #{expected} but the #{attribute} was not set")
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-sitemap-matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- spec/support/fixture_helper.rb
|
82
82
|
- spec/support/fixtures/sitemaps/basic.xml
|
83
83
|
- spec/support/fixtures/sitemaps/with_valid_priority.xml
|
84
|
+
- spec/support/shared_examples.rb
|
84
85
|
homepage: http://github.com/unboxed/rspec-sitemap-matchers
|
85
86
|
licenses: []
|
86
87
|
post_install_message:
|
@@ -95,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
96
|
version: '0'
|
96
97
|
segments:
|
97
98
|
- 0
|
98
|
-
hash:
|
99
|
+
hash: 292912089253574170
|
99
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
101
|
none: false
|
101
102
|
requirements:
|
@@ -104,10 +105,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
105
|
version: '0'
|
105
106
|
segments:
|
106
107
|
- 0
|
107
|
-
hash:
|
108
|
+
hash: 292912089253574170
|
108
109
|
requirements: []
|
109
110
|
rubyforge_project:
|
110
|
-
rubygems_version: 1.8.
|
111
|
+
rubygems_version: 1.8.23
|
111
112
|
signing_key:
|
112
113
|
specification_version: 3
|
113
114
|
summary: Sitemap protocol matchers for RSpec
|
@@ -117,3 +118,4 @@ test_files:
|
|
117
118
|
- spec/support/fixture_helper.rb
|
118
119
|
- spec/support/fixtures/sitemaps/basic.xml
|
119
120
|
- spec/support/fixtures/sitemaps/with_valid_priority.xml
|
121
|
+
- spec/support/shared_examples.rb
|