social_stream 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. data/app/controllers/api_controller.rb +1 -1
  2. data/app/controllers/contacts_controller.rb +1 -1
  3. data/app/controllers/conversations_controller.rb +5 -5
  4. data/app/controllers/groups_controller.rb +1 -0
  5. data/app/controllers/likes_controller.rb +17 -5
  6. data/app/controllers/messages_controller.rb +3 -1
  7. data/app/controllers/profiles_controller.rb +4 -0
  8. data/app/controllers/representations_controller.rb +12 -1
  9. data/app/controllers/tags_controller.rb +15 -0
  10. data/app/controllers/users_controller.rb +3 -0
  11. data/app/helpers/activities_helper.rb +13 -6
  12. data/app/models/activity.rb +53 -52
  13. data/app/models/activity_object.rb +2 -0
  14. data/app/models/actor.rb +85 -19
  15. data/app/models/avatar.rb +2 -1
  16. data/app/models/like.rb +28 -13
  17. data/app/models/permission.rb +7 -7
  18. data/app/models/profile.rb +1 -1
  19. data/app/models/relation/custom.rb +111 -0
  20. data/app/models/relation/public.rb +42 -0
  21. data/app/models/relation.rb +1 -89
  22. data/app/models/sphere.rb +7 -0
  23. data/app/models/tie.rb +65 -52
  24. data/app/models/tie_activity.rb +38 -0
  25. data/app/views/activities/_new.html.erb +4 -4
  26. data/app/views/activities/_options.html.erb +2 -2
  27. data/app/views/actors/_actor.html.erb +0 -0
  28. data/app/views/avatars/index.html.erb +5 -2
  29. data/app/views/comments/_new.html.erb +2 -2
  30. data/app/views/contacts/index.html.erb +5 -1
  31. data/app/views/conversations/edit.html.erb +4 -0
  32. data/app/views/conversations/index.html.erb +5 -1
  33. data/app/views/conversations/show.html.erb +4 -0
  34. data/app/views/frontpage/index.html.erb +4 -0
  35. data/app/views/groups/_sidebar_index.html.erb +7 -42
  36. data/app/views/groups/index.html.erb +3 -0
  37. data/app/views/groups/new.html.erb +3 -0
  38. data/app/views/groups/show.html.erb +7 -0
  39. data/app/views/layouts/_account.html.erb +16 -0
  40. data/app/views/layouts/_footer.html.erb +1 -1
  41. data/app/views/layouts/_header.erb +7 -22
  42. data/app/views/layouts/_representation.html.erb +25 -12
  43. data/app/views/layouts/application.html.erb +6 -3
  44. data/app/views/layouts/frontpage.html.erb +1 -1
  45. data/app/views/likes/create.js.erb +1 -1
  46. data/app/views/likes/destroy.js.erb +1 -1
  47. data/app/views/messages/new.html.erb +7 -5
  48. data/app/views/profiles/_profile.html.erb +20 -0
  49. data/app/views/profiles/edit.html.erb +42 -0
  50. data/app/views/profiles/show.html.erb +4 -0
  51. data/app/views/profiles/update.js.erb +5 -0
  52. data/app/views/subjects/_toolbar_profile_menu_tie_options.html.erb +3 -1
  53. data/app/views/ties/_new.html.erb +1 -1
  54. data/app/views/users/index.html.erb +4 -0
  55. data/app/views/users/show.html.erb +5 -0
  56. data/config/locales/en.yml +54 -1
  57. data/config/routes.rb +3 -1
  58. data/lib/generators/social_stream/install_generator.rb +2 -1
  59. data/lib/generators/social_stream/templates/migration.rb +23 -27
  60. data/lib/generators/social_stream/templates/public/images/btn/error.png +0 -0
  61. data/lib/generators/social_stream/templates/public/images/btn/info.png +0 -0
  62. data/lib/generators/social_stream/templates/public/images/btn/like.png +0 -0
  63. data/lib/generators/social_stream/templates/public/images/btn/nolike.png +0 -0
  64. data/lib/generators/social_stream/templates/public/images/btn/success.png +0 -0
  65. data/lib/generators/social_stream/templates/public/images/btn/warning.png +0 -0
  66. data/lib/generators/social_stream/templates/public/javascripts/ajax.paginate.js +12 -19
  67. data/lib/generators/social_stream/templates/public/javascripts/jquery.validate.js +1 -1
  68. data/lib/generators/social_stream/templates/public/javascripts/main.js +20 -10
  69. data/lib/generators/social_stream/templates/public/stylesheets/default/base.css +21 -4
  70. data/lib/generators/social_stream/templates/public/stylesheets/default/header.css +8 -3
  71. data/lib/generators/social_stream/templates/relations.yml +7 -13
  72. data/lib/social_stream/ability.rb +39 -20
  73. data/lib/social_stream/controllers/helpers.rb +6 -0
  74. data/lib/social_stream/models/object.rb +8 -4
  75. data/lib/social_stream/models/subject.rb +6 -0
  76. data/lib/social_stream/rails.rb +6 -3
  77. data/lib/social_stream/version.rb +1 -1
  78. data/lib/tasks/db/populate.rake +11 -1
  79. data/social_stream.gemspec +7 -8
  80. data/spec/controllers/comments_controller_spec.rb +6 -2
  81. data/spec/controllers/posts_controller_spec.rb +93 -5
  82. data/spec/controllers/profiles_controller_spec.rb +58 -1
  83. data/spec/controllers/representations_controller_spec.rb +51 -0
  84. data/spec/controllers/users_controller_spec.rb +28 -0
  85. data/spec/dummy/config/relations.yml +7 -13
  86. data/spec/dummy/db/schema.rb +2 -13
  87. data/spec/factories/tie.rb +1 -1
  88. data/spec/models/activity_spec.rb +28 -67
  89. data/spec/models/profile_spec.rb +38 -0
  90. data/spec/models/tie_activity_spec.rb +88 -31
  91. data/spec/models/tie_spec.rb +20 -14
  92. data/spec/support/db.rb +8 -10
  93. data/spec/support/migrations.rb +24 -0
  94. metadata +74 -59
