spec/toy/persistence_spec.rb in toystore-0.8.3 vs spec/toy/persistence_spec.rb in toystore-0.9.0
- old
+ new
@@ -5,48 +5,43 @@
let(:klass) do
Class.new { include Toy::Store }
end
- describe ".store" do
+ describe ".adapter" do
it "sets if arguments and reads if not" do
- User.store(:memory, {})
- User.store.should == Adapter[:memory].new({})
+ User.adapter(:memory, {})
+ User.adapter.should == Adapter[:memory].new({})
end
it "defaults options to empty hash" do
Adapter[:memory].should_receive(:new).with({}, {})
- User.store(:memory, {})
+ User.adapter(:memory, {})
end
it "works with options" do
Adapter[:memory].should_receive(:new).with({}, :something => true)
- User.store(:memory, {}, :something => true)
+ User.adapter(:memory, {}, :something => true)
end
it "raises argument error if name provided but not client" do
lambda do
- klass.store(:memory)
+ klass.adapter(:memory)
end.should raise_error(ArgumentError, 'Client is required')
end
- it "raises argument error if no name or client provided and has not been set" do
- lambda do
- klass.store
- end.should raise_error(StandardError, 'No store has been set')
+ it "defaults to memory adapter if no name or client provided and has not been set" do
+ klass.adapter.should_not be_nil
+ klass.adapter.client.should eql({})
end
- end
- describe ".has_store?" do
- it "returns true if store set" do
- klass.store(:memory, {})
- klass.has_store?.should be_true
+ it "allows changing adapter even after use of default" do
+ hash = {}
+ klass.adapter
+ klass.adapter :memory, hash
+ klass.adapter.client.should equal(hash)
end
-
- it "returns false if store not set" do
- klass.has_store?.should be_false
- end
end
describe ".create" do
before do
User.attribute :name, String
@@ -54,11 +49,11 @@
@doc = User.create(:name => 'John', :age => 50)
end
let(:doc) { @doc }
it "creates key in database with attributes" do
- User.store.read(doc.id).should == {
+ User.adapter.read(doc.id).should == {
'name' => 'John',
'age' => 50,
}
end
@@ -111,16 +106,65 @@
doc = User.create
User.destroy("taco:bell:tacos")
end
end
- describe "#store" do
+ describe "#adapter" do
it "delegates to class" do
- User.new.store.should equal(User.store)
+ User.new.adapter.should equal(User.adapter)
end
end
+ describe "declaring an attribute with an abbreviation" do
+ before do
+ User.attribute(:twitter_access_token, String, :abbr => 'tat')
+ end
+
+ it "persists to adapter using abbreviation" do
+ user = User.create(:twitter_access_token => '1234')
+ raw = user.adapter.read(user.id)
+ raw['tat'].should == '1234'
+ raw.should_not have_key('twitter_access_token')
+ end
+
+ it "loads from store correctly" do
+ user = User.create(:twitter_access_token => '1234')
+ user = User.get(user.id)
+ user.twitter_access_token.should == '1234'
+ user.tat.should == '1234'
+ end
+ end
+
+ describe "#initialize_from_database" do
+ before do
+ User.attribute(:age, Integer, :default => 20)
+ @user = User.allocate
+ end
+
+ it "sets new record to false" do
+ @user.initialize_from_database
+ @user.should_not be_new_record
+ end
+
+ it "sets attributes" do
+ @user.initialize_from_database('age' => 21)
+ end
+
+ it "sets defaults" do
+ @user.initialize_from_database
+ @user.age.should == 20
+ end
+
+ it "does not fail with nil" do
+ @user.initialize_from_database(nil).should == @user
+ end
+
+ it "returns self" do
+ @user.initialize_from_database.should == @user
+ end
+ end
+
describe "#new_record?" do
it "returns true if new" do
User.new.should be_new_record
end
@@ -161,35 +205,35 @@
it "saves to key" do
User.key?(@doc.id)
end
it "does not persist virtual attributes" do
- @doc.store.read(@doc.id).should_not include('accepted_terms')
+ @doc.adapter.read(@doc.id).should_not include('accepted_terms')
end
end
context "with existing record" do
before do
@doc = User.create(:name => 'John', :age => 28)
@key = @doc.id
- @value = User.store.read(@doc.id)
+ @value = User.adapter.read(@doc.id)
@doc.name = 'Bill'
@doc.accepted_terms = false
@doc.save
end
let(:doc) { @doc }
- it "stores in same key" do
+ it "does not change primary key" do
doc.id.should == @key
end
- it "updates value in store" do
- User.store.read(doc.id).should_not == @value
+ it "updates value in adapter" do
+ User.adapter.read(doc.id).should_not == @value
end
it "does not persist virtual attributes" do
- @doc.store.read(@doc.id).should_not include('accepted_terms')
+ @doc.adapter.read(@doc.id).should_not include('accepted_terms')
end
it "updates the attributes in the instance" do
doc.name.should == 'Bill'
end
@@ -209,19 +253,19 @@
User.get(user.id).name.should == 'Geoffrey'
end
end
describe "#delete" do
- it "should remove the instance from the store" do
+ it "should remove the instance" do
doc = User.create
doc.delete
User.key?(doc.id).should be_false
end
end
describe "#destroy" do
- it "should remove the instance from the store" do
+ it "should remove the instance" do
doc = User.create
doc.destroy
User.key?(doc.id).should be_false
end
end
@@ -234,8 +278,22 @@
it "should be true if deleted" do
doc = User.create
doc.delete
doc.should be_destroyed
+ end
+ end
+
+ describe "#clone" do
+ it "returns instance that is a new_record" do
+ User.new.clone.should be_new_record
+ User.create.clone.should be_new_record
+ end
+
+ it "is never destroyed" do
+ user = User.create
+ user.clone.should_not be_destroyed
+ user.destroy
+ user.clone.should_not be_destroyed
end
end
end
\ No newline at end of file