riot-gear 0.0.2 → 0.0.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -27,8 +27,12 @@ module Riot
27
27
  context.helper(:response) { @smoke_response }
28
28
  end # setup_faux_class
29
29
 
30
+ def action_methods
31
+ %w[get post put delete head options]
32
+ end
33
+
30
34
  def proxy_methods
31
- HTTParty::ClassMethods.instance_methods - %w[get post put delete head options]
35
+ HTTParty::ClassMethods.instance_methods - action_methods - ["default_options"]
32
36
  end
33
37
 
34
38
  # Basically, we're just passing standard HTTParty setup methods onto situation via hookups. Except
@@ -56,12 +60,13 @@ module Riot
56
60
  #
57
61
  # json_path(json_object, "a.b.c.d")
58
62
  # => "foo"
59
- # json_path(json_object, "a['b'].c['d']")
63
+ # json_path(json_object, "a['b'].c[d]")
60
64
  # => "foo"
61
65
  #
62
- # You can even work with array indexes.
66
+ # You can even work with array indexes
67
+ #
63
68
  # json_object = {"a" => {"b" => "c" => ["foo", {"d" => "bar"}]}}
64
- # json_path(json_object, "a.b.c[1].d")
69
+ # json_path(json_object, "a[b].c[1].d")
65
70
  # => "bar"
66
71
  def helper_json_path(context)
67
72
  context.helper(:json_path) do |dictionary, path|
@@ -72,12 +77,20 @@ module Riot
72
77
  end
73
78
  end
74
79
 
80
+ # Splits up the cookies found in the Set-Cookie header. I'm sure I could use HTTParty for this somehow,
81
+ # but this seemed just as straightforward. You will get back a hash of the
82
+ # {cookie-name => cookie-bits} pairs
83
+ #
84
+ # {
85
+ # "session_cookie" => {"value => "fooberries", "path" => "/", ...},
86
+ # "stupid_marketing_tricks" => {"value" => "personal-information", ...},
87
+ # ...
88
+ # }
75
89
  def helper_cookie_value(context)
76
90
  context.helper(:cookie_values) do
77
- response.header["set-cookie"].split(';').inject({}) do |hash, key_val|
78
- key, val = key_val.strip.split('=')
79
- hash[key] = val
80
- hash
91
+ response.header["set-cookie"].split("\n").inject({}) do |jar, cookie_str|
92
+ (name, value), *bits = cookie_str.split(/; ?/).map { |bit| bit.split('=') }
93
+ jar.merge!(name => bits.inject({"value" => value}) { |h, (k,v)| h.merge!(k => v) })
81
94
  end
82
95
  end
83
96
  end
data/riot-gear.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{riot-gear}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Justin 'Gus' Knowlden"]
12
- s.date = %q{2010-06-24}
12
+ s.date = %q{2010-07-06}
13
13
  s.description = %q{Riot + HTTParty smoke testing framework. You'd use it for integration testing with real HTTP requests and responses}
14
14
  s.email = %q{gus@gusg.us}
15
15
  s.extra_rdoc_files = [
@@ -29,7 +29,10 @@ Gem::Specification.new do |s|
29
29
  "lib/riot/gear/middleware.rb",
30
30
  "lib/riot/gear/middleware/riotparty.rb",
31
31
  "riot-gear.gemspec",
32
+ "test/helpers/cookie_values_test.rb",
32
33
  "test/helpers/json_path_test.rb",
34
+ "test/riotparty_proxy_methods_test.rb",
35
+ "test/setting_up_gear_context_test.rb",
33
36
  "test/teststrap.rb"
34
37
  ]
35
38
  s.homepage = %q{http://github.com/thumblemonks/riot-gear}
@@ -38,7 +41,10 @@ Gem::Specification.new do |s|
38
41
  s.rubygems_version = %q{1.3.6}
39
42
  s.summary = %q{Riot + HTTParty smoke testing framework}
40
43
  s.test_files = [
41
- "test/helpers/json_path_test.rb",
44
+ "test/helpers/cookie_values_test.rb",
45
+ "test/helpers/json_path_test.rb",
46
+ "test/riotparty_proxy_methods_test.rb",
47
+ "test/setting_up_gear_context_test.rb",
42
48
  "test/teststrap.rb"
43
49
  ]
44
50
 
@@ -0,0 +1,25 @@
1
+ require 'teststrap'
2
+ require 'ostruct'
3
+
4
+ context "The cookie_values helper" do
5
+ helper(:build_response) do |cookie_parts|
6
+ OpenStruct.new( {:header => {"set-cookie" => cookie_parts.join("\n")}} )
7
+ end
8
+
9
+ hookup do
10
+ @smoke_response = build_response([
11
+ "foo=12345; path=/; expires=never-ever;",
12
+ "goo=jam; path=/blue; expires=sometime-soon;",
13
+ ])
14
+ end
15
+
16
+ asserts("non-existent bar cookie") { cookie_values["bar"] }.nil
17
+
18
+ asserts("existing foo cookie") do
19
+ cookie_values["foo"]
20
+ end.equals({"value" => "12345", "path" => "/", "expires" => "never-ever"})
21
+
22
+ asserts("existing goo cookie") do
23
+ cookie_values["goo"]
24
+ end.equals({"value" => "jam", "path" => "/blue", "expires" => "sometime-soon"})
25
+ end # The cookie_values helper
@@ -0,0 +1,102 @@
1
+ require 'teststrap'
2
+
3
+ context "A Riot Gear context" do
4
+ # The magic to this whole thing is that if you modify RiotPartyMiddleware#proxy_httparty_hookups
5
+ # to not either not setup hookups for these HTTParty method calls or simply not define HTTParty methods
6
+ # on the context, these assertions will fail
7
+
8
+ %w[
9
+ base_uri headers cookies basic_auth digest_auth http_proxy format debug_output pem
10
+ default_timeout default_params no_follow maintain_method_across_redirects
11
+ ].each do |http_party_method|
12
+ asserts_topic.responds_to(http_party_method)
13
+ end
14
+
15
+ base_uri "http://example.com"
16
+ asserts("default options for base_uri") do
17
+ topic.default_options[:base_uri]
18
+ end.equals("http://example.com")
19
+
20
+ headers({"Content-Type" => "gus/stuff"})
21
+ asserts("default options headers") do
22
+ topic.default_options[:headers]
23
+ end.equals({"Content-Type" => "gus/stuff"})
24
+
25
+ cookies({"foo" => "bar"})
26
+ asserts("default cookies") { topic.default_cookies }.equals({"foo" => "bar"})
27
+
28
+ basic_auth "user", "pass"
29
+ asserts("default options for basic_auth") do
30
+ topic.default_options[:basic_auth]
31
+ end.equals({:username => "user", :password => "pass"})
32
+
33
+ digest_auth "user", "pass"
34
+ asserts("default options for digest_auth") do
35
+ topic.default_options[:digest_auth]
36
+ end.equals({:username => "user", :password => "pass"})
37
+
38
+ http_proxy "http://foo.bar", 10101
39
+ asserts("default options for http_proxyaddr") do
40
+ topic.default_options[:http_proxyaddr]
41
+ end.equals("http://foo.bar")
42
+
43
+ asserts("default options for http_proxyport") do
44
+ topic.default_options[:http_proxyport]
45
+ end.equals(10101)
46
+
47
+ format :json
48
+ asserts("default options for format") do
49
+ topic.default_options[:format]
50
+ end.equals(:json)
51
+
52
+ asserts("providing an invalid format") do
53
+ topic.format :boogers
54
+ end.raises(HTTParty::UnsupportedFormat, "':boogers' Must be one of: html, json, plain, xml, yaml")
55
+
56
+ debug_output StringIO.new
57
+ asserts("default options for debug_output") do
58
+ topic.default_options[:debug_output]
59
+ end.kind_of(StringIO)
60
+
61
+ pem "I like cheese"
62
+ asserts("default options for pem") do
63
+ topic.default_options[:pem]
64
+ end.equals("I like cheese")
65
+
66
+ asserts("setting custom parser that does not support a provided format") do
67
+ topic.default_options[:format] = :json
68
+ topic.parser(
69
+ Class.new do
70
+ def supports_format?(fmt) false; end
71
+ def supported_formats; [:nothing]; end
72
+ end.new
73
+ )
74
+ end.raises(HTTParty::UnsupportedFormat, "':json' Must be one of: nothing")
75
+
76
+ context "with a custom parser that supports a provided format" do
77
+ parser(OpenStruct.new(:supports_format? => true))
78
+
79
+ setup { topic.default_options[:parser] }
80
+ asserts_topic.kind_of(OpenStruct)
81
+ end # with a custom parser that supports a provided format
82
+
83
+ default_timeout 100000
84
+ asserts("default options for timeout") do
85
+ topic.default_options[:timeout]
86
+ end.equals(100000)
87
+
88
+ default_params({"foo" => "bar"})
89
+ asserts("default options for params") do
90
+ topic.default_options[:default_params]
91
+ end.equals({"foo" => "bar"})
92
+
93
+ no_follow
94
+ asserts("default options for no_follow") do
95
+ topic.default_options[:no_follow]
96
+ end.equals(false)
97
+
98
+ maintain_method_across_redirects
99
+ asserts("default options for maintain_method_across_redirects") do
100
+ topic.default_options[:maintain_method_across_redirects]
101
+ end.equals(true)
102
+ end # A Riot Gear context --- such as this very one :)
@@ -0,0 +1,30 @@
1
+ require 'teststrap'
2
+
3
+ context "Two distinct gear contexts" do
4
+ helper(:gear_up) do
5
+ situation = Riot::Situation.new
6
+ Riot::Context.new("A") {}.local_run(Riot::SilentReporter.new, situation)
7
+ situation
8
+ end
9
+
10
+ setup { gear_up.topic }
11
+ asserts_topic.kind_of(Class)
12
+ asserts("equivalence of the topic for similar contexts") { topic == gear_up.topic }.not!
13
+ end # Setting up a gear context
14
+
15
+ context "Gear context and its inner context" do
16
+ helper(:local_run) do |ctx|
17
+ situation = Riot::Situation.new
18
+ ctx.local_run(Riot::SilentReporter.new, situation)
19
+ situation
20
+ end
21
+
22
+ setup { Riot::Context.new("A") {} }
23
+
24
+ asserts("equivalence of the topic for similar contexts") do
25
+ parent_topic = local_run(topic).topic
26
+ child_topic = local_run(topic.context("B") {}).topic
27
+
28
+ parent_topic == child_topic
29
+ end.not!
30
+ end # Setting up a gear context
data/test/teststrap.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require 'pathname'
2
+
3
+ $:.unshift(Pathname(__FILE__).dirname + ".." + "lib")
4
+
1
5
  require 'rubygems'
2
6
  require 'riot'
3
7
  require 'webmock'
4
- require 'pathname'
5
8
 
6
9
  require 'riot/gear'
7
10
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Justin 'Gus' Knowlden
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-24 00:00:00 -05:00
17
+ date: 2010-07-06 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -75,7 +75,10 @@ files:
75
75
  - lib/riot/gear/middleware.rb
76
76
  - lib/riot/gear/middleware/riotparty.rb
77
77
  - riot-gear.gemspec
78
+ - test/helpers/cookie_values_test.rb
78
79
  - test/helpers/json_path_test.rb
80
+ - test/riotparty_proxy_methods_test.rb
81
+ - test/setting_up_gear_context_test.rb
79
82
  - test/teststrap.rb
80
83
  has_rdoc: true
81
84
  homepage: http://github.com/thumblemonks/riot-gear
@@ -108,5 +111,8 @@ signing_key:
108
111
  specification_version: 3
109
112
  summary: Riot + HTTParty smoke testing framework
110
113
  test_files:
114
+ - test/helpers/cookie_values_test.rb
111
115
  - test/helpers/json_path_test.rb
116
+ - test/riotparty_proxy_methods_test.rb
117
+ - test/setting_up_gear_context_test.rb
112
118
  - test/teststrap.rb