@@ -2,6 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
 
4
4
  describe PostsController do
5
+ include SocialStream::TestHelpers
5
6
  include SocialStream::TestHelpers::Controllers
6
7
 
7
8
  render_views
@@ -13,16 +14,46 @@ describe PostsController do
13
14
  end
14
15
 
15
16
  describe "posts to user" do
16
- before do
17
- model_assigned_to @user.sent_ties.received_by(@user).related_by(@user.relations.sort.first).first
17
+ describe "with first relation" do
18
+ before do
19
+ tie = @user.sent_ties.received_by(@user).related_by(@user.relations.sort.first).first
20
+ model_assigned_to tie
21
+ @current_model = Factory(:post, :_activity_tie_id => tie)
22
+ end
23
+
24
+ it_should_behave_like "Allow Creating"
25
+ it_should_behave_like "Allow Destroying"
26
+ end
27
+
28
+ describe "with last relation" do
29
+ before do
30
+ tie = @user.sent_ties.received_by(@user).related_by(@user.relations.sort.last).first
31
+ model_assigned_to tie
32
+ @current_model = Factory(:post, :_activity_tie_id => tie)
33
+ end
34
+
35
+ it_should_behave_like "Allow Creating"
36
+ it_should_behave_like "Allow Destroying"
37
+ end
38
+
39
+ describe "with public relation" do
40
+ before do
41
+ tie = @user.sent_ties.received_by(@user).related_by(@user.relation_public).first
42
+ model_assigned_to tie
43
+ @current_model = Factory(:post, :_activity_tie_id => tie)
44
+ end
45
+
46
+ it_should_behave_like "Allow Creating"
47
+ it_should_behave_like "Allow Destroying"
18
48
  end
19
49
 
20
- it_should_behave_like "Allow Creating"
21
50
  end
22
51
 
23
52
  describe "post to friend" do
24
53
  before do
