forked from solnic/dm-mongo-adapter
/
associations_spec.rb
140 lines (114 loc) · 3.27 KB
/
associations_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
describe "associations" do
before :all do
cleanup_models :User, :Group
class ::User
include DataMapper::Mongo::Resource
property :id, ObjectID
property :group_id, DBRef
property :name, String
property :age, Integer
end
class ::Group
include DataMapper::Mongo::Resource
property :id, ObjectID
property :name, String
end
class ::Friend
include DataMapper::Mongo::Resource
property :id, ObjectID
property :name, String
end
User.belongs_to :group
Group.has Group.n, :users
User.has User.n, :friends
end
before :each do
$db.drop_collection('users')
$db.drop_collection('groups')
end
describe "belongs_to" do
before do
@john = User.create(:name => 'john', :age => 101)
@jane = User.create(:name => 'jane', :age => 102)
@group = Group.create(:name => 'dm hackers')
end
it "should set parent object _id in the db ref" do
# lambda {
# @john.group = @group
# @john.save
# }.should_not raise_error
#
# @john.group_id.should eql(@group.id)
end
it "should fetch parent object" do
user = User.create(:name => 'jane')
user.group_id = @group.id
user.group.should eql(@group)
end
it "should work with SEL" do
users = User.all(:name => /john|jane/)
users.each { |u| u.update(:group_id => @group.id) }
users.each do |user|
user.group.should_not be_nil
end
end
end
describe "has many" do
before :each do
@john = User.create(:name => 'john', :age => 101)
@jane = User.create(:name => 'jane', :age => 102)
@group = Group.create(:name => 'dm hackers')
[@john, @jane].each { |user| user.update(:group_id => @group.id) }
end
# @done
it "should get children" do
@group.users.size.should eql(2)
end
it "should add new children with <<" do
user = User.new(:name => 'kyle')
@group.users << user
user.group_id.should eql(@group.id)
@group.users.size.should eql(3)
end
# @done
it "should replace children" do
user = User.create(:name => 'stan')
@group.users = [user]
@group.users.size.should eql(1)
@group.users.first.should eql(user)
end
it "should fetch children matching conditions" do
users = @group.users.all(:name => 'john')
users.size.should eql(1)
end
end
describe "nested saves" do
before :each do
#@friend1 = Friend.new
#@friend2 = Friend.new
@user1 = User.new
@user2 = User.new
@group = Group.new(:users =>
[
{:friends =>
[{:name => "blah"}, {:name => "blah2"}]
},
{:friends =>
[{:name => "blah3"},{:name => "blah4"}]
}])
end
# @done
it "should save nested objects" do
#@group.users << @user1
#@group.users << @user2
@group.save
Group.get(@group.id).users.all.each do |u|
u.group_id.should == @group.id
u.friends.each do |f|
f.user_id.should == u.id
end
end
end
end
end