forked from saimonmoore/dm-counter-cache
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dm-counter-cache_spec.rb
84 lines (64 loc) · 2.2 KB
/
dm-counter-cache_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
require 'pathname'
require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
describe DataMapper::CounterCacheable do
before :all do
class Post
include DataMapper::Resource
property :id, Integer, :serial => true
has n, :comments
end
class Comment
include DataMapper::Resource
include DataMapper::CounterCacheable
property :id, Integer, :serial => true
belongs_to :post, :counter_cache => true
end
class User
include DataMapper::Resource
property :id, Integer, :serial => true
has n, :group_memberships
has n, :groups, :through => :group_memberships, :class_name => "Group", :remote_name => :group, :parent_key => [:id], :child_key => [:user_id]
end
class Group
include DataMapper::Resource
property :id, Integer, :serial => true
has n, :group_memberships
has n, :members, :through => :group_memberships, :class_name => "User", :remote_name => :user, :parent_key => [:id], :child_key => [:group_id]
end
class GroupMembership
include DataMapper::Resource
include DataMapper::CounterCacheable
property :id, Serial
belongs_to :group, :counter_cache => :members_count
belongs_to :user, :counter_cache => :groups_count
end
GroupMembership.auto_migrate!
User.auto_migrate!
Group.auto_migrate!
Comment.auto_migrate!
Post.auto_migrate!
end
before(:each) do
@post = Post.create
@user = User.create
@group = Group.create
end
it "should increment comments_count" do
@post.comments.create
@post.reload.comments_count.should == 1
@user.group_memberships.create(:group => @group)
@user.reload.groups_count.should == 1
@group.reload.members_count.should == 1
end
it "should decrement comments_count" do
comment1 = @post.comments.create
comment2 = @post.comments.create
comment2.destroy
@post.reload.comments_count.should == 1
gm1 = @user.group_memberships.create(:group => @group)
gm2 = @user.group_memberships.create(:group => @group)
gm2.destroy
@user.reload.groups_count.should == 1
@group.reload.members_count.should == 1
end
end