1 require File.dirname(__FILE__) + '/spec_helper.rb'
4 include CouchObject::Persistable
15 describe CouchObject::Persistable, "when mixed into a Class" do
20 @empty_response = mock("couch response")
21 @empty_response.stub!(:code).and_return(200)
22 @empty_response.stub!(:body).and_return("{}")
24 @response = mock("couch response")
25 @response.stub!(:body).and_return("{\"ok\":true, \"_id\":\"123BAC\", \"_rev\":\"946B7D1C\"}")
26 @response.stub!(:code).and_return(200)
28 @document_response = mock("couch response")
29 @document_response.stub!(:body).and_return("{\"title\":\"My Document\", \"_id\":\"123BAC\", \"_rev\":\"946B7D1C\"}")
30 @document_response.stub!(:code).and_return(200)
33 it "should give the class a save method that saves the object" do
34 CouchObject::Database.should_receive(:new).and_return(@db)
35 @db.should_receive(:post).with("", @bike.to_json).and_return(@empty_response)
39 it "should raise if no to_couch on class" do
40 klass = Class.new{ include CouchObject::Persistable }
41 proc{ klass.new.to_json }.should raise_error(CouchObject::Persistable::NoToCouchMethodError)
44 it "should return the doc id on successfull save" do
45 CouchObject::Database.should_receive(:new).and_return(@db)
46 @db.should_receive(:post).with("", @bike.to_json).and_return(@response)
47 @bike.save("foo")["_id"].should == "123BAC"
50 it "should assign the returned id to itself on successful save" do
51 CouchObject::Database.should_receive(:new).and_return(@db)
52 @db.should_receive(:post).with("", @bike.to_json).and_return(@response)
54 @bike.id.should == "123BAC"
57 it "should know if itself is a new object" do
58 CouchObject::Database.should_receive(:new).and_return(@db)
59 @db.should_receive(:post).with("", @bike.to_json).and_return(@response)
60 @bike.new?.should == true
62 @bike.new?.should == false
65 it "should get document by id" do
66 CouchObject::Database.should_receive(:new).and_return(@db)
67 @db.should_receive(:get).with("123BAC").and_return(@document_response)
68 Bike.get_by_id("foo", "123BAC")["title"].should == "My Document"