superdupe 0.4.0 → 0.5.0
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.markdown +37 -1
- data/lib/superdupe/active_resource_extensions.rb +2 -1
- data/lib/superdupe/dupe.rb +15 -14
- data/lib/superdupe/mock.rb +6 -2
- data/lib/superdupe/record.rb +7 -1
- data/spec/lib_specs/active_resource_extensions_spec.rb +78 -114
- data/spec/spec_helper.rb +1 -1
- metadata +4 -36
- data/spec/lib_specs/attribute_template_spec.rb +0 -173
- data/spec/lib_specs/database_spec.rb +0 -163
- data/spec/lib_specs/dupe_spec.rb +0 -522
- data/spec/lib_specs/hash_pruner_spec.rb +0 -73
- data/spec/lib_specs/log_spec.rb +0 -78
- data/spec/lib_specs/logged_request_spec.rb +0 -22
- data/spec/lib_specs/mock_definitions_spec.rb +0 -58
- data/spec/lib_specs/mock_spec.rb +0 -194
- data/spec/lib_specs/model_spec.rb +0 -95
- data/spec/lib_specs/network_spec.rb +0 -130
- data/spec/lib_specs/record_spec.rb +0 -70
- data/spec/lib_specs/rest_validation_spec.rb +0 -17
- data/spec/lib_specs/schema_spec.rb +0 -109
- data/spec/lib_specs/sequence_spec.rb +0 -39
- data/spec/lib_specs/string_spec.rb +0 -31
- data/spec/lib_specs/symbol_spec.rb +0 -17
@@ -1,73 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe HashPruner do
|
4
|
-
describe "#prune" do
|
5
|
-
it "should nil out any repeated hashes" do
|
6
|
-
clarke = {:name => "Arthur C. Clarke"}
|
7
|
-
heinlein = {:name => "Robert Heinlein"}
|
8
|
-
sci_fi = {:name => "Science Fiction", :authors => [clarke, heinlein]}
|
9
|
-
clarke[:genre] = sci_fi
|
10
|
-
odyssey = {:name => "2001", :genre => sci_fi, :author => clarke}
|
11
|
-
hoag = {:name => "the unpleasant profession", :genre => sci_fi, :author => heinlein}
|
12
|
-
clarke[:books] = [odyssey]
|
13
|
-
heinlein[:books] = [hoag]
|
14
|
-
|
15
|
-
HashPruner.prune(clarke).should ==
|
16
|
-
{
|
17
|
-
:name=>"Arthur C. Clarke",
|
18
|
-
:genre => {
|
19
|
-
:name => "Science Fiction",
|
20
|
-
:authors => [
|
21
|
-
{
|
22
|
-
:name=>"Arthur C. Clarke"
|
23
|
-
},
|
24
|
-
{
|
25
|
-
:name=>"Robert Heinlein",
|
26
|
-
:books=> [
|
27
|
-
{
|
28
|
-
:name => "the unpleasant profession",
|
29
|
-
:genre => {
|
30
|
-
:name => "Science Fiction"
|
31
|
-
},
|
32
|
-
:author => {
|
33
|
-
:name => "Robert Heinlein"
|
34
|
-
}
|
35
|
-
}
|
36
|
-
]
|
37
|
-
}
|
38
|
-
]
|
39
|
-
},
|
40
|
-
:books=> [
|
41
|
-
{
|
42
|
-
:name => "2001",
|
43
|
-
:genre => {
|
44
|
-
:name => "Science Fiction",
|
45
|
-
:authors => [
|
46
|
-
{
|
47
|
-
:name => "Arthur C. Clarke"
|
48
|
-
},
|
49
|
-
{
|
50
|
-
:name=>"Robert Heinlein",
|
51
|
-
:books=> [
|
52
|
-
{
|
53
|
-
:name => "the unpleasant profession",
|
54
|
-
:genre => {
|
55
|
-
:name => "Science Fiction"
|
56
|
-
},
|
57
|
-
:author => {
|
58
|
-
:name => "Robert Heinlein"
|
59
|
-
}
|
60
|
-
}
|
61
|
-
]
|
62
|
-
}
|
63
|
-
]
|
64
|
-
},
|
65
|
-
:author => {
|
66
|
-
:name => "Arthur C. Clarke"
|
67
|
-
}
|
68
|
-
}
|
69
|
-
]
|
70
|
-
}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/spec/lib_specs/log_spec.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe Dupe::Network::Log do
|
4
|
-
before do
|
5
|
-
Dupe.reset
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "##new" do
|
9
|
-
it "should initialize the request entries to an empty array" do
|
10
|
-
log = Dupe::Network::Log.new
|
11
|
-
log.requests.should == []
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#add_request" do
|
16
|
-
before do
|
17
|
-
@log = Dupe::Network::Log.new
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should require a valid HTTP verb" do
|
21
|
-
proc {
|
22
|
-
@log.add_request :invalid_http_verb, '/some_url'
|
23
|
-
}.should raise_error(Dupe::Network::UnknownRestVerbError)
|
24
|
-
proc {
|
25
|
-
Dupe::Network::VERBS.each do |verb|
|
26
|
-
@log.add_request verb, '/some_url'
|
27
|
-
end
|
28
|
-
}.should_not raise_error
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should require a url" do
|
32
|
-
proc {
|
33
|
-
@log.add_request :get
|
34
|
-
}.should raise_error(ArgumentError)
|
35
|
-
proc {
|
36
|
-
@log.add_request :get, '/a_url'
|
37
|
-
}.should_not raise_error
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should add a Dupe::Network::Log::MockedRequest to requests" do
|
41
|
-
@log.requests.should be_empty
|
42
|
-
path = '/translate?q=hola&from=spanish&to=english'
|
43
|
-
response_body = 'hello'
|
44
|
-
@log.add_request :get, path, response_body
|
45
|
-
@log.requests.should_not be_empty
|
46
|
-
@log.requests.length.should == 1
|
47
|
-
logged_request = @log.requests.first
|
48
|
-
logged_request.should be_kind_of(Dupe::Network::Log::Request)
|
49
|
-
logged_request.verb.should == :get
|
50
|
-
logged_request.path.should == path
|
51
|
-
logged_request.response_body.should == response_body
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#pretty_print" do
|
56
|
-
before do
|
57
|
-
@log = Dupe::Network::Log.new
|
58
|
-
@log.add_request :get, '/knock-knock', "who's there?"
|
59
|
-
end
|
60
|
-
it "should return a formatted list of mocked requests" do
|
61
|
-
@log.pretty_print.should ==
|
62
|
-
"Logged Requests:\n" +
|
63
|
-
" Request: GET /knock-knock\n" +
|
64
|
-
" Response:\n" +
|
65
|
-
" who's there?\n\n"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe "#reset" do
|
70
|
-
it "should clear out all logged requests" do
|
71
|
-
@log = Dupe::Network::Log.new
|
72
|
-
@log.add_request :get, '/knock-knock', "who's there?"
|
73
|
-
@log.requests.should_not be_empty
|
74
|
-
@log.reset
|
75
|
-
@log.requests.should be_empty
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe Dupe::Network::Log::Request do
|
4
|
-
describe "##new" do
|
5
|
-
it "should set the verb, url, and response_body" do
|
6
|
-
r = Dupe::Network::Log::Request.new :get, "/knock-knock", "who's there?"
|
7
|
-
r.verb.should == :get
|
8
|
-
r.path.should == "/knock-knock"
|
9
|
-
r.response_body.should == "who's there?"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#pretty_print" do
|
14
|
-
it "should show the request type, request path, and request response" do
|
15
|
-
r = Dupe::Network::Log::Request.new :get, "/knock-knock", "who's there?"
|
16
|
-
r.pretty_print.should ==
|
17
|
-
"Request: GET /knock-knock\n" +
|
18
|
-
"Response:\n" +
|
19
|
-
" who's there?"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe "Mock Definition Methods" do
|
4
|
-
before do
|
5
|
-
Dupe.reset
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "Get" do
|
9
|
-
it "should require a url pattern that is a regex" do
|
10
|
-
proc { Get() }.should raise_error(ArgumentError)
|
11
|
-
proc { Get 'not a regexp' }.should raise_error(ArgumentError)
|
12
|
-
proc { Get %r{/some_url} }.should_not raise_error
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should create and return a Dupe::Network::Mock of type :get" do
|
16
|
-
Dupe.network.mocks[:get].should be_empty
|
17
|
-
@book = Dupe.create :book, :label => 'rooby'
|
18
|
-
Dupe.network.mocks[:get].should_not be_empty
|
19
|
-
Dupe.network.mocks[:get].length.should == 2
|
20
|
-
|
21
|
-
mock = Get %r{/books/([^&]+)\.xml} do |label|
|
22
|
-
Dupe.find(:book) {|b| b.label == label}
|
23
|
-
end
|
24
|
-
|
25
|
-
Dupe.network.mocks[:get].length.should == 3
|
26
|
-
Dupe.network.mocks[:get].last.should == mock
|
27
|
-
Dupe.network.mocks[:get].last.url_pattern.should == %r{/books/([^&]+)\.xml}
|
28
|
-
book = Dupe.find(:book)
|
29
|
-
Dupe.network.request(:get, '/books/rooby.xml').should == book.to_xml_safe(:root => 'book')
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "Post" do
|
34
|
-
it "should require a url pattern that is a regex" do
|
35
|
-
proc { Post() }.should raise_error(ArgumentError)
|
36
|
-
proc { Post 'not a regexp' }.should raise_error(ArgumentError)
|
37
|
-
proc { Post %r{/some_url} }.should_not raise_error
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should create and return a Dupe::Network::Mock of type :post" do
|
41
|
-
@book = Dupe.create :book, :label => 'rooby'
|
42
|
-
Dupe.network.mocks[:post].should_not be_empty
|
43
|
-
Dupe.network.mocks[:post].length.should == 1
|
44
|
-
|
45
|
-
mock = Post %r{/books\.xml} do |post_data|
|
46
|
-
Dupe.create(:book, post_data)
|
47
|
-
end
|
48
|
-
|
49
|
-
Dupe.network.mocks[:post].length.should == 2
|
50
|
-
Dupe.network.mocks[:post].first.should == mock
|
51
|
-
Dupe.network.mocks[:post].first.url_pattern.should == %r{/books\.xml}
|
52
|
-
book_post = Dupe.create(:book, {:title => "Rooby", :label => "rooby"})
|
53
|
-
book_post.delete(:id)
|
54
|
-
book_response = Dupe.create(:book, {:title => "Rooby", :label => "rooby"})
|
55
|
-
Dupe.network.request(:post, '/books.xml', book_post).should == [Dupe.find(:book) {|b| b.id == 4}.to_xml_safe(:root => 'book'), "/books/4.xml"]
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/spec/lib_specs/mock_spec.rb
DELETED
@@ -1,194 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe Dupe::Network::Mock do
|
4
|
-
before do
|
5
|
-
Dupe.reset
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "new" do
|
9
|
-
it "should require the url be a kind of regular expression" do
|
10
|
-
proc { Dupe::Network::Mock.new '', proc {} }.should raise_error(
|
11
|
-
ArgumentError,
|
12
|
-
"The URL pattern parameter must be a type of regular expression."
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should set the, @url, and @response parameters accordingly" do
|
17
|
-
url_pattern = /\//
|
18
|
-
response = proc {}
|
19
|
-
mock = Dupe::Network::Mock.new url_pattern, response
|
20
|
-
mock.url_pattern.should == url_pattern
|
21
|
-
mock.response.should == response
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "match?" do
|
26
|
-
it "should determine if a given string matches the mock's url pattern" do
|
27
|
-
url = %r{/blogs/(\d+).xml}
|
28
|
-
response = proc {}
|
29
|
-
mock = Dupe::Network::Mock.new url, response
|
30
|
-
mock.match?('/blogs/1.xml').should == true
|
31
|
-
mock.match?('/bogs/1.xml').should == false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe Dupe::Network::GetMock do
|
37
|
-
before do
|
38
|
-
Dupe.reset
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "mocked_response" do
|
42
|
-
describe "on a mock object whose response returns a Dupe.find with actual results" do
|
43
|
-
it "should convert the response result to xml" do
|
44
|
-
url_pattern = %r{/books/(\d+)\.xml}
|
45
|
-
response = proc {|id| Dupe.find(:book) {|b| b.id == id.to_i}}
|
46
|
-
book = Dupe.create :book
|
47
|
-
mock = Dupe::Network::GetMock.new url_pattern, response
|
48
|
-
mock.mocked_response('/books/1.xml').should == book.to_xml(:root => 'book')
|
49
|
-
|
50
|
-
proc { mock.mocked_response('/books/2.xml') }.should raise_error(Dupe::Network::GetMock::ResourceNotFoundError)
|
51
|
-
|
52
|
-
Dupe.define :author
|
53
|
-
mock = Dupe::Network::GetMock.new %r{/authors\.xml$}, proc {Dupe.find :authors}
|
54
|
-
mock.mocked_response('/authors.xml').should == [].to_xml(:root => 'results')
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should add a request to the Dupe::Network#log" do
|
58
|
-
url_pattern = %r{/books/([a-zA-Z0-9-]+)\.xml}
|
59
|
-
response = proc {|label| Dupe.find(:book) {|b| b.label == label}}
|
60
|
-
book = Dupe.create :book, :label => 'rooby'
|
61
|
-
mock = Dupe::Network::GetMock.new url_pattern, response
|
62
|
-
Dupe.network.log.requests.length.should == 0
|
63
|
-
mock.mocked_response('/books/rooby.xml')
|
64
|
-
Dupe.network.log.requests.length.should == 1
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "on a mock object whose response returns nil" do
|
69
|
-
it "should raise an error" do
|
70
|
-
url_pattern = %r{/authors/(\d+)\.xml}
|
71
|
-
response = proc { |id| Dupe.find(:author) {|a| a.id == id.to_i}}
|
72
|
-
Dupe.define :author
|
73
|
-
mock = Dupe::Network::GetMock.new url_pattern, response
|
74
|
-
proc {mock.mocked_response('/authors/1.xml')}.should raise_error(Dupe::Network::GetMock::ResourceNotFoundError)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "on a mock object whose response returns an empty array" do
|
79
|
-
it "should convert the empty array to an xml array record set with root 'results'" do
|
80
|
-
Dupe.define :author
|
81
|
-
mock = Dupe::Network::GetMock.new %r{/authors\.xml$}, proc {Dupe.find :authors}
|
82
|
-
mock.mocked_response('/authors.xml').should == [].to_xml(:root => 'results')
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should add a request to the Dupe::Network#log" do
|
86
|
-
Dupe.define :author
|
87
|
-
mock = Dupe::Network::GetMock.new %r{/authors\.xml$}, proc {Dupe.find :authors}
|
88
|
-
Dupe.network.log.requests.length.should == 0
|
89
|
-
mock.mocked_response('/authors.xml')
|
90
|
-
Dupe.network.log.requests.length.should == 1
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "on a mock object whose response returns an array of duped records" do
|
95
|
-
it "should convert the array to xml" do
|
96
|
-
Dupe.create :author
|
97
|
-
mock = Dupe::Network::GetMock.new %r{/authors\.xml$}, proc {Dupe.find :authors}
|
98
|
-
mock.mocked_response('/authors.xml').should == Dupe.find(:authors).to_xml(:root => 'authors')
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should add a request to the Dupe::Network#log" do
|
102
|
-
Dupe.create :author
|
103
|
-
mock = Dupe::Network::GetMock.new %r{/authors\.xml$}, proc {Dupe.find :authors}
|
104
|
-
Dupe.network.log.requests.length.should == 0
|
105
|
-
mock.mocked_response('/authors.xml')
|
106
|
-
Dupe.network.log.requests.length.should == 1
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe Dupe::Network::PostMock do
|
113
|
-
before do
|
114
|
-
Dupe.reset
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "mocked_response" do
|
118
|
-
describe "on a mock object whose response returns a location of a new record" do
|
119
|
-
it "should convert the new post to xml" do
|
120
|
-
Dupe.define :author
|
121
|
-
mock = Dupe::Network::PostMock.new %r{/authors\.xml$}, proc {|post_data| Dupe.create(:author, post_data)}
|
122
|
-
resp, url = mock.mocked_response('/authors.xml', {:name => "Rachel"})
|
123
|
-
resp.should == Dupe.find(:authors).first.to_xml_safe(:root => 'author')
|
124
|
-
url.should == "/authors/1.xml"
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should add a request to the Dupe::Network#log" do
|
128
|
-
Dupe.define :author
|
129
|
-
mock = Dupe::Network::PostMock.new %r{/authors\.xml$}, proc {|post_data| Dupe.create(:author, post_data)}
|
130
|
-
Dupe.network.log.requests.length.should == 0
|
131
|
-
mock.mocked_response('/authors.xml', {:name => "Rachel"})
|
132
|
-
Dupe.network.log.requests.length.should == 1
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe Dupe::Network::PutMock do
|
139
|
-
before do
|
140
|
-
Dupe.reset
|
141
|
-
end
|
142
|
-
|
143
|
-
describe "mocked_response" do
|
144
|
-
describe "on a mock object whose response returns a location of a new record" do
|
145
|
-
before do
|
146
|
-
Dupe.define :author
|
147
|
-
@a = Dupe.create :author, :name => "Matt"
|
148
|
-
@mock = Dupe::Network::PutMock.new %r{/authors/(\d+)\.xml$}, proc {|id, put_data| Dupe.find(:author) {|a| a.id == id.to_i}.merge!(put_data)}
|
149
|
-
end
|
150
|
-
|
151
|
-
it "should convert the put to xml" do
|
152
|
-
resp, url = @mock.mocked_response('/authors/1.xml', {:name => "Rachel"})
|
153
|
-
resp.should == nil
|
154
|
-
@a.name.should == "Rachel"
|
155
|
-
url.should == "/authors/1.xml"
|
156
|
-
end
|
157
|
-
|
158
|
-
it "should add a request to the Dupe::Network#log" do
|
159
|
-
Dupe.network.log.requests.length.should == 0
|
160
|
-
@mock.mocked_response('/authors/1.xml', {:name => "Rachel"})
|
161
|
-
Dupe.network.log.requests.length.should == 1
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
describe Dupe::Network::DeleteMock do
|
168
|
-
before do
|
169
|
-
Dupe.reset
|
170
|
-
end
|
171
|
-
|
172
|
-
describe "mocked_response" do
|
173
|
-
describe "on a mock object whose response returns a location of a new record" do
|
174
|
-
before do
|
175
|
-
Dupe.define :author
|
176
|
-
@a = Dupe.create :author, :name => "Matt"
|
177
|
-
@mock = Dupe::Network::DeleteMock.new %r{/authors/(\d+)\.xml$}, proc {|id| Dupe.delete(:author) {|a| a.id == id.to_i}}
|
178
|
-
end
|
179
|
-
|
180
|
-
it "should convert the put to xml" do
|
181
|
-
Dupe.find(:authors).length.should == 1
|
182
|
-
resp = @mock.mocked_response('/authors/1.xml')
|
183
|
-
resp.should == nil
|
184
|
-
Dupe.find(:authors).length.should == 0
|
185
|
-
end
|
186
|
-
|
187
|
-
it "should add a request to the Dupe::Network#log" do
|
188
|
-
Dupe.network.log.requests.length.should == 0
|
189
|
-
@mock.mocked_response('/authors/1.xml')
|
190
|
-
Dupe.network.log.requests.length.should == 1
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe Dupe::Model do
|
4
|
-
describe "new" do
|
5
|
-
it "should require a model name" do
|
6
|
-
proc { Dupe::Model.new }.should raise_error(ArgumentError)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should set the model name to what was passed in during initialization" do
|
10
|
-
m = Dupe::Model.new :book
|
11
|
-
m.name.should == :book
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should initialize an empty schema" do
|
15
|
-
m = Dupe::Model.new :book
|
16
|
-
m.schema.should be_kind_of(Dupe::Model::Schema)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should setup an id_sequence initialized to 0" do
|
20
|
-
m = Dupe::Model.new :book
|
21
|
-
m.id_sequence.current_value.should == 1
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "define" do
|
26
|
-
describe "when passed a proc" do
|
27
|
-
before do
|
28
|
-
@model = Dupe::Model.new :book
|
29
|
-
@definition = proc { |attrs|
|
30
|
-
attrs.author('Anonymous') do |dont_care|
|
31
|
-
'Flying Spaghetti Monster'
|
32
|
-
end
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should pass that proc off to it's schema" do
|
37
|
-
@model.schema.should_receive(:method_missing).once
|
38
|
-
@model.define @definition
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should result in a schema with the desired attribute templates" do
|
42
|
-
@model.define @definition
|
43
|
-
@model.schema.attribute_templates[:author].name.should == :author
|
44
|
-
@model.schema.attribute_templates[:author].default.should == 'Anonymous'
|
45
|
-
@model.schema.attribute_templates[:author].transformer.call(
|
46
|
-
'dont care'
|
47
|
-
).should == 'Flying Spaghetti Monster'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "create" do
|
53
|
-
before do
|
54
|
-
Dupe.define :book do |attrs|
|
55
|
-
attrs.title 'Untitled'
|
56
|
-
attrs.author 'Anon' do |author|
|
57
|
-
"Author: #{author}"
|
58
|
-
end
|
59
|
-
attrs.after_create do |book|
|
60
|
-
book.label = book.title.downcase.gsub(/\ +/, '-')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
@book_model = Dupe.models[:book]
|
65
|
-
end
|
66
|
-
|
67
|
-
it "shouldn't require any parameters" do
|
68
|
-
proc {
|
69
|
-
@book_model.create
|
70
|
-
}.should_not raise_error
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should return a Dupe::Database::Record instance with the desired parameters" do
|
74
|
-
book = @book_model.create
|
75
|
-
book.should be_kind_of(Dupe::Database::Record)
|
76
|
-
book.__model__.name.should == :book
|
77
|
-
book.id.should == 1
|
78
|
-
book.title.should == 'Untitled'
|
79
|
-
book.author.should == 'Anon'
|
80
|
-
|
81
|
-
# the callback shouldn't get run until the database record is inserted into the duped 'database'
|
82
|
-
book.label.should == nil
|
83
|
-
|
84
|
-
book = @book_model.create :title => 'Rooby On Rails', :author => 'Matt Parker'
|
85
|
-
book.__model__.name.should == :book
|
86
|
-
book.id.should == 2
|
87
|
-
book.title.should == 'Rooby On Rails'
|
88
|
-
|
89
|
-
# the callback shouldn't get run until the database record is inserted into the duped 'database'
|
90
|
-
book.label.should == nil
|
91
|
-
|
92
|
-
book.author.should == 'Author: Matt Parker'
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe Dupe::Network do
|
4
|
-
|
5
|
-
describe "new" do
|
6
|
-
before do
|
7
|
-
@network = Dupe::Network.new
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should initialize @mocks to a hash of empty arrays keyed with valid REST verbs" do
|
11
|
-
Dupe::Network::VERBS.each do |verb|
|
12
|
-
@network.mocks[verb].should == []
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should initialize @log to a new Dupe::Network::Log" do
|
17
|
-
@network.log.should be_kind_of(Dupe::Network::Log)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "request" do
|
22
|
-
before do
|
23
|
-
@network = Dupe::Network.new
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should require a valid REST verb" do
|
27
|
-
proc { @network.request }.should raise_error
|
28
|
-
proc { @network.request :invalid_rest_verb, '/some_url' }.should raise_error(Dupe::Network::UnknownRestVerbError)
|
29
|
-
proc { @network.request :get, '/some_url' }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
30
|
-
proc { @network.request :post, '/some_url', 'some body' }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
31
|
-
proc { @network.request :put, '/some_url' }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
32
|
-
proc { @network.request :delete, '/some_url' }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should require a URL" do
|
36
|
-
proc { @network.request :get }.should raise_error(ArgumentError)
|
37
|
-
proc { @network.request :get, 'some_url'}.should_not raise_error(ArgumentError)
|
38
|
-
proc { @network.request :post, 'some_url', 'some body'}.should_not raise_error(ArgumentError)
|
39
|
-
proc { @network.request :put, 'some_url'}.should_not raise_error(ArgumentError)
|
40
|
-
proc { @network.request :delete, 'some_url'}.should_not raise_error(ArgumentError)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should raise an exception if the network has no mocks that match the url" do
|
44
|
-
proc { @network.request(:get, '/some_url')}.should raise_error(Dupe::Network::RequestNotFoundError)
|
45
|
-
proc { @network.request(:post, '/some_url', 'some body')}.should raise_error(Dupe::Network::RequestNotFoundError)
|
46
|
-
proc { @network.request(:put, '/some_url')}.should raise_error(Dupe::Network::RequestNotFoundError)
|
47
|
-
proc { @network.request(:delete, '/some_url')}.should raise_error(Dupe::Network::RequestNotFoundError)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should return the appropriate mock response if a mock matches the url" do
|
51
|
-
@network.define_service_mock :get, %r{/greeting$}, proc { "hello" }
|
52
|
-
@network.request(:get, '/greeting').should == 'hello'
|
53
|
-
|
54
|
-
@network.define_service_mock :post, %r{/greeting$}, proc { |post_data| Dupe.create(:greeting, post_data) }
|
55
|
-
resp, url = @network.request(:post, '/greeting', {} )
|
56
|
-
resp.should == Dupe.find(:greeting).to_xml_safe(:root => 'greeting')
|
57
|
-
url.should == "/greetings/1.xml"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "define_service_mock" do
|
62
|
-
before do
|
63
|
-
@network = Dupe::Network.new
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should require a valid REST verb" do
|
67
|
-
proc { @network.define_service_mock }.should raise_error
|
68
|
-
proc { @network.define_service_mock :invalid_rest_verb, // }.should raise_error(Dupe::Network::UnknownRestVerbError)
|
69
|
-
proc { @network.define_service_mock :get, // }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
70
|
-
proc { @network.define_service_mock :post, // }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
71
|
-
proc { @network.define_service_mock :put, // }.should_not raise_error(Dupe::Network::UnknownRestVerbError)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should require a valid Regexp url pattern" do
|
75
|
-
proc { @network.define_service_mock :get, 'not a regular expression' }.should raise_error(ArgumentError)
|
76
|
-
proc { @network.define_service_mock :post, 'not a regular expression' }.should raise_error(ArgumentError)
|
77
|
-
proc { @network.define_service_mock :get, // }.should_not raise_error
|
78
|
-
proc { @network.define_service_mock :post, // }.should_not raise_error
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should create and return a new get service mock when given valid parameters" do
|
82
|
-
verb = :get
|
83
|
-
pattern = //
|
84
|
-
response = proc { 'test' }
|
85
|
-
@network.mocks[:get].should be_empty
|
86
|
-
mock = @network.define_service_mock verb, pattern, response
|
87
|
-
@network.mocks[:get].should_not be_empty
|
88
|
-
@network.mocks[:get].first.class.should == Dupe::Network::GetMock
|
89
|
-
@network.mocks[:get].length.should == 1
|
90
|
-
@network.mocks[:get].first.should == mock
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should create and return a new post service mock when given valid parameters" do
|
94
|
-
verb = :post
|
95
|
-
pattern = //
|
96
|
-
response = proc { 'test' }
|
97
|
-
@network.mocks[:post].should be_empty
|
98
|
-
mock = @network.define_service_mock verb, pattern, response
|
99
|
-
@network.mocks[:post].should_not be_empty
|
100
|
-
@network.mocks[:post].first.class.should == Dupe::Network::PostMock
|
101
|
-
@network.mocks[:post].length.should == 1
|
102
|
-
@network.mocks[:post].first.should == mock
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should create and return a new put service mock when given valid parameters" do
|
106
|
-
verb = :put
|
107
|
-
pattern = //
|
108
|
-
response = proc { 'test' }
|
109
|
-
@network.mocks[:put].should be_empty
|
110
|
-
mock = @network.define_service_mock verb, pattern, response
|
111
|
-
@network.mocks[:put].should_not be_empty
|
112
|
-
@network.mocks[:put].first.class.should == Dupe::Network::PutMock
|
113
|
-
@network.mocks[:put].length.should == 1
|
114
|
-
@network.mocks[:put].first.should == mock
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should create and return a new delete service mock when given valid parameters" do
|
118
|
-
verb = :delete
|
119
|
-
pattern = //
|
120
|
-
response = proc { 'test' }
|
121
|
-
@network.mocks[:delete].should be_empty
|
122
|
-
mock = @network.define_service_mock verb, pattern, response
|
123
|
-
@network.mocks[:delete].should_not be_empty
|
124
|
-
@network.mocks[:delete].first.class.should == Dupe::Network::DeleteMock
|
125
|
-
@network.mocks[:delete].length.should == 1
|
126
|
-
@network.mocks[:delete].first.should == mock
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
end
|