25
- model_assigned_to Factory(:friend, :receiver => @user.actor)
54
+ friend = Factory(:friend, :receiver => @user.actor).sender
55
+
56
+ model_assigned_to friend.activity_ties_for(@user).first
26
57
  end
27
58
 
28
59
  it_should_behave_like "Allow Creating"
@@ -30,12 +61,69 @@ describe PostsController do
30
61
 
31
62
  describe "post to acquaintance" do
32
63
  before do
33
- model_assigned_to Factory(:acquaintance, :receiver => @user.actor)
64
+ ac = Factory(:acquaintance, :receiver => @user.actor).sender
65
+
66
+ model_assigned_to Factory(:friend, :sender => @user.actor, :receiver => ac)
34
67
  end
35
68
 
36
69
  it_should_behave_like "Deny Creating"
37
70
  end
38
71
 
72
+ describe "posts represented group" do
73
+ before do
74
+ @group = Factory(:member, :receiver_id => @user.actor_id).sender_subject
75
+ end
76
+
77
+ describe "with public relation" do
78
+ before do
79
+ tie = @group.activity_ties_for(@user).first
80
+ model_assigned_to tie
81
+ @current_model = Factory(:post, :_activity_tie_id => tie)
82
+ end
83
+
84
+ it_should_behave_like "Allow Creating"
85
+ it_should_behave_like "Allow Destroying"
86
+ end
87
+
88
+ context "representing the group" do
89
+ before do
90
+ represent(@group)
91
+ end
92
+
93
+ describe "with first relation" do
94
+ before do
95
+ tie = @group.sent_ties.received_by(@group).related_by(@group.relations.sort.first).first
96
+ model_assigned_to tie
97
+ @current_model = Factory(:post, :_activity_tie_id => tie)
98
+ end
99
+
100
+ it_should_behave_like "Allow Creating"
101
+ it_should_behave_like "Allow Destroying"
102
+ end
103
+
104
+ describe "with last relation" do
105
+ before do
106
+ tie = @group.sent_ties.received_by(@group).related_by(@group.relations.sort.last).first
107
+ model_assigned_to tie
108
+ @current_model = Factory(:post, :_activity_tie_id => tie)
109
+ end
110
+
111
+ it_should_behave_like "Allow Creating"
112
+ it_should_behave_like "Allow Destroying"
113
+ end
114
+
115
+ describe "with public relation" do
116
+ before do
117
+ tie = @group.sent_ties.received_by(@group).related_by(@group.relation_public).first
118
+ model_assigned_to tie
119
+ @current_model = Factory(:post, :_activity_tie_id => tie)
120
+ end
121
+
122
+ it_should_behave_like "Allow Creating"
123
+ it_should_behave_like "Allow Destroying"
124
+ end
125
+ end
126
+ end
39
127
  end
40
128
  end
41
129
 
@@ -21,11 +21,42 @@ describe ProfilesController do
21
21
 
22
22
  assert_response :success
23
23
  end
24
+
25
+ it "should not render others edit" do
26
+ begin
27
+ get :edit, :user_id => Factory(:user).to_param
28
+
29
+ assert false
30
+ rescue CanCan::AccessDenied
31
+ assert true
32
+ end
33
+ end
34
+
35
+ it "should update" do
36
+ put :update, :user_id => @user.to_param, :profile => { :organization => "Social Stream" }
37
+
38
+ response.should redirect_to([@user, :profile])
39
+ end
40
+
41
+ it "should not update other's" do
42
+ begin
43
+ put :update, :user_id => Factory(:user).to_param, :profile => { :organization => "Social Stream" }
44
+
45
+ assert false
46
+ rescue CanCan::AccessDenied
47
+ assert true
48
+ end
49
+ end
50
+
24
51
  end
25
52
 
26
53
  context "for a group" do
27
54
  before do
28
- @group = Factory(:group)
55
+ membership = Factory(:member)
56
+ @group = membership.sender_subject
57
+ @user = membership.receiver_subject
58
+
59
+ sign_in @user
29
60
  represent @group
