assert-url 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/README.md +62 -0
- data/assert_url.gemspec +1 -1
- data/lib/assert_url.rb +34 -9
- data/test/assert_url_test.rb +40 -24
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDY2MTI0ZTRmY2NiYWE1MjA0M2RkYWU4Y2MxZDc3YTQ2ZTgyMDhiYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTRkNDAzMTU3ZjAxMjkyNTQ2YzQ4NWU1ZGE3NDdhMGM3NTIwNzE0Mw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDY3OGY4ZTFmOTU4MzBmYmRlOTQxZWRjYzUyMDYwMjQyNjJjOTc0ZmFmNjUy
|
10
|
+
Y2ZmYzE1MTcxYjQzNmMxOWZmMmMzOGQ4NjUwZDAxOGQ0YTUwYzA5Y2RlZDMx
|
11
|
+
NDUyMTgxM2QxYTQ4M2U3NGM2M2FjYjYzYzhhOWY1ZGM5MWEyODA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODZjYThmNzAwM2RlYmNiNzdhZjM2NmIwNTNkZTM3NjZhOTU5Nzg4MDVjODNk
|
14
|
+
NDZhMjcyNTkxYjQzZDMzNDk0NDgxMGE2ZDZlYmNkMmYyZThjOTIzZWNlZTZl
|
15
|
+
ZDcyZjc5MDg0NThiZTg0NjIzNmFjYjA4NThhNzUzZGI1NTA4YTI=
|
data/README.md
CHANGED
@@ -2,3 +2,65 @@ assert-url
|
|
2
2
|
==========
|
3
3
|
|
4
4
|
Semantical helpers to test your URLs in Ruby
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
Ok, say you're writing a Web app with Ruby (who isn't?) and need to test your routing with `Rack::Test`.
|
9
|
+
|
10
|
+
### The old way
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
def test_some_resource
|
14
|
+
get "/some/resource"
|
15
|
+
|
16
|
+
assert last_response.ok?
|
17
|
+
assert_equal "http://example.org/some/resource", last_response.url
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
What's wrong with this, you ask? Well, in most cases when you write a test like this, you only care about testing the `/some/resource` path, but the rest (scheme, port, etc) doesn't really matter. Still we're used to use `assert_equal` on the whole url.
|
22
|
+
|
23
|
+
Now imagine that you need to change the port, scheme or host. Now imagine you have hundreds of tests. It's `grep` day, my friend.
|
24
|
+
|
25
|
+
### Enter AssertUrl!
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
include AssertUrl
|
29
|
+
|
30
|
+
def test_some_resource
|
31
|
+
get "/some/resource"
|
32
|
+
|
33
|
+
assert last_response.ok?
|
34
|
+
assert_path_equal "/some/resource", last_response.url
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
BAM! Now you're only testing what you need. You can change the port, host, even the query and the test will be fine.
|
39
|
+
|
40
|
+
`AssertUrl` provides the following assertions in the form of `expected, value`:
|
41
|
+
* `assert_scheme_equal [String or Symbol], [String or URI]`
|
42
|
+
* `assert_host_equal [String], [String or URI]`
|
43
|
+
* `assert_port_equal [Integer], [String or URI]`
|
44
|
+
* `assert_path_equal [String starting with "/"], [String or URI]`
|
45
|
+
* `assert_query_equal [Hash], [String or URI]`
|
46
|
+
* `assert_query_include [Hash], [String or URI]`
|
47
|
+
* `assert_fragment_equal [String], [String or URI]`
|
48
|
+
* `assert_url_equal [String or URI], [String or URI]`
|
49
|
+
|
50
|
+
### But...
|
51
|
+
|
52
|
+
Can't I just do something like...?
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
assert_equal "/some/resource", URI(last_response.url).path
|
56
|
+
```
|
57
|
+
|
58
|
+
Well, yes! sure you can. In fact, this is very close to how `AssertUrl` is implemented.
|
59
|
+
|
60
|
+
My point here is not to sell you this gem but to make a statement that we need a better habit when testing URLs. And if `AssertUrl` helps you with it, great!
|
61
|
+
|
62
|
+
## Installation
|
63
|
+
|
64
|
+
```
|
65
|
+
gem install assert-url
|
66
|
+
```
|
data/assert_url.gemspec
CHANGED
data/lib/assert_url.rb
CHANGED
@@ -1,29 +1,54 @@
|
|
1
1
|
require "uri"
|
2
2
|
|
3
3
|
module AssertUrl
|
4
|
-
PARTS = %W[scheme host port path query]
|
4
|
+
PARTS = %W[scheme host port path query fragment]
|
5
5
|
|
6
6
|
PARTS.each do |part|
|
7
7
|
error = const_set("#{part.capitalize}Error", Class.new(StandardError))
|
8
8
|
|
9
|
-
define_method(:"assert_#{part}") do |expected, value|
|
10
|
-
expected
|
9
|
+
define_method(:"assert_#{part}_equal") do |expected, value|
|
10
|
+
expected = normalize(part, expected)
|
11
|
+
value = urify(value).send(part.to_sym)
|
11
12
|
|
12
13
|
expected == value || (raise error, "expected #{expected}, got #{value}")
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
def assert_url_equal(expected, value)
|
18
|
+
expected, value = urify(expected), urify(value)
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
+
PARTS.map { |part| send(:"assert_#{part}_equal", expected.send(part.to_sym), value) }.reduce(:&)
|
21
|
+
end
|
22
|
+
|
23
|
+
def assert_query_include(expected, value)
|
24
|
+
value = Hash[URI.decode_www_form(urify(value).query)]
|
25
|
+
|
26
|
+
includes?(expected.to_a, value) || (raise QueryError, "expected #{value} to include #{expected}")
|
27
|
+
end
|
20
28
|
|
21
|
-
|
29
|
+
def includes?(expected, got)
|
30
|
+
expected.all? do |(key, value)|
|
31
|
+
key = key.to_s
|
32
|
+
got.has_key?(key) && got[key] == value
|
33
|
+
end
|
22
34
|
end
|
35
|
+
private :includes?
|
23
36
|
|
24
|
-
def urify(
|
25
|
-
|
37
|
+
def urify(arg)
|
38
|
+
arg.kind_of?(URI) ? arg : URI(arg)
|
26
39
|
end
|
27
40
|
private :urify
|
41
|
+
|
42
|
+
def normalize(part, expected)
|
43
|
+
case part
|
44
|
+
when "scheme"
|
45
|
+
expected.kind_of?(Symbol) ? expected.to_s : expected
|
46
|
+
when "query"
|
47
|
+
URI.encode_www_form(expected) rescue expected
|
48
|
+
else
|
49
|
+
expected
|
50
|
+
end
|
51
|
+
end
|
52
|
+
private :normalize
|
28
53
|
end
|
29
54
|
|
data/test/assert_url_test.rb
CHANGED
@@ -5,54 +5,70 @@ require_relative "../lib/assert_url"
|
|
5
5
|
include AssertUrl
|
6
6
|
|
7
7
|
setup do
|
8
|
-
"http://sub.example.org:8080/path/to/resource?foo=bar"
|
8
|
+
"http://sub.example.org:8080/path/to/resource?foo=bar#fragment"
|
9
9
|
end
|
10
10
|
|
11
|
-
test "
|
12
|
-
assert
|
13
|
-
|
14
|
-
assert_raise do
|
15
|
-
assert_scheme("https://example.org", url)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
test "assert_scheme" do |url|
|
20
|
-
assert assert_scheme("http://example.org", url)
|
11
|
+
test "assert_scheme_equal" do |url|
|
12
|
+
assert assert_scheme_equal("http", url)
|
13
|
+
assert assert_scheme_equal(:http, url)
|
21
14
|
|
22
15
|
assert_raise(AssertUrl::SchemeError) do
|
23
|
-
|
16
|
+
assert_scheme_equal("ftp", url)
|
24
17
|
end
|
25
18
|
end
|
26
19
|
|
27
|
-
test "
|
28
|
-
assert
|
20
|
+
test "assert_host_equal" do |url|
|
21
|
+
assert assert_host_equal("sub.example.org", url)
|
29
22
|
|
30
23
|
assert_raise(AssertUrl::HostError) do
|
31
|
-
|
24
|
+
assert_host_equal("example.org", url)
|
32
25
|
end
|
33
26
|
end
|
34
27
|
|
35
|
-
test "
|
36
|
-
assert
|
28
|
+
test "assert_port_equal" do |url|
|
29
|
+
assert assert_port_equal(8080, url)
|
37
30
|
|
38
31
|
assert_raise(AssertUrl::PortError) do
|
39
|
-
|
32
|
+
assert_port_equal(80, url)
|
40
33
|
end
|
41
34
|
end
|
42
35
|
|
43
|
-
test "
|
44
|
-
assert
|
36
|
+
test "assert_path_equal" do |url|
|
37
|
+
assert assert_path_equal("/path/to/resource", url)
|
45
38
|
|
46
39
|
assert_raise(AssertUrl::PathError) do
|
47
|
-
|
40
|
+
assert_path_equal("/not/the/resource", url)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
test "assert_query_equal" do |url|
|
45
|
+
assert assert_query_equal({foo: "bar"}, url)
|
46
|
+
|
47
|
+
assert_raise(AssertUrl::QueryError) do
|
48
|
+
assert_query_equal("", url)
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
51
|
-
test "
|
52
|
-
assert
|
52
|
+
test "assert_query_include" do
|
53
|
+
assert assert_query_include({foo: "bar"}, "http://example.org/?foo=bar&baz=wat")
|
53
54
|
|
54
55
|
assert_raise(AssertUrl::QueryError) do
|
55
|
-
|
56
|
+
assert_query_include({foo: "wat"}, "http://example.org/?foo=bar&baz=wat")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
test "assert_fragment_equal" do |url|
|
61
|
+
assert assert_fragment_equal("fragment", url)
|
62
|
+
|
63
|
+
assert_raise(AssertUrl::FragmentError) do
|
64
|
+
assert_fragment_equal("not", url)
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
68
|
+
test "assert_url_equal" do |url|
|
69
|
+
assert assert_url_equal(url, url)
|
70
|
+
|
71
|
+
assert_raise do
|
72
|
+
assert_url_equal("https://example.org", url)
|
73
|
+
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert-url
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Tolchinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cutest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
description: Semantical helpers to test your URLs in Ruby
|
@@ -46,17 +46,17 @@ require_paths:
|
|
46
46
|
- lib
|
47
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
|
-
- -
|
49
|
+
- - ! '>='
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '0'
|
52
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ! '>='
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project:
|
59
|
-
rubygems_version: 2.2.
|
59
|
+
rubygems_version: 2.2.2
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: Semantical helpers to test your URLs in Ruby
|