starburst 0.9.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ FactoryGirl.define do
2
+ factory :announcement_view, class: Starburst::AnnouncementView do
3
+
4
+ end
5
+ end
@@ -2,35 +2,33 @@ require 'spec_helper'
2
2
 
3
3
  feature 'Announcements' do
4
4
  scenario 'show announcement to user' do
5
- #@user = FactoryGirl.create(:user)
6
- #login_as(@user, :scope => :user, :run_callbacks => false)
7
5
  @current_user = FactoryGirl.create(:user)
8
6
  ActionController::Base.any_instance.stub(:current_user).and_return(@current_user)
9
7
  ActionView::Base.any_instance.stub(:current_user).and_return(@current_user)
10
- announcement = FactoryGirl.create(:announcement, :body => "My announcement")
8
+ FactoryGirl.create(:announcement, :body => "My announcement")
11
9
  visit root_path
12
10
  page.should have_content "My announcement"
13
11
  end
14
12
  scenario 'show no announcements if user not logged in' do
15
13
  ActionController::Base.any_instance.stub(:current_user).and_return(nil)
16
14
  ActionView::Base.any_instance.stub(:current_user).and_return(nil)
17
- announcement = FactoryGirl.create(:announcement, :body => "My announcement")
15
+ FactoryGirl.create(:announcement, :body => "My announcement")
18
16
  visit root_path
19
17
  page.should_not have_content "My announcement"
20
18
  page.should have_content "Sample homepage"
21
19
  end
22
- scenario 'mark announcement as read then hide it from now on' do
23
- pending
24
- @user = FactoryGirl.create(:user)
25
- login_as(@user, :scope => :user, :run_callbacks => false)
26
- #ActionView::Base.any_instance.stub(:current_user).and_return(@current_user)
27
- #ActionController::Base.any_instance.stub(:current_user).and_return(@current_user)
20
+ scenario 'stop showing announcement once the user has read it' do
21
+ @current_user = FactoryGirl.create(:user)
22
+ ActionController::Base.any_instance.stub(:current_user).and_return(@current_user)
23
+ ActionView::Base.any_instance.stub(:current_user).and_return(@current_user)
28
24
  announcement = FactoryGirl.create(:announcement, :body => "My announcement")
29
25
  visit root_path
30
26
  page.should have_content "My announcement"
31
- click_link "starburst-close"
32
- wait_for_ajax
27
+ FactoryGirl.create(:announcement_view, :user => @current_user, :announcement => announcement)
33
28
  visit root_path
34
29
  page.should_not have_content "My announcement"
35
30
  end
36
- end
31
+ scenario 'allow the user to click to hide the announcement' do
32
+ pending "Figure out how to best stub the current_user method for a JavaScript-enabled test"
33
+ end
34
+ end
@@ -6,6 +6,10 @@ describe Announcement do
6
6
 
7
7
  context "a basic announcement" do
8
8
 
9
+ it "can't be created without a body" do
10
+ expect(Announcement.create(:body => nil)).to have(1).error_on(:body)
11
+ end
12
+
9
13
  it "can be created with just a body" do
10
14
  expect(Announcement.create(:body => "This is an announcement.")).to be_valid
11
15
  end
@@ -19,32 +23,32 @@ describe Announcement do
19
23
  context "a scheduled annoucement" do
20
24
 
21
25
  it "does not show up past its end date" do
22
- Announcement.create(:stop_delivering_at => 1.day.ago)
26
+ Announcement.create(:body => "test", :stop_delivering_at => 1.day.ago)
23
27
  expect(Announcement.current.blank?).to eq true
24
28
  end
25
29
 
26
30
  it "shows before its end date" do
27
- Announcement.create(:stop_delivering_at => Time.now + 1.day)
31
+ Announcement.create(:body => "test", :stop_delivering_at => Time.now + 1.day)
28
32
  expect(Announcement.current.present?).to eq true
29
33
  end
30
34
 
31
35
  it "does not show up before its start date" do
32
- Announcement.create(:start_delivering_at => Time.now + 1.day)
36
+ Announcement.create(:body => "test", :start_delivering_at => Time.now + 1.day)
33
37
  expect(Announcement.current.blank?).to eq true