30
61
  end
31
62
 
@@ -40,6 +71,32 @@ describe ProfilesController do
40
71
 
41
72
  assert_response :success
42
73
  end
74
+
75
+ it "should not render others edit" do
76
+ begin
77
+ get :edit, :group_id => Factory(:group).to_param
78
+
79
+ assert false
80
+ rescue CanCan::AccessDenied
81
+ assert true
82
+ end
83
+ end
84
+
85
+ it "should update" do
86
+ put :update, :group_id => @group.to_param, :profile => { :organization => "Social Stream" }
87
+
88
+ response.should redirect_to([@group, :profile])
89
+ end
90
+
91
+ it "should not update other's" do
92
+ begin
93
+ put :update, :group_id => Factory(:group).to_param, :profile => { :organization => "Social Stream" }
94
+
95
+ assert false
96
+ rescue CanCan::AccessDenied
97
+ assert true
98
+ end
99
+ end
43
100
  end
44
101
  end
45
102
 
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe RepresentationsController do
4
+ include ActionController::RecordIdentifier
5
+
6
+ describe "create" do
7
+ context "with logged user" do
8
+ before do
9
+ @user = Factory(:user)
10
+ sign_in @user
11
+ end
12
+
13
+ context "representing herself" do
14
+ it "should redirect_to root" do
15
+ post :create, :representation => { :subject_dom_id => dom_id(@user) }
16
+
17
+ response.should redirect_to(:root)
18
+ end
19
+ end
20
+
21
+ context "representing own group" do
22
+ before do
23
+ @group = Factory(:member, :receiver => @user.actor).sender_subject
24
+ end
25
+
26
+ it "should redirect_to root" do
27
+ post :create, :representation => { :subject_dom_id => dom_id(@group) }
28
+
29
+ response.should redirect_to(:root)
30
+ end
31
+ end
32
+
33
+ context "representing other group" do
34
+ before do
35
+ @group = Factory(:group)
36
+ end
37
+
38
+ it "should deny access" do
39
+ begin
40
+ post :create, :representation => { :subject_dom_id => dom_id(@group) }
41
+
42
+ assert false
43
+ rescue CanCan::AccessDenied
44
+ assert true
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
@@ -15,6 +15,16 @@ describe UsersController do
15
15
 
16
16
  assert_response :success
17
17
  end
18
+
19
+ it "should not render edit" do
20
+ begin
21
+ get :edit, :id => Factory(:user).to_param
22
+
23
+ assert false
24
+ rescue CanCan::AccessDenied
25
+ assert true
26
+ end
27
+ end
18
28
  end
19
29
 
20
30
  describe "when authenticated" do
@@ -41,6 +51,24 @@ describe UsersController do
41
51
 
42
52
  assert_response :success
43
53
  end
54
+
55
+ it "should render edit page" do
56
+ pending "Account section"
57
+ get :edit, :id => @user.to_param
58
+
59
+ assert_response :success
60
+ end
61
+
62
+ it "should not render other's edit" do
63
+ begin
64
+ get :edit, :id => Factory(:user).to_param
65
+
66
+ assert false
67
+ rescue CanCan::AccessDenied
68
+ assert true
69
+ end
70
+ end
71
+
44
72
  end
45
73
  end
46
74
 
@@ -12,20 +12,17 @@ user:
12
12
  name: friend
13
13
  permissions:
14
14
  - [ follow ] # follow the activities of the friend
15
- - [ create, activity, tie ] # let the friend create activities to the same tie
15
+ - [ create, activity ] # let the friend create activities
16
16
  - [ read, activity, star_ties ] # friend can read activities from the other friends
17
- - [ update, activity, tie ] # update activities to the same tie
18
- - [ destroy, activity, tie ] # destroy activities to the same tie
17
+ - [ update, activity ] # update her activities
18
+ - [ destroy, activity ] # destroy her activities
19
+ sphere: personal
19
20
  acquaintance:
20
21
  name: acquaintance
21
22
  parent: friend # friend relation is stronger than acquaintance
22
23
  permissions:
23
24
  - [ read, activity, star_ties ]
24
- public:
25
- name: public
26
- parent: acquaintance # acquaintance is stronger than public
27
- permissions:
28
- - [ read, activity, star_ties ]
25
+ sphere: personal
29
26
 
30
27
  group:
31
28
  member:
@@ -37,13 +34,10 @@ group:
37
34
  - [ update, activity, weak_star_ties ] # update and destroy activities to members,
38
35
  - [ destroy, activity, weak_star_ties ] # acquaintance and public
39
36
  - [ read, tie, weak_star_ties ]
37
+ sphere: organization
40
38
  partner:
41
39
  name: partner
42
40
  parent: member # member is stronger than partner
43
41
  permissions:
44
42
  - [ read, activity, star_ties ]
45
- public:
46
- name: public
47
- parent: partner # partner is stronger than public
48
- permissions:
49
- - [ read, activity, star_ties ]
43
+ sphere: organization
@@ -1,18 +1,7 @@
1
- # Use Social Stream migration template
2
- path = %w( .. .. .. lib generators social_stream templates migration )
3
- path.unshift File.dirname(__FILE__)
4
-
5
- require File.join(*path)
6
-
7
- # Use Mailboxer migration template
8
- finder = Gem::GemPathSearcher.new
9
- mailboxer_spec = finder.find('mailboxer')
10
- mailboxer_migration =
11
- finder.matching_files(mailboxer_spec,
12
- File.join("generators", "mailboxer", "templates", "migration")).first
13
- require mailboxer_migration
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'support', 'migrations')
14
2
 
15
3
  ActiveRecord::Schema.define(:version => 0) do
16
4
  CreateMailboxer.up
17
5
  CreateSocialStream.up
6
+ ActsAsTaggableOnMigration.up
18
7
  end
@@ -14,7 +14,7 @@ Factory.define :acquaintance, :parent => :tie do |t|
14
14
  end
15
15
 
16
16
  Factory.define :public, :parent => :tie do |t|
17
- t.after_build { |u| u.relation = u.sender.relation('public') }
17
+ t.after_build { |u| u.relation = u.sender.relation_public }
18
18
  end
19
19
 
20
20
  # Group ties
@@ -74,18 +74,32 @@ end
74
74
  describe Activity do
75
75
  include ActivityTestHelper
76
76
 
77
- describe "with like subactivity" do
78
- before do
79
- @like_activity = Factory(:like_activity)
80
- @activity = @like_activity.parent
81
- end
77
+ describe "like" do
78
+
79
+ describe "activity" do
80
+ before do
81
+ @like_activity = Factory(:like_activity)
82
+ @activity = @like_activity.parent
83
+ end
82
84
 
83
- it "should recognize the user who likes it" do
84
- assert @activity.liked_by?(@like_activity.sender)
85
+ it "should recognize the user who likes it" do
86
+ assert @activity.liked_by?(@like_activity.sender)
87
+ end
88
+
89
+ it "should not recognize the user who does not like it" do
90
+ assert ! @activity.liked_by?(Factory(:user))
91
+ end
85
92
  end
86
93
 
87
- it "should not recognize the user who does not like it" do
88
- assert ! @activity.liked_by?(Factory(:user))
94
+ describe "actor" do
95
+ before do
96
+ @tie = Factory(:friend)
97
+ @like = Like.build(@tie.sender, @tie.receiver).save
98
+ end
99
+
100
+ it "should recognize the user who likes it" do
101
+ assert @tie.receiver.liked_by?(@tie.sender)
102
+ end
89
103
  end
90
104
  end
91
105
 
@@ -216,11 +230,11 @@ describe Activity do
216
230
  end
217
231
  end
218
232
 
219
- describe "belonging to public tie" do
233
+ describe "belonging to public self tie" do
220
234
 
221
235
  before do
222
236
  user = Factory(:user)
223
- tie = user.ties.where(:relation_id => user.relation('public')).first
237
+ tie = user.ties.where(:relation_id => user.relation_public).first
224
238
  create_activity_assigned_to(tie)
