agraph 0.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,224 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "repository"))
3
+
4
+ describe AllegroGraph::Repository do
5
+
6
+ before :each do
7
+ @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
+ @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
9
+ @repository = AllegroGraph::Repository.new @catalog, "test_repository"
10
+ end
11
+
12
+ describe "==" do
13
+
14
+ it "should be true when comparing two equal repositories" do
15
+ other = AllegroGraph::Repository.new @catalog, "test_repository"
16
+ @repository.should == other
17
+ end
18
+
19
+ it "should be false when comparing two different repositories" do
20
+ other = AllegroGraph::Repository.new @catalog, "other_repository"
21
+ @repository.should_not == other
22
+ end
23
+
24
+ end
25
+
26
+ describe "path" do
27
+
28
+ it "should return the repository path" do
29
+ @repository.path.should == "#{@catalog.path}/repositories/test_repository"
30
+ end
31
+
32
+ end
33
+
34
+ describe "request" do
35
+
36
+ before :each do
37
+ @server.stub!(:request)
38
+ end
39
+
40
+ it "should call the server's request method" do
41
+ @server.should_receive(:request).with(:get, "/", { })
42
+ @repository.request :get, "/"
43
+ end
44
+
45
+ end
46
+
47
+ describe "exists?" do
48
+
49
+ context "for a repository that already exists" do
50
+
51
+ it "should return true" do
52
+ @repository.exists?.should be_true
53
+ end
54
+
55
+ end
56
+
57
+ context "for a repository that not exists" do
58
+
59
+ before :each do
60
+ @repository.name = "not_existing"
61
+ end
62
+
63
+ it "should return false" do
64
+ @repository.exists?.should be_false
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ describe "create!" do
72
+
73
+ context "for a repository that already exists" do
74
+
75
+ it "should return false" do
76
+ @repository.create!.should be_false
77
+ end
78
+
79
+ end
80
+
81
+ context "for a repository that not exists" do
82
+
83
+ before :each do
84
+ @repository.name = "not_existing"
85
+ end
86
+
87
+ it "should return true" do
88
+ @repository.create!.should be_true
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ describe "create_if_missing!" do
96
+
97
+ context "for a repository that already exists" do
98
+
99
+ before :each do
100
+ @repository.stub!(:exists?).and_return(true)
101
+ end
102
+
103
+ it "should do nothing" do
104
+ @repository.should_not_receive(:create!)
105
+ @repository.create_if_missing!
106
+ end
107
+
108
+ end
109
+
110
+ context "for a repository that not exists" do
111
+
112
+ before :each do
113
+ @repository.stub!(:exists?).and_return(false)
114
+ end
115
+
116
+ it "should call create!" do
117
+ @repository.should_receive(:create!)
118
+ @repository.create_if_missing!
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ describe "delete!" do
126
+
127
+ context "for a repository that already exists" do
128
+
129
+ it "should return true" do
130
+ @repository.delete!.should be_true
131
+ end
132
+
133
+ end
134
+
135
+ context "for a repository that not exists" do
136
+
137
+ before :each do
138
+ @repository.name = "not_existing"
139
+ end
140
+
141
+ it "should return false" do
142
+ @repository.delete!.should be_false
143
+ end
144
+
145
+ end
146
+
147
+ end
148
+
149
+ describe "delete_if_exists!" do
150
+
151
+ context "for a repository that already exists" do
152
+
153
+ before :each do
154
+ @repository.stub!(:exists?).and_return(true)
155
+ end
156
+
157
+ it "should call delete!" do
158
+ @repository.should_receive(:delete!)
159
+ @repository.delete_if_exists!
160
+ end
161
+
162
+ end
163
+
164
+ context "for a repository that not exists" do
165
+
166
+ before :each do
167
+ @repository.stub!(:exists?).and_return(false)
168
+ end
169
+
170
+ it "should do nothing" do
171
+ @repository.should_not_receive(:delete!)
172
+ @repository.delete_if_exists!
173
+ end
174
+
175
+ end
176
+
177
+ end
178
+
179
+ describe "size" do
180
+
181
+ it "should return the number of statements" do
182
+ @repository.size.should == 3
183
+ end
184
+
185
+ end
186
+
187
+ describe "transaction" do
188
+
189
+ before :each do
190
+ @session = AllegroGraph::Session.new :url => "http://session:5555", :username => "test", :password => "test"
191
+ AllegroGraph::Session.stub!(:create).and_return(@session)
192
+
193
+ @session.statements.stub!(:create)
194
+ end
195
+
196
+ it "should use the session proxies" do
197
+ @session.statements.should_receive(:create)
198
+ @repository.transaction do
199
+ statements.create
200
+ end
201
+ end
202
+
203
+ it "should commit the session after block execution" do
204
+ @session.statements.should_receive(:create).ordered
205
+ @session.should_receive(:commit).ordered
206
+ @repository.transaction do
207
+ statements.create
208
+ end
209
+ end
210
+
211
+ it "should rollback the session on error" do
212
+ @session.statements.should_receive(:create).ordered
213
+ @session.should_receive(:rollback).ordered
214
+ lambda do
215
+ @repository.transaction do
216
+ statements.create
217
+ invalid
218
+ end
219
+ end.should raise_error(NameError)
220
+ end
221
+
222
+ end
223
+
224
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "server"))
3
+
4
+ describe AllegroGraph::Server do
5
+
6
+ before :each do
7
+ @server = AllegroGraph::Server.new :username => "test", :password => "test"
8
+ end
9
+
10
+ describe "==" do
11
+
12
+ it "should be true when comparing two equal servers" do
13
+ other = AllegroGraph::Server.new
14
+ @server.should == other
15
+ end
16
+
17
+ it "should be false when comparing two different servers" do
18
+ other = AllegroGraph::Server.new :host => "other"
19
+ @server.should_not == other
20
+ end
21
+
22
+ end
23
+
24
+ describe "request" do
25
+
26
+ before :each do
27
+ AllegroGraph::ExtendedTransport.stub!(:request)
28
+ end
29
+
30
+ it "should perform an extended request" do
31
+ AllegroGraph::ExtendedTransport.should_receive(:request).with(
32
+ :get, "http://localhost:10035/", hash_including(:expected_status_code => 200)
33
+ ).and_return("test" => "test")
34
+ @server.request(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
35
+ end
36
+
37
+ end
38
+
39
+ describe "version" do
40
+
41
+ it "should return the server's version" do
42
+ @server.version.should == {
43
+ :version => "4.0.1a",
44
+ :date => "March 10, 2010 10:23:52 GMT-0800",
45
+ :revision => "[unknown]"
46
+ }
47
+ end
48
+
49
+ end
50
+
51
+ describe "catalogs" do
52
+
53
+ before :each do
54
+ @catalog = AllegroGraph::Catalog.new @server, "test_catalog"
55
+ end
56
+
57
+ it "should return the catalogs of the server" do
58
+ @server.catalogs.should == [ @server.root_catalog, @catalog ]
59
+ end
60
+
61
+ end
62
+
63
+ describe "federations" do
64
+
65
+ before :each do
66
+ @federation = AllegroGraph::Federation.new @server, "test_federation"
67
+ end
68
+
69
+ it "should return the federations of the server" do
70
+ @server.federations.should include(@federation)
71
+ end
72
+
73
+ end
74
+
75
+ end
@@ -0,0 +1,76 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "session"))
3
+
4
+ describe AllegroGraph::Session do
5
+
6
+ before :each do
7
+ @session = AllegroGraph::Session.new :url => "http://session:5555", :username => "test", :password => "test"
8
+ end
9
+
10
+ describe "request" do
11
+
12
+ before :each do
13
+ AllegroGraph::ExtendedTransport.stub!(:request)
14
+ end
15
+
16
+ it "should perform an extended request" do
17
+ AllegroGraph::ExtendedTransport.should_receive(:request).with(
18
+ :get, "http://session:5555/", hash_including(:expected_status_code => 200)
19
+ ).and_return("test" => "test")
20
+ @session.request(:get, "/", :expected_status_code => 200).should == { "test" => "test" }
21
+ end
22
+
23
+ end
24
+
25
+ describe "commit" do
26
+
27
+ it "should return true" do
28
+ result = @session.commit
29
+ result.should be_true
30
+ end
31
+
32
+ end
33
+
34
+ describe "rollback" do
35
+
36
+ it "should return true" do
37
+ result = @session.rollback
38
+ result.should be_true
39
+ end
40
+
41
+ end
42
+
43
+ describe "create" do
44
+
45
+ before :each do
46
+ @server = Object.new
47
+ @server.stub!(:username).and_return("test")
48
+ @server.stub!(:password).and_return("test")
49
+ @repository = Object.new
50
+ @repository.stub!(:path).and_return("/repositories/test_repository")
51
+ @repository.stub!(:request).and_return("http://session:5555")
52
+ @repository.stub!(:server).and_return(@server)
53
+ end
54
+
55
+ it "should request a session" do
56
+ @repository.should_receive(:request).with(
57
+ :post, "/repositories/test_repository/session", :expected_status_code => 200
58
+ ).and_return("http://session:5555")
59
+ AllegroGraph::Session.create @repository
60
+ end
61
+
62
+ it "should return a session" do
63
+ result = AllegroGraph::Session.create @repository
64
+ result.should be_instance_of(AllegroGraph::Session)
65
+ end
66
+
67
+ it "should set the correct values" do
68
+ result = AllegroGraph::Session.create @repository
69
+ result.url.should == "http://session:5555"
70
+ result.username.should == "test"
71
+ result.password.should == "test"
72
+ end
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,116 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "allegro_graph", "transport"))
3
+
4
+ describe AllegroGraph::Transport do
5
+
6
+ use_real_transport!
7
+
8
+ describe "request" do
9
+
10
+ before :each do
11
+ @http_method = :get
12
+ @url = "http://localhost:5984/"
13
+ @options = { }
14
+
15
+ @request = Net::HTTP::Get.new "/", { }
16
+ @response = Object.new
17
+ @response.stub!(:code).and_return("200")
18
+ @response.stub!(:body).and_return("test")
19
+ Net::HTTP.stub!(:start).and_return(@response)
20
+ end
21
+
22
+ def do_request(options = { })
23
+ AllegroGraph::Transport.request @http_method, @url, @options.merge(options)
24
+ end
25
+
26
+ it "should initialize the correct request object" do
27
+ Net::HTTP::Get.should_receive(:new).with("/", { }).and_return(@request)
28
+ do_request
29
+ end
30
+
31
+ it "should perform the request" do
32
+ Net::HTTP.should_receive(:start).and_return(@response)
33
+ do_request
34
+ end
35
+
36
+ it "should return the response" do
37
+ do_request.body.should == "test"
38
+ end
39
+
40
+ context "with parameters" do
41
+
42
+ before :each do
43
+ @options.merge! :parameters => { :foo => "bar", :test => [ "value1", "value2" ] }
44
+ end
45
+
46
+ it "should initialize the correct request object" do
47
+ Net::HTTP::Get.should_receive(:new).with(
48
+ "/?foo=bar&test=value1&test=value2", { }
49
+ ).and_return(@request)
50
+ do_request
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ describe AllegroGraph::ExtendedTransport do
60
+
61
+ use_real_transport!
62
+
63
+ describe "request" do
64
+
65
+ before :each do
66
+ @http_method = :get
67
+ @url = "http://localhost:5984/"
68
+ @options = {
69
+ :auth_type => :basic,
70
+ :username => "test",
71
+ :password => "test",
72
+ :expected_status_code => 200
73
+ }
74
+
75
+ @request = Net::HTTP::Get.new "/", { }
76
+ @response = Object.new
77
+ @response.stub!(:code).and_return("200")
78
+ @response.stub!(:body).and_return("{\"test\":\"test\"}")
79
+ Net::HTTP.stub!(:start).and_return(@response)
80
+ end
81
+
82
+ def do_request(options = { })
83
+ AllegroGraph::ExtendedTransport.request @http_method, @url, @options.merge(options)
84
+ end
85
+
86
+ it "should initialize the correct request object" do
87
+ Net::HTTP::Get.should_receive(:new).with(
88
+ "/", { "Authorization" => "Basic dGVzdDp0ZXN0\n", "Accept" => "application/json" }
89
+ ).and_return(@request)
90
+ do_request
91
+ end
92
+
93
+ it "should perform the request" do
94
+ Net::HTTP.should_receive(:start).and_return(@response)
95
+ do_request
96
+ end
97
+
98
+ it "should return the parsed response" do
99
+ do_request.should == { "test" => "test" }
100
+ end
101
+
102
+ it "should raise NotImplementedError if the given auth_type is wrong" do
103
+ lambda do
104
+ do_request :auth_type => :invalid
105
+ end.should raise_error(NotImplementedError)
106
+ end
107
+
108
+ it "should raise UnexpectedStatusCodeError if responded status code is wrong" do
109
+ lambda do
110
+ do_request :expected_status_code => 201
111
+ end.should raise_error(AllegroGraph::ExtendedTransport::UnexpectedStatusCodeError)
112
+ end
113
+
114
+ end
115
+
116
+ end