ashikawa-core 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +7 -7
- data/CHANGELOG.md +25 -0
- data/CONTRIBUTING.md +4 -4
- data/Gemfile.devtools +32 -16
- data/README.md +9 -11
- data/Rakefile +3 -0
- data/ashikawa-core.gemspec +7 -5
- data/config/flay.yml +2 -2
- data/config/flog.yml +2 -1
- data/config/mutant.yml +14 -1
- data/config/reek.yml +9 -4
- data/config/rubocop.yml +14 -14
- data/lib/ashikawa-core/collection.rb +10 -6
- data/lib/ashikawa-core/configuration.rb +10 -5
- data/lib/ashikawa-core/connection.rb +30 -21
- data/lib/ashikawa-core/cursor.rb +2 -3
- data/lib/ashikawa-core/database.rb +12 -35
- data/lib/ashikawa-core/document.rb +3 -4
- data/lib/ashikawa-core/edge.rb +5 -5
- data/lib/ashikawa-core/error_response.rb +108 -0
- data/lib/ashikawa-core/index.rb +4 -14
- data/lib/ashikawa-core/query.rb +1 -1
- data/lib/ashikawa-core/transaction.rb +1 -16
- data/lib/ashikawa-core/version.rb +1 -1
- data/spec/acceptance/basic_spec.rb +9 -6
- data/spec/acceptance/spec_helper.rb +5 -4
- data/spec/setup/arangodb.sh +12 -17
- data/spec/unit/collection_spec.rb +60 -18
- data/spec/unit/configuration_spec.rb +35 -4
- data/spec/unit/connection_spec.rb +23 -65
- data/spec/unit/cursor_spec.rb +2 -2
- data/spec/unit/database_spec.rb +16 -28
- data/spec/unit/document_spec.rb +3 -3
- data/spec/unit/edge_spec.rb +1 -1
- data/spec/unit/index_spec.rb +1 -1
- data/spec/unit/query_spec.rb +1 -1
- data/spec/unit/spec_helper.rb +3 -2
- data/tasks/adjustments.rake +0 -14
- metadata +26 -13
- data/lib/ashikawa-core/request_preprocessor.rb +0 -50
- data/lib/ashikawa-core/response_preprocessor.rb +0 -160
@@ -14,15 +14,16 @@ end
|
|
14
14
|
|
15
15
|
require 'ashikawa-core'
|
16
16
|
|
17
|
-
port = ENV
|
18
|
-
username = ENV
|
19
|
-
password = ENV
|
17
|
+
port = ENV.fetch('ARANGODB_PORT', 8529)
|
18
|
+
username = ENV.fetch('ARANGODB_USERNAME', 'root')
|
19
|
+
password = ENV.fetch('ARANGODB_PASSWORD', '')
|
20
|
+
authentification_enabled = ENV['ARANGODB_DISABLE_AUTHENTIFICATION'] == 'false'
|
20
21
|
|
21
22
|
# The database instance to use for all specs
|
22
23
|
DATABASE = Ashikawa::Core::Database.new do |config|
|
23
24
|
config.url = "http://localhost:#{port}"
|
24
25
|
|
25
|
-
|
26
|
+
if authentification_enabled
|
26
27
|
config.username = username
|
27
28
|
config.password = password
|
28
29
|
end
|
data/spec/setup/arangodb.sh
CHANGED
@@ -3,15 +3,15 @@
|
|
3
3
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
4
4
|
cd $DIR
|
5
5
|
|
6
|
-
# VERSION=1.4.devel
|
7
6
|
NAME=ArangoDB-$VERSION
|
8
7
|
|
9
8
|
if [ ! -d "$DIR/$NAME" ]; then
|
10
9
|
# download ArangoDB
|
11
|
-
echo "wget http://www.arangodb.org/travisCI/$NAME.tar.gz"
|
12
|
-
wget http://www.arangodb.org/travisCI/$NAME.tar.gz
|
10
|
+
echo "wget http://www.arangodb.org/repositories/travisCI/$NAME.tar.gz"
|
11
|
+
wget http://www.arangodb.org/repositories/travisCI/$NAME.tar.gz
|
13
12
|
echo "tar zxf $NAME.tar.gz"
|
14
13
|
tar zvxf $NAME.tar.gz
|
14
|
+
mv `find . -type d -name "ArangoDB-*"` $NAME
|
15
15
|
fi
|
16
16
|
|
17
17
|
ARCH=$(arch)
|
@@ -19,29 +19,24 @@ PID=$(echo $PPID)
|
|
19
19
|
TMP_DIR="/tmp/arangodb.$PID"
|
20
20
|
PID_FILE="/tmp/arangodb.$PID.pid"
|
21
21
|
ARANGODB_DIR="$DIR/$NAME"
|
22
|
-
|
23
|
-
ARANGOD="${ARANGODB_DIR}/bin/arangod"
|
24
|
-
if [ "$ARCH" == "x86_64" ]; then
|
25
|
-
ARANGOD="${ARANGOD}_x86_64"
|
26
|
-
fi
|
22
|
+
ARANGOD="${ARANGODB_DIR}/bin/arangod_x86_64"
|
27
23
|
|
28
24
|
# create database directory
|
29
25
|
mkdir ${TMP_DIR}
|
30
26
|
|
31
|
-
echo "Starting
|
27
|
+
echo "Starting ArangoDB '${ARANGOD}'"
|
32
28
|
|
33
29
|
${ARANGOD} \
|
34
|
-
--database.directory ${TMP_DIR}
|
35
|
-
--configuration none
|
30
|
+
--database.directory ${TMP_DIR} \
|
31
|
+
--configuration none \
|
36
32
|
--server.endpoint tcp://127.0.0.1:8529 \
|
33
|
+
--javascript.app-path ${ARANGODB_DIR}/js/apps \
|
37
34
|
--javascript.startup-directory ${ARANGODB_DIR}/js \
|
38
|
-
--server.admin-directory ${ARANGODB_DIR}/html/admin \
|
39
35
|
--javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules:${ARANGODB_DIR}/js/node \
|
40
36
|
--javascript.package-path ${ARANGODB_DIR}/js/npm:${ARANGODB_DIR}/js/common/test-data/modules \
|
41
|
-
--javascript.action-directory ${ARANGODB_DIR}/js/actions
|
42
|
-
--database.maximal-journal-size 1048576
|
43
|
-
--server.disable-
|
44
|
-
--server.disable-authentication true \
|
37
|
+
--javascript.action-directory ${ARANGODB_DIR}/js/actions \
|
38
|
+
--database.maximal-journal-size 1048576 \
|
39
|
+
--server.disable-authentication ${ARANGODB_DISABLE_AUTHENTIFICATION} \
|
45
40
|
--javascript.gc-interval 1 &
|
46
41
|
|
47
42
|
sleep 2
|
@@ -56,7 +51,7 @@ if [ "x$process" == "x" ]; then
|
|
56
51
|
fi
|
57
52
|
|
58
53
|
echo "Waiting until ArangoDB is ready on port 8529"
|
59
|
-
while [[ -z `curl -s 'http://127.0.0.1:8529/_api/version' ` ]] ; do
|
54
|
+
while [[ -z `curl --basic --user 'root:' -s 'http://127.0.0.1:8529/_api/version' ` ]] ; do
|
60
55
|
echo -n "."
|
61
56
|
sleep 2s
|
62
57
|
done
|
@@ -4,7 +4,16 @@ require 'ashikawa-core/collection'
|
|
4
4
|
|
5
5
|
describe Ashikawa::Core::Collection do
|
6
6
|
let(:database) { double }
|
7
|
-
let(:raw_document_collection)
|
7
|
+
let(:raw_document_collection) do
|
8
|
+
{
|
9
|
+
'id' => '60768679',
|
10
|
+
'name' => 'example_1',
|
11
|
+
'status' => 3,
|
12
|
+
'type' => 2,
|
13
|
+
'error' => false,
|
14
|
+
'code' => 200
|
15
|
+
}
|
16
|
+
end
|
8
17
|
let(:raw_edge_collection) do
|
9
18
|
{
|
10
19
|
'id' => '60768679',
|
@@ -223,29 +232,62 @@ describe Ashikawa::Core::Collection do
|
|
223
232
|
|
224
233
|
its(:content_type) { should be(:document) }
|
225
234
|
|
226
|
-
|
227
|
-
|
228
|
-
.with('document/60768679/333', {})
|
229
|
-
.and_return(double)
|
230
|
-
expect(Ashikawa::Core::Document).to receive(:new)
|
235
|
+
context 'when using the key' do
|
236
|
+
let(:key) { 333 }
|
231
237
|
|
232
|
-
|
233
|
-
|
238
|
+
it 'should receive a document by ID via fetch' do
|
239
|
+
expect(database).to receive(:send_request)
|
240
|
+
.with('document/60768679/333', {})
|
241
|
+
.and_return(double)
|
242
|
+
expect(Ashikawa::Core::Document).to receive(:new)
|
234
243
|
|
235
|
-
|
236
|
-
|
237
|
-
.with('document/60768679/333', {})
|
238
|
-
.and_return(double)
|
239
|
-
expect(Ashikawa::Core::Document).to receive(:new)
|
244
|
+
subject.fetch(key)
|
245
|
+
end
|
240
246
|
|
241
|
-
|
247
|
+
it 'should receive a document by ID via []' do
|
248
|
+
expect(database).to receive(:send_request)
|
249
|
+
.with('document/60768679/333', {})
|
250
|
+
.and_return(double)
|
251
|
+
expect(Ashikawa::Core::Document).to receive(:new)
|
252
|
+
|
253
|
+
subject[key]
|
254
|
+
end
|
255
|
+
|
256
|
+
it 'should replace a document by ID' do
|
257
|
+
expect(database).to receive(:send_request)
|
258
|
+
.with('document/60768679/333', put: { 'name' => value })
|
259
|
+
|
260
|
+
subject.replace(key, { 'name' => value })
|
261
|
+
end
|
242
262
|
end
|
243
263
|
|
244
|
-
|
245
|
-
|
246
|
-
|
264
|
+
context 'when using the ID' do
|
265
|
+
let(:id) { '60768679/333' }
|
266
|
+
|
267
|
+
it 'should receive a document by ID via fetch' do
|
268
|
+
expect(database).to receive(:send_request)
|
269
|
+
.with('document/60768679/333', {})
|
270
|
+
.and_return(double)
|
271
|
+
expect(Ashikawa::Core::Document).to receive(:new)
|
247
272
|
|
248
|
-
|
273
|
+
subject.fetch(id)
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'should receive a document by ID via []' do
|
277
|
+
expect(database).to receive(:send_request)
|
278
|
+
.with('document/60768679/333', {})
|
279
|
+
.and_return(double)
|
280
|
+
expect(Ashikawa::Core::Document).to receive(:new)
|
281
|
+
|
282
|
+
subject[id]
|
283
|
+
end
|
284
|
+
|
285
|
+
it 'should replace a document by ID' do
|
286
|
+
expect(database).to receive(:send_request)
|
287
|
+
.with('document/60768679/333', put: { 'name' => value })
|
288
|
+
|
289
|
+
subject.replace(id, { 'name' => value })
|
290
|
+
end
|
249
291
|
end
|
250
292
|
|
251
293
|
it 'should create a new document' do
|
@@ -20,12 +20,12 @@ describe Ashikawa::Core::Configuration do
|
|
20
20
|
end.to raise_error(ArgumentError, /either an url or a connection/)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
context 'provided with connection' do
|
24
24
|
before { subject.connection = connection }
|
25
25
|
its(:connection) { should be connection }
|
26
26
|
end
|
27
27
|
|
28
|
-
|
28
|
+
context 'provided with url, logger and adapter' do
|
29
29
|
before do
|
30
30
|
subject.url = url
|
31
31
|
subject.logger = logger
|
@@ -44,6 +44,23 @@ describe Ashikawa::Core::Configuration do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
context 'provided with url' do
|
48
|
+
before do
|
49
|
+
subject.url = url
|
50
|
+
end
|
51
|
+
|
52
|
+
its(:url) { should be url }
|
53
|
+
its(:logger) { should be nil }
|
54
|
+
its(:adapter) { should be nil }
|
55
|
+
|
56
|
+
it 'should construct a connection' do
|
57
|
+
expect(Ashikawa::Core::Connection).to receive(:new)
|
58
|
+
.with(url, {})
|
59
|
+
.and_return(connection)
|
60
|
+
expect(subject.connection).to be connection
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
47
64
|
describe 'set up authentication' do
|
48
65
|
before do
|
49
66
|
subject.url = url
|
@@ -51,14 +68,28 @@ describe Ashikawa::Core::Configuration do
|
|
51
68
|
.and_return(connection)
|
52
69
|
end
|
53
70
|
|
54
|
-
it 'should setup authentication' do
|
71
|
+
it 'should setup authentication when username and password were provided' do
|
55
72
|
expect(connection).to receive(:authenticate_with)
|
56
|
-
.with(
|
73
|
+
.with(username, password)
|
57
74
|
.and_return(connection)
|
58
75
|
|
59
76
|
subject.username = username
|
60
77
|
subject.password = password
|
61
78
|
subject.connection
|
62
79
|
end
|
80
|
+
|
81
|
+
it 'should not setup authentication when only username was provided' do
|
82
|
+
expect(connection).to_not receive(:authenticate_with)
|
83
|
+
|
84
|
+
subject.username = username
|
85
|
+
subject.connection
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should not setup authentication when only password was provided' do
|
89
|
+
expect(connection).to_not receive(:authenticate_with)
|
90
|
+
|
91
|
+
subject.password = password
|
92
|
+
subject.connection
|
93
|
+
end
|
63
94
|
end
|
64
95
|
end
|
@@ -46,26 +46,7 @@ describe Ashikawa::Core::Connection do
|
|
46
46
|
[200, response_headers, JSON.generate({ 'name' => 'dude' })]
|
47
47
|
end
|
48
48
|
|
49
|
-
subject.send_request 'my/path', delete: {
|
50
|
-
request_stub.verify_stubbed_calls
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'should write JSON request' do
|
54
|
-
request_stub.post('/_api/my/path') do |req|
|
55
|
-
expect(req[:body]).to eq('{"test":1}')
|
56
|
-
[200, response_headers, JSON.generate({ 'name' => 'dude' })]
|
57
|
-
end
|
58
|
-
|
59
|
-
subject.send_request('my/path', post: { 'test' => 1 })
|
60
|
-
request_stub.verify_stubbed_calls
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should parse JSON response' do
|
64
|
-
request_stub.get('/_api/my/path') do
|
65
|
-
[200, response_headers, '{"name":"dude"}']
|
66
|
-
end
|
67
|
-
|
68
|
-
expect(subject.send_request('my/path')).to eq({ 'name' => 'dude' })
|
49
|
+
subject.send_request 'my/path', delete: {}
|
69
50
|
request_stub.verify_stubbed_calls
|
70
51
|
end
|
71
52
|
|
@@ -75,24 +56,10 @@ describe Ashikawa::Core::Connection do
|
|
75
56
|
end
|
76
57
|
|
77
58
|
it 'should tell if authentication is enabled' do
|
78
|
-
subject.authenticate_with(
|
59
|
+
subject.authenticate_with('testuser', 'testpassword')
|
79
60
|
expect(subject.authentication?).to be_true
|
80
61
|
end
|
81
62
|
|
82
|
-
it 'should only accept username & password pairs' do
|
83
|
-
expect do
|
84
|
-
subject.authenticate_with(username: 'kitty')
|
85
|
-
end.to raise_error(ArgumentError)
|
86
|
-
|
87
|
-
expect do
|
88
|
-
subject.authenticate_with(password: 'cheezburger?')
|
89
|
-
end.to raise_error(ArgumentError)
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'should allow chaining' do
|
93
|
-
expect(subject.authenticate_with(username: 'a', password: 'b')).to eq(subject)
|
94
|
-
end
|
95
|
-
|
96
63
|
it 'should send the authentication data with every GET request' do
|
97
64
|
pending 'Find out how to check for basic auth via Faraday Stubs'
|
98
65
|
|
@@ -216,43 +183,34 @@ describe Ashikawa::Core::Connection do
|
|
216
183
|
|
217
184
|
request_stub.verify_stubbed_calls
|
218
185
|
end
|
219
|
-
|
220
|
-
it 'should raise an error if the content type of the response is not JSON' do
|
221
|
-
request_stub.get('/_api/document/4590/333') do
|
222
|
-
[200, { 'content-type' => 'text/html; charset=utf-8' }, '']
|
223
|
-
end
|
224
|
-
|
225
|
-
expect { subject.send_request 'document/4590/333' }.to raise_error(Ashikawa::Core::JsonError)
|
226
|
-
|
227
|
-
request_stub.verify_stubbed_calls
|
228
|
-
end
|
229
186
|
end
|
230
187
|
|
231
|
-
describe '
|
232
|
-
|
233
|
-
let(:
|
234
|
-
|
235
|
-
|
236
|
-
end
|
188
|
+
describe 'initializing Faraday' do
|
189
|
+
subject { Ashikawa::Core::Connection }
|
190
|
+
let(:adapter) { double('Adapter') }
|
191
|
+
let(:logger) { double('Logger') }
|
192
|
+
let(:blocky) { double('Block') }
|
237
193
|
|
238
|
-
it 'should
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
expect(
|
243
|
-
expect(
|
194
|
+
it 'should initalize with specific logger and adapter' do
|
195
|
+
expect(Faraday).to receive(:new).with("#{ARANGO_HOST}/_api").and_yield(blocky)
|
196
|
+
expect(blocky).to receive(:request).with(:json)
|
197
|
+
expect(blocky).to receive(:response).with(:logger, logger)
|
198
|
+
expect(blocky).to receive(:response).with(:error_response)
|
199
|
+
expect(blocky).to receive(:response).with(:json)
|
200
|
+
expect(blocky).to receive(:adapter).with(adapter)
|
244
201
|
|
245
|
-
subject.
|
202
|
+
subject.new(ARANGO_HOST, adapter: adapter, logger: logger)
|
246
203
|
end
|
247
204
|
|
248
|
-
it 'should
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
expect(
|
253
|
-
expect(
|
205
|
+
it 'should initialize with defaults when no specific logger and adapter was given' do
|
206
|
+
expect(Faraday).to receive(:new).with("#{ARANGO_HOST}/_api").and_yield(blocky)
|
207
|
+
expect(blocky).to receive(:request).with(:json)
|
208
|
+
expect(blocky).to receive(:response).with(:logger, NullLogger.instance)
|
209
|
+
expect(blocky).to receive(:response).with(:error_response)
|
210
|
+
expect(blocky).to receive(:response).with(:json)
|
211
|
+
expect(blocky).to receive(:adapter).with(Faraday.default_adapter)
|
254
212
|
|
255
|
-
subject.
|
213
|
+
subject.new(ARANGO_HOST)
|
256
214
|
end
|
257
215
|
end
|
258
216
|
end
|
data/spec/unit/cursor_spec.rb
CHANGED
@@ -45,7 +45,7 @@ describe Ashikawa::Core::Cursor do
|
|
45
45
|
expect(Ashikawa::Core::Document).to receive(:new)
|
46
46
|
.exactly(5).times
|
47
47
|
|
48
|
-
subject.each {
|
48
|
+
subject.each {}
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should return the raw string when the response consists of strings' do
|
@@ -112,7 +112,7 @@ describe Ashikawa::Core::Cursor do
|
|
112
112
|
expect(Ashikawa::Core::Edge).to receive(:new)
|
113
113
|
.exactly(2).times
|
114
114
|
|
115
|
-
subject.each {
|
115
|
+
subject.each {}
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
data/spec/unit/database_spec.rb
CHANGED
@@ -16,6 +16,8 @@ describe Ashikawa::Core::Database do
|
|
16
16
|
let(:logger) { double }
|
17
17
|
let(:adapter) { double }
|
18
18
|
let(:configuration) { double }
|
19
|
+
let(:raw_collection) { double }
|
20
|
+
let(:collection) { double }
|
19
21
|
|
20
22
|
it 'should initialize with a configuration object' do
|
21
23
|
expect(Ashikawa::Core::Configuration).to receive(:new)
|
@@ -33,19 +35,12 @@ describe Ashikawa::Core::Database do
|
|
33
35
|
|
34
36
|
it 'should create a query' do
|
35
37
|
expect(Ashikawa::Core::Query).to receive(:new)
|
36
|
-
.
|
38
|
+
.once
|
37
39
|
.with(subject)
|
38
40
|
|
39
41
|
subject.query
|
40
42
|
end
|
41
43
|
|
42
|
-
it 'should delegate authentication to the connection' do
|
43
|
-
expect(connection).to receive(:authenticate_with)
|
44
|
-
.with({ username: 'user', password: 'password' })
|
45
|
-
|
46
|
-
subject.authenticate_with username: 'user', password: 'password'
|
47
|
-
end
|
48
|
-
|
49
44
|
it 'should fetch all available non-system collections' do
|
50
45
|
expect(connection).to receive(:send_request)
|
51
46
|
.with('collection')
|
@@ -73,10 +68,10 @@ describe Ashikawa::Core::Database do
|
|
73
68
|
it 'should create a non volatile collection by default' do
|
74
69
|
expect(connection).to receive(:send_request)
|
75
70
|
.with('collection', post: { name: 'volatile_collection' })
|
76
|
-
.and_return {
|
71
|
+
.and_return { raw_collection }
|
77
72
|
|
78
73
|
expect(Ashikawa::Core::Collection).to receive(:new)
|
79
|
-
.with(subject,
|
74
|
+
.with(subject, raw_collection)
|
80
75
|
|
81
76
|
subject.create_collection('volatile_collection')
|
82
77
|
end
|
@@ -84,10 +79,10 @@ describe Ashikawa::Core::Database do
|
|
84
79
|
it 'should create a volatile collection when asked' do
|
85
80
|
expect(connection).to receive(:send_request)
|
86
81
|
.with('collection', post: { name: 'volatile_collection', isVolatile: true })
|
87
|
-
.and_return { |path|
|
82
|
+
.and_return { |path| raw_collection }
|
88
83
|
|
89
84
|
expect(Ashikawa::Core::Collection).to receive(:new)
|
90
|
-
.with(subject,
|
85
|
+
.with(subject, raw_collection)
|
91
86
|
|
92
87
|
subject.create_collection('volatile_collection', is_volatile: true)
|
93
88
|
end
|
@@ -117,10 +112,10 @@ describe Ashikawa::Core::Database do
|
|
117
112
|
it 'should create an edge collection when asked' do
|
118
113
|
expect(connection).to receive(:send_request)
|
119
114
|
.with('collection', post: { name: 'volatile_collection', type: 3 })
|
120
|
-
.and_return { |path|
|
115
|
+
.and_return { |path| raw_collection }
|
121
116
|
|
122
117
|
expect(Ashikawa::Core::Collection).to receive(:new)
|
123
|
-
.with(subject,
|
118
|
+
.with(subject, raw_collection)
|
124
119
|
|
125
120
|
subject.create_collection('volatile_collection', content_type: :edge)
|
126
121
|
end
|
@@ -128,10 +123,10 @@ describe Ashikawa::Core::Database do
|
|
128
123
|
it 'should fetch a single collection if it exists' do
|
129
124
|
expect(connection).to receive(:send_request)
|
130
125
|
.with('collection/60768679')
|
131
|
-
.and_return { |path|
|
126
|
+
.and_return { |path| raw_collection }
|
132
127
|
|
133
128
|
expect(Ashikawa::Core::Collection).to receive(:new)
|
134
|
-
.with(subject,
|
129
|
+
.with(subject, raw_collection)
|
135
130
|
|
136
131
|
subject.collection(60_768_679)
|
137
132
|
end
|
@@ -139,26 +134,19 @@ describe Ashikawa::Core::Database do
|
|
139
134
|
it 'should fetch a single collection with the array syntax' do
|
140
135
|
expect(connection).to receive(:send_request)
|
141
136
|
.with('collection/60768679')
|
142
|
-
.and_return { |path|
|
137
|
+
.and_return { |path| raw_collection }
|
143
138
|
|
144
139
|
expect(Ashikawa::Core::Collection).to receive(:new)
|
145
|
-
.with(subject,
|
140
|
+
.with(subject, raw_collection)
|
146
141
|
|
147
142
|
subject[60_768_679]
|
148
143
|
end
|
149
144
|
|
150
145
|
it "should create a single collection if it doesn't exist" do
|
151
|
-
|
152
|
-
|
153
|
-
if method.key? :post
|
154
|
-
server_response('collections/60768679')
|
155
|
-
else
|
156
|
-
raise Ashikawa::Core::CollectionNotFoundException
|
157
|
-
end
|
146
|
+
expect(connection).to receive(:send_request).with('collection/new_collection') do
|
147
|
+
raise Ashikawa::Core::CollectionNotFoundException
|
158
148
|
end
|
159
|
-
expect(
|
160
|
-
expect(connection).to receive(:send_request).with('collection', post: { name: 'new_collection' })
|
161
|
-
expect(Ashikawa::Core::Collection).to receive(:new).with(subject, server_response('collections/60768679'))
|
149
|
+
expect(subject).to receive(:create_collection).with('new_collection').and_return(collection)
|
162
150
|
|
163
151
|
subject['new_collection']
|
164
152
|
end
|