starburst 0.9.3 → 1.0.0

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.
@@ -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: