spec/resources/statement_spec.rb in thebigdb-1.1.0 vs spec/resources/statement_spec.rb in thebigdb-1.2.0

- old
+ new

@@ -1,29 +1,79 @@ require "spec_helper" describe "Statement" do context "basic request executing" do before do - stub_request(:get, /#{TheBigDB.api_host}\/v#{TheBigDB.api_version}\/statements\/search/).to_return(:body => '{"server_says": "hello world"}') + stub_request(:get, @request_path.call("search")).to_return(:body => '{"server_says": "hello world"}') @request = TheBigDB::Statement(:search, nodes: ["a", "b"]) end it "sets the correct data_sent instance variable" do @request.data_sent.should == { - "headers" => Hash[@request.http_request.to_hash.map{|k,v| [k, v.join] }], - "host" => TheBigDB.api_host, - "port" => TheBigDB.api_port, - "path" => "/v#{TheBigDB.api_version}/statements/search", - "method" => "GET", - "params" => {"nodes" => {"0" => "a", "1" => "b"}} - } + "headers" => Hash[@request.http_request.to_hash.map{|k,v| [k, v.join] }], + "host" => TheBigDB.api_host, + "port" => TheBigDB.api_port, + "path" => "/v#{TheBigDB.api_version}/statements/search", + "method" => "GET", + "params" => {"nodes" => {"0" => "a", "1" => "b"}} + } end it "sets the correct data_received instance variable" do @request.data_received.should include({ - "headers" => Hash[@request.http_response.to_hash.map{|k,v| [k, v.join] }], - "content" => {"server_says" => "hello world"} - }) + "headers" => Hash[@request.http_response.to_hash.map{|k,v| [k, v.join] }], + "content" => {"server_says" => "hello world"} + }) end end +end + +describe "StatementRequest" do + before do + end + + it "makes normal requests" do + @search = TheBigDB.search("a", "b", {match: "blue"}) + @search.with(page: 2) + @search.params.should == {"nodes" => ["a", "b", {match: "blue"}], "page" => 2} + end + + it "cache the response unless the params are modified, or asked to" do + stub_request(:get, @request_path.call("search")).to_return(:body => '{status: "success", statements: []}') + + response = TheBigDB.search("a", "b", {match: "blue"}).with(page: 2) + response.execute + response.execute + + response = TheBigDB.search("a", "b", {match: "red"}).with(page: 2) + response.execute + response.execute! + + a_request(:get, @request_path.call("search")) + .with(query: hash_including({"nodes" => ["a", "b", {match: "blue"}], "page" => "2"})).should have_been_made.once + + a_request(:get, @request_path.call("search")) + .with(query: hash_including({"nodes" => ["a", "b", {match: "red"}], "page" => "2"})).should have_been_made.times(2) + end + + it "has standard actions correctly binded" do + stub_request(:get, @request_path.call("search")).to_return(:body => '{status: "success", statements: []}') + stub_request(:get, @request_path.call("show")).to_return(:body => '{status: "success"}') + stub_request(:post, @request_path.call("create")).to_return(:body => '{status: "success"}') + stub_request(:post, @request_path.call("upvote")).to_return(:body => '{status: "success"}') + stub_request(:post, @request_path.call("downvote")).to_return(:body => '{status: "success"}') + + TheBigDB.search("a", "b", {match: "blue"}).execute + TheBigDB.show("foobar").execute + TheBigDB.create("foobar").execute + TheBigDB.upvote("foobar").execute + TheBigDB.downvote("foobar").execute + + a_request(:get, @request_path.call("search")).should have_been_made.once + a_request(:get, @request_path.call("show")).should have_been_made.once + a_request(:post, @request_path.call("create")).should have_been_made.once + a_request(:post, @request_path.call("upvote")).should have_been_made.once + a_request(:post, @request_path.call("downvote")).should have_been_made.once + end + end \ No newline at end of file