spec/mongomodel/concerns/associations/belongs_to_spec.rb in mongomodel-0.5.5 vs spec/mongomodel/concerns/associations/belongs_to_spec.rb in mongomodel-0.5.6
- old
+ new
@@ -1,8 +1,8 @@
require 'spec_helper'
-module MongoModel
+module MongoModel
specs_for(Document, EmbeddedDocument) do
shared_examples_for "assigning correct class to belongs_to association" do
define_class(:User, Document)
define_class(:SpecialUser, :User)
@@ -69,87 +69,100 @@
reloaded.user.should == special_user
end
end
end
end
-
+
describe "belongs_to association" do
define_class(:Article, described_class) do
belongs_to :user
end
-
+
subject { Article.new }
-
+
it_should_behave_like "assigning correct class to belongs_to association"
-
+
describe "setting a different class type" do
define_class(:NonUser, Document)
-
+
let(:non_user) { NonUser.create! }
-
+
it "raises a AssociationTypeMismatch exception" do
lambda { subject.user = non_user }.should raise_error(AssociationTypeMismatch, "User expected, got NonUser")
end
end
-
+
describe "#build_user" do
let(:user) { subject.build_user(:id => '123') }
-
+
it "returns a new unsaved user with the given attributes" do
user.should be_an_instance_of(User)
user.should be_a_new_record
user.id.should == '123'
end
end
-
+
describe "#create_user" do
it "returns a new saved user with the given attributes" do
user = subject.create_user(:id => '123')
user.should be_an_instance_of(User)
user.should_not be_a_new_record
user.id.should == '123'
end
end
end
-
+
+ describe "belongs_to association with custom foreign_key" do
+ define_class(:Article, described_class) do
+ belongs_to :user, :foreign_key => :author_id
+ end
+
+ subject { Article.new }
+
+ it "uses the foreign key as the reference property" do
+ user = subject.build_user(:id => '123')
+ subject.author_id.should == '123'
+ end
+ end
+
describe "polymorphic belongs_to association" do
define_class(:Article, described_class) do
belongs_to :user, :polymorphic => true
end
-
+
subject { Article.new }
-
+
define_class(:NonUser, Document)
-
+
let(:non_user) { NonUser.create! }
-
+
it_should_behave_like "assigning correct class to belongs_to association"
-
+
describe "setting a different class type" do
it "sets successfully" do
subject.user = non_user
subject.user.should == non_user
end
end
-
+
context "when loading from database" do
subject { Article.new(:user => user) }
-
+
if specing?(EmbeddedDocument)
define_class(:ArticleParent, Document) do
property :article, Article
end
-
+
let(:parent) { ArticleParent.create!(:article => subject) }
let(:reloaded) { ArticleParent.find(parent.id).article }
else
before(:each) { subject.save! }
let(:reloaded) { Article.find(subject.id) }
end
-
+
describe "setting a different class type" do
subject { Article.new(:user => non_user) }
-
+
it "loads successfully" do
reloaded.user.should == non_user
end
end
end