34
38
  end
35
39
 
36
40
  it "shows after its start date" do
37
- Announcement.create(:start_delivering_at => 1.day.ago)
41
+ Announcement.create(:body => "test", :start_delivering_at => 1.day.ago)
38
42
  expect(Announcement.current.present?).to eq true
39
43
  end
40
44
 
41
45
  it "shows up between its start and end dates" do
42
- Announcement.create(:start_delivering_at => Time.now, :stop_delivering_at => Time.now + 1.day)
46
+ Announcement.create(:body => "test", :start_delivering_at => Time.now, :stop_delivering_at => Time.now + 1.day)
43
47
  expect(Announcement.current.present?).to eq true
44
48
  end
45
49
 
46
50
  it "does not show when its start and end dates are the same" do
47
- Announcement.create(:start_delivering_at => Time.now, :stop_delivering_at => Time.now)
51
+ Announcement.create(:body => "test", :start_delivering_at => Time.now, :stop_delivering_at => Time.now)
48
52
  expect(Announcement.current.blank?).to eq true
49
53
  end
50
54
 
@@ -53,16 +57,16 @@ describe Announcement do
53
57
  context "an announcement not yet read by the current user" do
54
58
 
55
59
  it "shows up" do
56
- read_announcement = Announcement.create(:start_delivering_at => 1.day.ago)
57
- unread_announcement = Announcement.create(:start_delivering_at => Time.now)
60
+ read_announcement = Announcement.create(:body => "test", :start_delivering_at => 1.day.ago)
61
+ unread_announcement = Announcement.create(:body => "test", :start_delivering_at => Time.now)
58
62
  user_who_read_announcement = FactoryGirl.create(:user)
59
63
  AnnouncementView.create(:announcement => read_announcement, :user => user_who_read_announcement)
60
64
  expect(Announcement.unread_by(user_who_read_announcement)).to eq [unread_announcement]
61
65
  end
62
66
 
63
67
  it "shows up for the current user even when others have read it" do
64
- read_announcement = Announcement.create(:start_delivering_at => 1.day.ago)
65
- unread_announcement = Announcement.create(:start_delivering_at => Time.now)
68
+ read_announcement = Announcement.create(:body => "test", :start_delivering_at => 1.day.ago)
69
+ unread_announcement = Announcement.create(:body => "test", :start_delivering_at => Time.now)
66
70
  user_who_read_announcement = FactoryGirl.create(:user)
67
71
  user_who_read_no_announcements = FactoryGirl.create(:user)
68
72
  AnnouncementView.create(:announcement => read_announcement, :user => user_who_read_announcement)
@@ -70,8 +74,8 @@ describe Announcement do
70
74
  end
71
75
 
72
76
  it "shows up for the current user even when they have read other announcements" do
73
- read_announcement = Announcement.create(:start_delivering_at => 1.day.ago)
74
- unread_announcement = Announcement.create(:start_delivering_at => Time.now)
77
+ read_announcement = Announcement.create(:body => "test", :start_delivering_at => 1.day.ago)
78
+ unread_announcement = Announcement.create(:body => "test", :start_delivering_at => Time.now)
75
79
  user_who_read_announcement = FactoryGirl.create(:user)
76
80
  AnnouncementView.create(:announcement => read_announcement, :user => user_who_read_announcement)
77
81
  expect(Starburst::Announcement.current(user_who_read_announcement)).to eq unread_announcement
@@ -82,7 +86,7 @@ describe Announcement do
82
86
 
83
87
  context "an announcement targeted to certain users" do
84
88
  it "has a limited_to_users field that is retrieveable from the database" do