225
239
  end
226
240
 
@@ -229,10 +243,10 @@ describe Activity do
229
243
  create_ability_accessed_by_receiver
230
244
  end
231
245
 
232
- it_should_behave_like "Denies Creating"
246
+ it_should_behave_like "Allows Creating"
233
247
  it_should_behave_like "Allows Reading"
234
- it_should_behave_like "Denies Updating"
235
- it_should_behave_like "Denies Destroying"
248
+ it_should_behave_like "Allows Updating"
249
+ it_should_behave_like "Allows Destroying"
236
250
  end
237
251
 
238
252
  describe "accessed by a friend" do
@@ -328,57 +342,4 @@ describe Activity do
328
342
  it_should_behave_like "Denies Destroying"
329
343
  end
330
344
  end
331
-
332
- describe "belonging to public tie from a member" do
333
-
334
- before do
335
- create_activity_assigned_to(Factory(:member).related('public'))
336
- end
337
-
338
- describe "accessed by sender" do
339
- before do
340
- create_ability_accessed_by_receiver
341
- end
342
-
343
- it_should_behave_like "Allows Creating"
344
- it_should_behave_like "Allows Reading"
345
- it_should_behave_like "Allows Updating"
346
- it_should_behave_like "Allows Destroying"
347
- end
348
-
349
- describe "accessed by other member" do
350
- before do
351
- create_ability_accessed_by :member
352
- end
353
-
354
- it_should_behave_like "Denies Creating"
355
- it_should_behave_like "Allows Reading"
356
- it_should_behave_like "Allows Updating"
357
- it_should_behave_like "Allows Destroying"
358
- end
359
-
360
-
361
- describe "accessed by partner" do
362
- before do
363
- create_ability_accessed_by :partner
364
- end
365
-
366
- it_should_behave_like "Denies Creating"
367
- it_should_behave_like "Allows Reading"
368
- it_should_behave_like "Denies Updating"
369
- it_should_behave_like "Denies Destroying"
370
- end
371
-
372
- describe "accessed publicly" do
373
- before do
374
- create_ability_accessed_publicly
375
- end
376
-
377
- it_should_behave_like "Denies Creating"
378
- it_should_behave_like "Allows Reading"
379
- it_should_behave_like "Denies Updating"
380
- it_should_behave_like "Denies Destroying"
381
- end
382
- end
383
-
384
345
  end
@@ -0,0 +1,38 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Profile do
4
+ context "belonging to a user" do
5
+ before do
6
+ @profile = Factory(:user).profile
7
+ end
8
+
9
+ context "accessed by her" do
10
+ before do
11
+ @ability = Ability.new(@profile.subject)
12
+ end
13
+
14
+ it "should allow read" do
15
+ @ability.should be_able_to(:read, @profile)
16
+ end
17
+
18
+ it "should allow update" do
19
+ @ability.should be_able_to(:update, @profile)
20
+ end
21
+ end
22
+
23
+ context "accessed by other" do
24
+ before do
25
+ @ability = Ability.new(Factory(:user))
26
+ end
27
+
28
+ it "should allow read" do
29
+ @ability.should be_able_to(:read, @profile)
30
+ end
31
+
32
+ it "should deny update" do
33
+ @ability.should_not be_able_to(:update, @profile)
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -1,49 +1,106 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe TieActivity do
4
- describe "for followers" do
5
- before do
6
- @tie = Factory(:friend)
7
-
8
- @tie_to_sender_friend = Factory(:friend, :receiver => @tie.sender)
9
- @tie_to_receiver_friend = Factory(:friend, :receiver => @tie.receiver)
10
- end
11
-
12
- describe "of a public activity" do
4
+ describe "dissemination" do
5
+ context "a friend b" do
13
6
  before do
14
- @a = Factory(:activity, :_tie => @tie.related(@tie.sender.relations.sort.last))
7
+ @afb = Factory(:friend)
15
8
  end
16
9
 
17
- it "should be created" do
18
- assert @tie_to_sender_friend.activities.include?(@a)
19
- assert @tie_to_receiver_friend.activities.include?(@a)
20
- end
21
- end
10
+ context "c friend a" do
11
+ before do
12
+ @cfa = Factory(:friend, :receiver => @afb.sender)
13
+ @a = Factory(:activity, :_tie => @afb)
14
+ end
22
15
 
23
- describe "of a friend activity" do
24
- before do
25
- @a = Factory(:activity, :_tie => @tie)
26
- end
16
+ it "should not be created" do
17
+ @cfa.activities.should_not include(@a)
18
+ end
19
+
20
+ context "and a friend c" do
21
+ before do
22
+ @afc = Factory(:friend, :sender => @cfa.receiver, :receiver => @cfa.sender)
23
+ @a = Factory(:activity, :_tie => @afb)
24
+ end
25
+
26
+ it "should be created" do
27
+ @cfa.activities.should include(@a)
28
+ end
27
29
 
28
- it "should not be created" do
29
- assert !@tie_to_sender_friend.activities.include?(@a)
30
- assert !@tie_to_receiver_friend.activities.include?(@a)
30
+ end
31
31
  end
32
- end
33
32
 
34
- describe "one of them being friend" do
35
- before do
36
- Factory(:friend, :sender => @tie.sender, :receiver => @tie_to_receiver_friend.sender)
33
+ context "and d friend b" do
34
+ before do
35
+ @dfb = Factory(:friend, :receiver => @afb.receiver)
36
+ @a = Factory(:activity, :_tie => @afb)
37
+ end
38
+
39
+ it "should not be created" do
40
+ @dfb.activities.should_not include(@a)
41
+ end
42
+
43
+ context "and b friend d" do
44
+ before do
45
+ @bfd = Factory(:friend, :sender => @dfb.receiver, :receiver => @dfb.sender)
46
+ @a = Factory(:activity, :_tie => @afb)
47
+ end
48
+
49
+ it "should not be created" do
50
+ @dfb.activities.should_not include(@a)
51
+ end
52
+ end
53
+
37
54
  end
38
55
 
39
- describe "with a friend activity" do
56
+ context "and b friend a" do
40
57
  before do
41
- @a = Factory(:activity, :_tie => @tie)
58
+ @bfa = Factory(:friend, :sender => @afb.receiver, :receiver => @afb.sender)
59
+ end
60
+
61
+ context "c friend a" do
62
+ before do
63
+ @cfa = Factory(:friend, :receiver => @afb.sender)
64
+ @a = Factory(:activity, :_tie => @afb)
65
+ end
66
+
67
+ it "should not be created" do
68
+ @cfa.activities.should_not include(@a)
69
+ end
70
+
71
+ context "and a friend c" do
72
+ before do
73
+ @afc = Factory(:friend, :sender => @cfa.receiver, :receiver => @cfa.sender)
74
+ @a = Factory(:activity, :_tie => @afb)
75
+ end
76
+
77
+ it "should be created" do
78
+ @cfa.activities.should include(@a)
79
+ end
80
+
81
+ end
42
82
  end
43
83
 
44
- it "should be created for the friend" do
45
- assert !@tie_to_sender_friend.activities.include?(@a)
46
- assert @tie_to_receiver_friend.activities.include?(@a)
84
+ context "and d friend b" do
85
+ before do
86
+ @dfb = Factory(:friend, :receiver => @afb.receiver)
87
+ @a = Factory(:activity, :_tie => @afb)
88
+ end
89
+
90
+ it "should not be created" do
91
+ @dfb.activities.should_not include(@a)
92
+ end
93
+
94
+ context "and b friend d" do
95
+ before do
96
+ @bfd = Factory(:friend, :sender => @dfb.receiver, :receiver => @dfb.sender)
97
+ @a = Factory(:activity, :_tie => @afb)
98
+ end
99
+
100
+ it "should be created" do
101
+ @dfb.activities.should include(@a)
102
+ end
103
+ end
47
104
  end
48
105
  end
49
106
  end