Merge branch 'master' into stable
This commit is contained in:
commit
04197a517e
@ -163,7 +163,7 @@ module RemoteStorage
|
|||||||
end
|
end
|
||||||
|
|
||||||
server.headers["ETag"] = %Q("#{res.headers[:etag]}")
|
server.headers["ETag"] = %Q("#{res.headers[:etag]}")
|
||||||
server.halt 200
|
server.halt existing_metadata.empty? ? 201 : 200
|
||||||
else
|
else
|
||||||
server.halt 500
|
server.halt 500
|
||||||
end
|
end
|
||||||
@ -180,6 +180,7 @@ module RemoteStorage
|
|||||||
|
|
||||||
def delete_data(user, directory, key)
|
def delete_data(user, directory, key)
|
||||||
url = url_for_key(user, directory, key)
|
url = url_for_key(user, directory, key)
|
||||||
|
not_found = false
|
||||||
|
|
||||||
existing_metadata = redis.hgetall "rs:m:#{user}:#{directory}/#{key}"
|
existing_metadata = redis.hgetall "rs:m:#{user}:#{directory}/#{key}"
|
||||||
|
|
||||||
@ -187,15 +188,22 @@ module RemoteStorage
|
|||||||
server.halt 412, "Precondition Failed" unless required_match == %Q("#{existing_metadata["e"]}")
|
server.halt 412, "Precondition Failed" unless required_match == %Q("#{existing_metadata["e"]}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
do_delete_request(url)
|
do_delete_request(url)
|
||||||
|
rescue RestClient::ResourceNotFound
|
||||||
|
not_found = true
|
||||||
|
end
|
||||||
|
|
||||||
log_size_difference(user, existing_metadata["s"], 0)
|
log_size_difference(user, existing_metadata["s"], 0)
|
||||||
delete_metadata_objects(user, directory, key)
|
delete_metadata_objects(user, directory, key)
|
||||||
delete_dir_objects(user, directory)
|
delete_dir_objects(user, directory)
|
||||||
|
|
||||||
|
if not_found
|
||||||
|
server.halt 404, "Not Found"
|
||||||
|
else
|
||||||
server.headers["Etag"] = %Q("#{existing_metadata["e"]}")
|
server.headers["Etag"] = %Q("#{existing_metadata["e"]}")
|
||||||
server.halt 200
|
server.halt 200
|
||||||
rescue RestClient::ResourceNotFound
|
end
|
||||||
server.halt 404, "Not Found"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -74,13 +74,38 @@ describe "App" do
|
|||||||
root_items.must_equal ["food/"]
|
root_items.must_equal ["food/"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "response code" do
|
||||||
|
before do
|
||||||
|
@put_stub = OpenStruct.new(headers: {
|
||||||
|
etag: "bla",
|
||||||
|
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
it "is 201 for newly created objects" do
|
||||||
|
RestClient.stub :put, @put_stub do
|
||||||
|
put "/phil/food/aguacate", "muy deliciosa"
|
||||||
|
end
|
||||||
|
|
||||||
|
last_response.status.must_equal 201
|
||||||
|
end
|
||||||
|
|
||||||
|
it "is 200 for updated objects" do
|
||||||
|
RestClient.stub :put, @put_stub do
|
||||||
|
put "/phil/food/aguacate", "deliciosa"
|
||||||
|
put "/phil/food/aguacate", "muy deliciosa"
|
||||||
|
end
|
||||||
|
|
||||||
|
last_response.status.must_equal 200
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "logging usage size" do
|
context "logging usage size" do
|
||||||
before do
|
before do
|
||||||
@put_stub = OpenStruct.new(headers: {
|
@put_stub = OpenStruct.new(headers: {
|
||||||
etag: "bla",
|
etag: "bla",
|
||||||
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
||||||
})
|
})
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "logs the complete size when creating new objects" do
|
it "logs the complete size when creating new objects" do
|
||||||
@ -146,7 +171,7 @@ describe "App" do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
last_response.status.must_equal 200
|
last_response.status.must_equal 201
|
||||||
|
|
||||||
metadata = redis.hgetall "rs:m:phil:food/aguacate"
|
metadata = redis.hgetall "rs:m:phil:food/aguacate"
|
||||||
metadata["s"].must_equal "2"
|
metadata["s"].must_equal "2"
|
||||||
@ -247,7 +272,7 @@ describe "App" do
|
|||||||
put "/phil/food/aguacate", "si"
|
put "/phil/food/aguacate", "si"
|
||||||
end
|
end
|
||||||
|
|
||||||
last_response.status.must_equal 200
|
last_response.status.must_equal 201
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fails the request if the document already exsits" do
|
it "fails the request if the document already exsits" do
|
||||||
@ -397,14 +422,44 @@ describe "App" do
|
|||||||
last_response.headers["ETag"].must_equal "\"bla\""
|
last_response.headers["ETag"].must_equal "\"bla\""
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a 404 when item doesn't exist" do
|
context "when item doesn't exist" do
|
||||||
|
before do
|
||||||
|
purge_redis
|
||||||
|
|
||||||
|
put_stub = OpenStruct.new(headers: {
|
||||||
|
etag: "bla",
|
||||||
|
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
||||||
|
})
|
||||||
|
|
||||||
|
RestClient.stub :put, put_stub do
|
||||||
|
put "/phil/food/steak", "si"
|
||||||
|
end
|
||||||
|
|
||||||
|
raises_exception = ->(url, headers) { raise RestClient::ResourceNotFound.new }
|
||||||
|
RestClient.stub :delete, raises_exception do
|
||||||
|
delete "/phil/food/steak"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns a 404" do
|
||||||
|
last_response.status.must_equal 404
|
||||||
|
last_response.body.must_equal "Not Found"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "deletes any metadata that might still exist" do
|
||||||
raises_exception = ->(url, headers) { raise RestClient::ResourceNotFound.new }
|
raises_exception = ->(url, headers) { raise RestClient::ResourceNotFound.new }
|
||||||
RestClient.stub :delete, raises_exception do
|
RestClient.stub :delete, raises_exception do
|
||||||
delete "/phil/food/steak"
|
delete "/phil/food/steak"
|
||||||
end
|
end
|
||||||
|
|
||||||
last_response.status.must_equal 404
|
metadata = redis.hgetall "rs:m:phil:food/steak"
|
||||||
last_response.body.must_equal "Not Found"
|
metadata.must_be_empty
|
||||||
|
|
||||||
|
redis.smembers("rs:m:phil:food/:items").must_be_empty
|
||||||
|
redis.hgetall("rs:m:phil:food/").must_be_empty
|
||||||
|
|
||||||
|
redis.smembers("rs:m:phil:/:items").must_be_empty
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "If-Match header" do
|
describe "If-Match header" do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user