85
- limited_announcement = Announcement.create(:limit_to_users => [
89
+ limited_announcement = Announcement.create(:body => "test", :limit_to_users => [
86
90
  {
87
91
  :field => "subscription",
88
92
  :value => "",
@@ -93,7 +97,7 @@ describe Announcement do
93
97
  end
94
98
 
95
99
  it "shows up for the proper user only (one positive condition)" do
96
- limited_announcement = Announcement.create(:limit_to_users => [
100
+ limited_announcement = Announcement.create(:body => "test", :limit_to_users => [
97
101
  {
98
102
  :field => "subscription",
99
103
  :value => ""
@@ -107,7 +111,7 @@ describe Announcement do
107
111
 
108
112
  it "shows up for the proper user only (method condition)" do
109
113
  Starburst.user_instance_methods = ["free?"]
110
- limited_announcement = Announcement.create(:limit_to_users => [
114
+ limited_announcement = Announcement.create(:body => "test", :limit_to_users => [
111
115
  {
112
116
  :field => "free?",
113
117
  :value => true
@@ -0,0 +1,37 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ module Starburst
4
+
5
+ describe AnnouncementView do
6
+
7
+ it "does not allow a user to mark two views of an announcement" do
8
+ user = FactoryGirl.create(:user)
9
+ announcement = FactoryGirl.create(:announcement)
10
+ view1 = FactoryGirl.create(:announcement_view, :user => user, :announcement => announcement)
11
+ view2 = FactoryGirl.build(:announcement_view, :user => user, :announcement => announcement)
12
+ expect(view1).to be_valid
13
+ expect(view2).to have(1).error_on(:user_id)
14
+ end
15
+
16
+ it "allows a user to log views of different announcements" do
17
+ user = FactoryGirl.create(:user)
18
+ announcement1 = FactoryGirl.create(:announcement)
19
+ announcement2 = FactoryGirl.create(:announcement)
20
+ view1 = FactoryGirl.create(:announcement_view, :user => user, :announcement => announcement1)
21
+ view2 = FactoryGirl.create(:announcement_view, :user => user, :announcement => announcement2)
22
+ expect(view1).to be_valid
23
+ expect(view2).to be_valid
24
+ end
25
+
26
+ it "allows multiple users to view the same announcement" do
27
+ user1 = FactoryGirl.create(:user)
28
+ user2 = FactoryGirl.create(:user)
29
+ announcement = FactoryGirl.create(:announcement)
30
+ view1 = FactoryGirl.create(:announcement_view, :user => user1, :announcement => announcement)
31
+ view2 = FactoryGirl.create(:announcement_view, :user => user2, :announcement => announcement)
32
+ expect(view1).to be_valid
33
+ expect(view2).to be_valid
34
+ end
35
+
36
+ end
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: starburst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-30 00:00:00.000000000 Z
11
+ date: 2014-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -116,6 +116,7 @@ files:
116
116
  - config/routes.rb
117
117
  - db/migrate/20141004214002_create_announcement_tables.rb
118
118
  - db/migrate/20141112140703_add_category_to_starburst_announcements.rb
119
+ - db/migrate/20141209221904_add_index_and_uniqueness_to_announcement_views.rb
119
120
  - lib/helpers/starburst/configuration.rb
120
121
  - lib/starburst/engine.rb
121
122
  - lib/starburst/version.rb
@@ -179,10 +180,12 @@ files:
179
180
  - spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994
180
181
  - spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6
181
182
  - spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655
183
+ - spec/factories/announcement_views.rb
182
184
  - spec/factories/announcements.rb
183
185
  - spec/factories/users.rb
184
186
  - spec/features/announcements_spec.rb
185
187
  - spec/models/starburst/announcement_spec.rb
188
+ - spec/models/starburst/announcement_view_spec.rb
186
189
  - spec/spec_helper.rb
187
190
  - spec/support/wait_for_ajax.rb
188
191
  homepage: http://github.com/csm123/starburst
@@ -266,10 +269,12 @@ test_files:
266
269
  - spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994
267
270
  - spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6
268
271
  - spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655
272
+ - spec/factories/announcement_views.rb
269
273
  - spec/factories/announcements.rb
270
274
  - spec/factories/users.rb
271
275
  - spec/features/announcements_spec.rb
272
276
  - spec/models/starburst/announcement_spec.rb
277
+ - spec/models/starburst/announcement_view_spec.rb
273
278
  - spec/spec_helper.rb
274
279
  - spec/support/wait_for_ajax.rb
275
280
  has_rdoc: