event_calendar_engine 0.1.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.
Files changed (173) hide show
  1. data/Gemfile +23 -0
  2. data/Gemfile.lock +161 -0
  3. data/README +1 -0
  4. data/Rakefile +39 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/application_controller.rb +4 -0
  7. data/app/controllers/attendees_controller.rb +53 -0
  8. data/app/controllers/event_calendar/application_controller.rb +5 -0
  9. data/app/controllers/event_revisions_controller.rb +26 -0
  10. data/app/controllers/events_controller.rb +129 -0
  11. data/app/helpers/event_calendar/application_helper.rb +118 -0
  12. data/app/helpers/events_helper.rb +2 -0
  13. data/app/models/attendee.rb +6 -0
  14. data/app/models/deletable_instance_methods.rb +7 -0
  15. data/app/models/event.rb +124 -0
  16. data/app/models/event_revision.rb +9 -0
  17. data/app/models/participant.rb +23 -0
  18. data/app/models/participator.rb +20 -0
  19. data/app/views/attendees/index.html.erb +14 -0
  20. data/app/views/attendees/new.html.erb +13 -0
  21. data/app/views/event-calendar-shared/_flash.html.erb +7 -0
  22. data/app/views/event-calendar-shared/_main_menu.html.erb +3 -0
  23. data/app/views/event-calendar-shared/_navigation.html.erb +15 -0
  24. data/app/views/event_revisions/index.html.erb +31 -0
  25. data/app/views/event_revisions/show.html.erb +5 -0
  26. data/app/views/events/_browse_event_revisions.html.erb +19 -0
  27. data/app/views/events/_event.html.erb +10 -0
  28. data/app/views/events/_event_details.html.erb +26 -0
  29. data/app/views/events/_form.html.erb +36 -0
  30. data/app/views/events/attendees.html.erb +29 -0
  31. data/app/views/events/edit.html.erb +3 -0
  32. data/app/views/events/index.html.erb +41 -0
  33. data/app/views/events/new.html.erb +3 -0
  34. data/app/views/events/search.html.erb +11 -0
  35. data/app/views/events/show.html.erb +30 -0
  36. data/app/views/layouts/application.html.erb +49 -0
  37. data/config/application.rb +42 -0
  38. data/config/blueprint_settings.yml +10 -0
  39. data/config/boot.rb +13 -0
  40. data/config/cucumber.yml +8 -0
  41. data/config/database.example.yml +22 -0
  42. data/config/environment.rb +5 -0
  43. data/config/environments/development.rb +26 -0
  44. data/config/environments/production.rb +49 -0
  45. data/config/environments/test.rb +38 -0
  46. data/config/initializers/backtrace_silencers.rb +7 -0
  47. data/config/initializers/formtastic.rb +55 -0
  48. data/config/initializers/inflections.rb +10 -0
  49. data/config/initializers/mime_types.rb +5 -0
  50. data/config/initializers/secret_token.rb +9 -0
  51. data/config/initializers/session_store.rb +10 -0
  52. data/config/locales/en.yml +5 -0
  53. data/config/routes.rb +67 -0
  54. data/db/migrate/20101011142543_create_events.rb +19 -0
  55. data/db/migrate/20101011172027_create_attendees.rb +16 -0
  56. data/db/migrate/20101011200048_make_events_revisable.rb +25 -0
  57. data/db/schema.rb +45 -0
  58. data/db/seeds.rb +7 -0
  59. data/lib/event_calendar.rb +3 -0
  60. data/lib/event_calendar/engine.rb +25 -0
  61. data/lib/generators/event_calendar/install/USAGE +5 -0
  62. data/lib/generators/event_calendar/install/install_generator.rb +19 -0
  63. data/lib/generators/event_calendar/install/templates/event_calendar.rake +169 -0
  64. data/lib/tasks/blueprint.rake +25 -0
  65. data/lib/tasks/cucumber.rake +53 -0
  66. data/public/404.html +26 -0
  67. data/public/422.html +26 -0
  68. data/public/500.html +26 -0
  69. data/public/favicon.ico +0 -0
  70. data/public/images/rails.png +0 -0
  71. data/public/javascripts/event_calendar.js +62 -0
  72. data/public/javascripts/event_calendar_behaviors.js +131 -0
  73. data/public/javascripts/fullcalendar.js +3965 -0
  74. data/public/javascripts/jquery-ui-1.7.2.custom.min.js +298 -0
  75. data/public/javascripts/jquery.clonePosition.js +27 -0
  76. data/public/javascripts/jquery.js +154 -0
  77. data/public/javascripts/jquery.qtip-1.0.0-rc3.js +2149 -0
  78. data/public/javascripts/jquery.string.1.0-min.js +6 -0
  79. data/public/javascripts/jquery.tablesorter.min.js +2 -0
  80. data/public/javascripts/lowpro.jquery.js +224 -0
  81. data/public/javascripts/rails.js +132 -0
  82. data/public/robots.txt +5 -0
  83. data/public/stylesheets/blueprint/grid.css +280 -0
  84. data/public/stylesheets/blueprint/icons/cross.png +0 -0
  85. data/public/stylesheets/blueprint/icons/doc.png +0 -0
  86. data/public/stylesheets/blueprint/icons/email.png +0 -0
  87. data/public/stylesheets/blueprint/icons/external.png +0 -0
  88. data/public/stylesheets/blueprint/icons/feed.png +0 -0
  89. data/public/stylesheets/blueprint/icons/im.png +0 -0
  90. data/public/stylesheets/blueprint/icons/key.png +0 -0
  91. data/public/stylesheets/blueprint/icons/pdf.png +0 -0
  92. data/public/stylesheets/blueprint/icons/tick.png +0 -0
  93. data/public/stylesheets/blueprint/icons/visited.png +0 -0
  94. data/public/stylesheets/blueprint/icons/xls.png +0 -0
  95. data/public/stylesheets/blueprint/ie.css +36 -0
  96. data/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
  97. data/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
  98. data/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
  99. data/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
  100. data/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
  101. data/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
  102. data/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
  103. data/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
  104. data/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
  105. data/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
  106. data/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
  107. data/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
  108. data/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  109. data/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
  110. data/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
  111. data/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
  112. data/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
  113. data/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
  114. data/public/stylesheets/blueprint/plugins/rtl/screen.css +110 -0
  115. data/public/stylesheets/blueprint/plugins/silksprite/sprite.css +1 -0
  116. data/public/stylesheets/blueprint/plugins/silksprite/sprites.png +0 -0
  117. data/public/stylesheets/blueprint/print.css +29 -0
  118. data/public/stylesheets/blueprint/readme.txt +12 -0
  119. data/public/stylesheets/blueprint/screen.css +429 -0
  120. data/public/stylesheets/error_messages.css +65 -0
  121. data/public/stylesheets/formtastic.css +131 -0
  122. data/public/stylesheets/formtastic_changes.css +14 -0
  123. data/public/stylesheets/fullcalendar.css +574 -0
  124. data/public/stylesheets/fullcalendar_changes.css +0 -0
  125. data/public/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  126. data/public/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  127. data/public/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  128. data/public/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  129. data/public/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  130. data/public/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  131. data/public/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  132. data/public/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  133. data/public/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  134. data/public/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  135. data/public/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  136. data/public/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  137. data/public/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  138. data/public/stylesheets/smoothness/jquery-ui-1.7.2.custom.css +406 -0
  139. data/public/stylesheets/tablesorter/blue/asc.gif +0 -0
  140. data/public/stylesheets/tablesorter/blue/bg.gif +0 -0
  141. data/public/stylesheets/tablesorter/blue/desc.gif +0 -0
  142. data/public/stylesheets/tablesorter/blue/style.css +39 -0
  143. data/public/stylesheets/text_and_colors.css +49 -0
  144. data/spec/controllers/attendees_controller_spec.rb +27 -0
  145. data/spec/controllers/event_revisions_controller_spec.rb +86 -0
  146. data/spec/controllers/events_controller_spec.rb +168 -0
  147. data/spec/fixtures/event_calendar_events.yml +8 -0
  148. data/spec/models/deletable_instance_methods_spec.rb +61 -0
  149. data/spec/models/event_revision_spec.rb +36 -0
  150. data/spec/models/event_spec.rb +139 -0
  151. data/spec/spec_helper.rb +27 -0
  152. data/spec/spec_helpers/mocks.rb +6 -0
  153. data/vendor/plugins/searchable_by/MIT-LICENSE +20 -0
  154. data/vendor/plugins/searchable_by/README +55 -0
  155. data/vendor/plugins/searchable_by/Rakefile +23 -0
  156. data/vendor/plugins/searchable_by/init.rb +2 -0
  157. data/vendor/plugins/searchable_by/install.rb +1 -0
  158. data/vendor/plugins/searchable_by/lib/searchable_by.rb +137 -0
  159. data/vendor/plugins/searchable_by/tasks/searchable_by_tasks.rake +4 -0
  160. data/vendor/plugins/searchable_by/test/boot.rb +21 -0
  161. data/vendor/plugins/searchable_by/test/database.yml +22 -0
  162. data/vendor/plugins/searchable_by/test/fixtures/companies.yml +10 -0
  163. data/vendor/plugins/searchable_by/test/fixtures/company.rb +5 -0
  164. data/vendor/plugins/searchable_by/test/fixtures/employee.rb +5 -0
  165. data/vendor/plugins/searchable_by/test/fixtures/employees.yml +28 -0
  166. data/vendor/plugins/searchable_by/test/fixtures/schema.rb +18 -0
  167. data/vendor/plugins/searchable_by/test/helper.rb +12 -0
  168. data/vendor/plugins/searchable_by/test/lib/activerecord_test_case.rb +43 -0
  169. data/vendor/plugins/searchable_by/test/lib/activerecord_test_connector.rb +75 -0
  170. data/vendor/plugins/searchable_by/test/lib/load_fixtures.rb +9 -0
  171. data/vendor/plugins/searchable_by/test/searchable_by_test.rb +73 -0
  172. data/vendor/plugins/searchable_by/uninstall.rb +1 -0
  173. metadata +606 -0
@@ -0,0 +1,49 @@
1
+ /*
2
+ .red { color: red }
3
+ .blue { color: blue }
4
+ .green { color: green }
5
+ .purple { color: #9F009C }
6
+ .gold { color: #FFD700 }
7
+ .yellow { color: #FD3; }
8
+ .brown { color: #630; }
9
+ .white { color: #FFF; }
10
+ .lightbrown { color: #FC9; }
11
+ .lightblue { color: #CCF; }
12
+ .lightgreen { color: #90EE90; }
13
+ .lightred { color: #F66; }
14
+ .lightpurple { color: #9F339C }
15
+ .lightgray { color: #aaa }
16
+ .gray { color: #999 }
17
+ .darkred { color: #900; }
18
+ .darkblue { color: #009; }
19
+ .darkgreen { color: #090; }
20
+ .smalltext { font-size: 11px; }
21
+ .small_text { font-size: 11px; }
22
+ .big_text { font-size: 16px; line-height: 150% }
23
+ .large_text { font-size: 18px; line-height: 150% }
24
+ .huge_text { font-size: 22px; line-height: 150% }
25
+ .tiny_text { font-size: 9px; }
26
+ .pink_background { background: #FDD; }
27
+ .aqua_background { background: #DFF; }
28
+ div.smalltext ul { font-size: 11px; }
29
+
30
+ table.nice_table { background: #660; width: auto; }
31
+ table.nice_table th { background: #CC9; padding: 2px 6px; font-size: 13px;}
32
+ table.nice_table tr { background: #FFF; }
33
+ table.nice_table td { padding: 4px 12px; font-size: 12px; }
34
+
35
+ table.nice_data_table { background: #660; }
36
+ table.nice_data_table th { background: #CC9; padding: 4px 8px; font-size: 13px;}
37
+ table.nice_data_table tr { background: #FFF; }
38
+ table.nice_data_table td { padding: 4px; font-size: 12px; text-align:right; }
39
+
40
+
41
+ table.small_table td { padding: 3px; margin: 1px; font-size: 11px; }
42
+ table.small_table_narrow td { padding: 2px; margin: 0px; font-size: 11px; }
43
+ table.tiny_table td { padding: 0px 2px; margin: 0px 2px; font-size: 9px; }
44
+
45
+ table.tablesorter { width: auto; }
46
+ table.tablesorter tbody td { padding: 4px 12px; }
47
+ table.tablesorter th.header { padding-right: 24px; }
48
+ table.tablesorter thead tr th { font-size: 13px; }
49
+ */
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe AttendeesController do
4
+ describe ":index, :event_id => required" do
5
+ before(:each) do
6
+ Event.stub(:find).and_return(mock_event)
7
+ class FakeModel
8
+ extend ActiveModel::Naming
9
+ def self.find(*args)
10
+ new
11
+ end
12
+ end
13
+ @fake_model = mock_model('FakeModel')
14
+ Participant.stub(:types).and_return([FakeModel])
15
+ Event.stub_chain(:includes, :find).and_return(mock_event)
16
+ end
17
+
18
+ it "loads an @event" do
19
+ get :index, :event_id => "1"
20
+ assigns[:event].should eql mock_event
21
+ end
22
+ it "renders the attendees template" do
23
+ get :index, :event_id => "1"
24
+ response.should render_template("attendees/index")
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe EventRevisionsController do
4
+ describe ":index" do
5
+ context "params[:id] is set" do
6
+ it "redirects to the show path" do
7
+ get :index, :id => "1"
8
+ response.should redirect_to event_revision_path("1")
9
+ end
10
+ end
11
+ context "params[:id] is NOT set" do
12
+ before(:each) do
13
+ EventRevision.stub(:deleted).and_return([mock_event_revision])
14
+ end
15
+ it "loads all deleted events as @deleted_events" do
16
+ EventRevision.should_receive(:deleted).and_return([mock_event_revision])
17
+ get :index
18
+ assigns[:deleted_events].should == [mock_event_revision]
19
+ end
20
+ it "renders index" do
21
+ get :index
22
+ response.should render_template("event_revisions/index")
23
+ end
24
+ end
25
+ end
26
+ describe ":show, :id => required" do
27
+ before(:each) do
28
+ EventRevision.stub(:find).and_return(mock_event_revision)
29
+ end
30
+ it "loads an @event_revision" do
31
+ EventRevision.should_receive(:find).and_return(mock_event_revision)
32
+ get :show, :id => "1"
33
+ assigns[:event_revision].should eql mock_event_revision
34
+ end
35
+ it "renders show" do
36
+ get :show, :id => "1"
37
+ response.should render_template("event_revisions/show")
38
+ end
39
+ end
40
+ describe ":restore" do
41
+ before(:each) do
42
+ mock_event_revision({
43
+ :restore => nil,
44
+ :name => "Last, First"
45
+ })
46
+ EventRevision.stub(:find).and_return(mock_event_revision)
47
+ end
48
+ it "loads event revision as @event_revision" do
49
+ EventRevision.should_receive(:find).with("1").and_return(mock_event_revision)
50
+ post :restore, :id => "1"
51
+ assigns[:event_revision].should eql mock_event_revision
52
+ end
53
+ it "restores the @event_revision" do
54
+ mock_event_revision.should_receive(:restore)
55
+ post :restore, :id => "1"
56
+ end
57
+ context "restore succeeds" do
58
+ before(:each) do
59
+ @event_revision.stub(:restore).and_return(true)
60
+ EventRevision.stub(:find).and_return(@event_revision)
61
+ end
62
+ it "sets a flash[:message]" do
63
+ post :restore, :id => "1"
64
+ flash[:notice].should_not be_nil
65
+ end
66
+ it "redirects to the newly restored event show page" do
67
+ post :restore, :id => "1"
68
+ response.should redirect_to event_path(@event_revision.id)
69
+ end
70
+ end
71
+ context "restore fails" do
72
+ before(:each) do
73
+ @event_revision.stub(:restore).and_return(false)
74
+ EventRevision.stub(:find).and_return(@event_revision)
75
+ end
76
+ it "sets a flash[:error]" do
77
+ post :restore, :id => "1"
78
+ flash[:error].should_not be_nil
79
+ end
80
+ it "redirects to the event revisions index" do
81
+ post :restore, :id => "1"
82
+ response.should redirect_to event_revisions_path
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+
3
+ describe require 'spec_helper'
4
+
5
+ describe EventsController do
6
+ # def mock_admin_user(stubs={})
7
+ # @mock_admin_user ||= mock_model(User, stubs.merge({
8
+ # :role => 'admin',
9
+ # :contact => mock_model(Contact, {
10
+ # :first_name => 'First',
11
+ # :last_name => 'Last',
12
+ # :email => 'test@test.com'
13
+ # })
14
+ # }))
15
+ # end
16
+
17
+ # def mock_user(stubs={})
18
+ # @mock_user ||= mock_model(User, stubs.merge({:role => 'general'}))
19
+ # end
20
+
21
+ describe "when logged in as admin" do
22
+ before do
23
+ # pending
24
+ # controller.stub(:current_user_session).and_return(
25
+ # mock_model(UserSession, {
26
+ # :user => mock_admin_user
27
+ # })
28
+ # )
29
+ end
30
+
31
+ describe "GET index" do
32
+ it "assigns all events as @events" do
33
+ Event.stub(:find).with(:all).and_return([mock_event])
34
+ get :index
35
+ assigns[:events].should == [mock_event]
36
+ end
37
+ end
38
+
39
+ describe "GET index as json" do
40
+ it "renders @events as json" do
41
+ mock_event.stub(:to_hash_for_calendar).and_return( { :id => 1, :name => "whatever" } )
42
+ Event.stub(:find).with(:all).and_return([mock_event])
43
+ get :index, :format => 'js'
44
+ response.should be_success
45
+ end
46
+ end
47
+
48
+ describe "GET show" do
49
+ it "assigns the requested event as @event" do
50
+ Event.stub(:find).with("37").and_return(mock_event)
51
+ get :show, :id => "37"
52
+ assigns[:event].should equal(mock_event)
53
+ end
54
+ end
55
+
56
+ describe "GET new" do
57
+ it "assigns a new event as @event" do
58
+ Event.stub(:new).and_return(mock_event)
59
+ get :new
60
+ assigns[:event].should equal(mock_event)
61
+ end
62
+ end
63
+
64
+ describe "GET edit" do
65
+ it "assigns the requested event as @event" do
66
+ Event.stub(:find).with("37").and_return(mock_event)
67
+ get :edit, :id => "37"
68
+ assigns[:event].should equal(mock_event)
69
+ end
70
+ end
71
+
72
+ describe "POST create" do
73
+
74
+ describe "with valid params" do
75
+ it "assigns a newly created event as @event" do
76
+ Event.stub(:new).with({'these' => 'params'}).and_return(mock_event(:save => true, :modified_by_user= => nil))
77
+ post :create, :event => {:these => 'params'}
78
+ assigns[:event].should equal(mock_event)
79
+ end
80
+
81
+ it "redirects to the created event" do
82
+ Event.stub(:new).and_return(mock_event(:save => true, :modified_by_user= => nil))
83
+ post :create, :event => {}
84
+ response.should redirect_to(event_url(mock_event))
85
+ end
86
+ end
87
+
88
+ describe "with invalid params" do
89
+ it "assigns a newly created but unsaved event as @event" do
90
+ Event.stub(:new).with({'these' => 'params'}).and_return(mock_event(:save => false, :modified_by_user= => nil))
91
+ post :create, :event => {:these => 'params'}
92
+ assigns[:event].should equal(mock_event)
93
+ end
94
+
95
+ it "re-renders the 'new' template" do
96
+ Event.stub(:new).and_return(mock_event(:save => false, :modified_by_user= => nil))
97
+ post :create, :event => {}
98
+ response.should render_template('new')
99
+ end
100
+ end
101
+
102
+ end
103
+
104
+ describe "PUT update" do
105
+
106
+ describe "with valid params" do
107
+ it "updates the requested event" do
108
+ Event.should_receive(:find).with("37").and_return(mock_event)
109
+ # mock_event.should_receive(:update_attributes).with({'these' => 'params',
110
+ # 'modified_by_user' => mock_admin_user})
111
+
112
+ mock_event.should_receive(:update_attributes).with({'these' => 'params'})
113
+ put :update, :id => "37", :event => {:these => 'params'}
114
+ end
115
+
116
+ it "assigns the requested event as @event" do
117
+ Event.stub(:find).and_return(mock_event(:update_attributes => true))
118
+ put :update, :id => "1", :event => {}
119
+ assigns[:event].should equal(mock_event)
120
+ end
121
+
122
+ it "redirects to the event" do
123
+ Event.stub(:find).and_return(mock_event(:update_attributes => true))
124
+ put :update, :id => "1", :event => {}
125
+ response.should redirect_to(event_url(mock_event))
126
+ end
127
+ end
128
+
129
+ describe "with invalid params" do
130
+ it "updates the requested event" do
131
+ Event.should_receive(:find).with("37").and_return(mock_event)
132
+ mock_event.should_receive(:update_attributes).with({'these' => 'params'})
133
+ # mock_event.should_receive(:update_attributes).with({'these' => 'params',
134
+ # 'modified_by_user' => mock_admin_user })
135
+ put :update, :id => "37", :event => { :these => 'params'}
136
+ end
137
+
138
+ it "assigns the event as @event" do
139
+ Event.stub(:find).and_return(mock_event(:update_attributes => false))
140
+ put :update, :id => "1", :event => { 'these' => 'params'}
141
+ assigns[:event].should equal(mock_event)
142
+ end
143
+
144
+ it "re-renders the 'edit' template" do
145
+ Event.stub(:find).and_return(mock_event(:update_attributes => false))
146
+ put :update, :id => "1", :event => { 'these' => 'params'}
147
+ response.should render_template('edit')
148
+ end
149
+ end
150
+
151
+ end
152
+
153
+ describe "DELETE destroy" do
154
+ it "destroys the requested event" do
155
+ Event.should_receive(:find).with("37").and_return(mock_event)
156
+ mock_event.should_receive(:destroy)
157
+ delete :destroy, :id => "37"
158
+ end
159
+
160
+ it "redirects to the events list" do
161
+ Event.stub(:find).and_return(mock_event(:destroy => true))
162
+ delete :destroy, :id => "1"
163
+ response.should redirect_to(events_url)
164
+ end
165
+ end
166
+ end
167
+
168
+ end
@@ -0,0 +1,8 @@
1
+ editable_event:
2
+ id: <%= Fixtures.identify :editable_event %>
3
+ name: Editable Event
4
+ event_type: Conference
5
+ location: "Eugene, Oregon"
6
+ description: "Will be great! Lots of good info, food and drinks!"
7
+ start_on: "10/14/2010"
8
+ end_on: "10/15/2010"
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+ require 'acts_as_fu'
3
+ RSpec.configure do |config|
4
+ config.include ActsAsFu
5
+ end
6
+
7
+ describe DeletableInstanceMethods do
8
+ before(:each) do
9
+ build_model :fake_revisable do
10
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Rails.env.to_sym])
11
+ string :first_name
12
+ string :last_name
13
+ datetime :revisable_deleted_at
14
+ boolean :revisable_is_current
15
+ integer :revisable_original_id
16
+ integer :revisable_number
17
+ datetime :created_at
18
+ datetime :revisable_current_at
19
+ datetime :revisable_revised_at
20
+
21
+ acts_as_revisable :revision_class_name => 'FakeRevision', :on_delete => :revise
22
+ end
23
+ build_model :fake_revision do
24
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Rails.env.to_sym])
25
+ string :first_name
26
+ string :last_name
27
+ datetime :revisable_deleted_at
28
+ boolean :revisable_is_current
29
+ integer :revisable_original_id
30
+ integer :revisable_number
31
+ datetime :created_at
32
+ datetime :revisable_current_at
33
+ datetime :revisable_revised_at
34
+
35
+ acts_as_revision :revisable_class_name => 'FakeRevisable'
36
+
37
+ include DeletableInstanceMethods
38
+ end
39
+
40
+ @fake_revisable = FakeRevisable.create!({
41
+ :first_name => 'Some',
42
+ :last_name => 'Name'
43
+ })
44
+ @fake_revisable.destroy
45
+ @fake_revision = FakeRevision.find(@fake_revisable.id)
46
+ end
47
+ describe "restoring a deleted revision" do
48
+ it "sets revisable_deleted_at to nil" do
49
+ @fake_revision.should_receive(:revisable_deleted_at=).with(nil)
50
+ @fake_revision.restore
51
+ end
52
+ it "sets revisable_is_current to true" do
53
+ @fake_revision.should_receive(:revisable_is_current=).with(true)
54
+ @fake_revision.restore
55
+ end
56
+ it "saves the updated revision" do
57
+ @fake_revision.should_receive(:save)
58
+ @fake_revision.restore
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe EventRevision do
4
+
5
+ before(:each) do
6
+ @valid_attributes = {
7
+ :name => "value for name",
8
+ :event_type => "Meeting",
9
+ :start_on => Date.today,
10
+ :end_on => Date.today,
11
+ :location => "value for location",
12
+ :description => "value for description"
13
+ }
14
+ @event = Event.create!(@valid_attributes)
15
+ @event.name = 'other value'
16
+ @event.save
17
+ @event_revision = @event.find_revision(:previous)
18
+
19
+ # pending
20
+ #@contact = mock_model(Contact)
21
+ #Contact.stub(:find).and_return([@contact])
22
+ end
23
+
24
+ it "should have an attendee collection" do
25
+ pending
26
+ @event_revision.attendees.count.should == 0
27
+ end
28
+
29
+ it "should instantiate Contacts as attendees" do
30
+ pending
31
+ Contact.should_receive(:find).and_return([@contact])
32
+ @event_revision.attendee_roster = "#{@contact.id}"
33
+ @event_revision.attendees.should == [@contact]
34
+ end
35
+
36
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Event do
4
+ before(:each) do
5
+ @valid_attributes = {
6
+ :name => "value for name",
7
+ :event_type => "Meeting",
8
+ :start_on => Date.new(2010,5,5),
9
+ :end_on => Date.new(2010,5,6),
10
+ :location => "value for location",
11
+ :description => "value for description"
12
+ }
13
+ end
14
+
15
+ it "Event.past finds past events" do
16
+ past = Event.create!(@valid_attributes)
17
+ Event.create!(@valid_attributes.merge!({
18
+ :start_on => Date.new(2100,3,12),
19
+ :end_on => Date.new(2100,3,13)
20
+ }))
21
+ Event.past.first.should eql past
22
+ end
23
+
24
+ it "Event.future finds future events" do
25
+ Event.create!(@valid_attributes)
26
+ future = Event.create!(@valid_attributes.merge!({
27
+ :start_on => Date.new(2100,3,12),
28
+ :end_on => Date.new(2100,3,13)
29
+ }))
30
+ Event.future.first.should eql future
31
+ end
32
+
33
+ it "should create a new instance given valid attributes" do
34
+ Event.create!(@valid_attributes)
35
+ end
36
+
37
+ it "must start before it can end" do
38
+ event = Event.new(@valid_attributes)
39
+ event.end_on = Date.new(2010,5,3)
40
+ event.should_not be_valid
41
+ end
42
+
43
+ it "should find event types" do
44
+ Event.create!(@valid_attributes)
45
+ Event.create!(@valid_attributes.merge :event_type => 'Conference')
46
+ Event.existing_event_types.should == ['Conference', 'Meeting']
47
+ end
48
+
49
+ it "should call to_hash_for_calendar" do
50
+ event = Event.create! :name => "test", :start_on => "2010-01-01", :end_on => "2010-01-07",
51
+ :event_type => "meeting", :description => "some kind of meeting", :location => 'skype.address'
52
+ event.to_hash_for_calendar("/events/#{event.id}").should == { :id => event.id, :title => "test",
53
+ :start => Date.new(2010,1,1), :end => Date.new(2010,1,7), :url => "/events/#{event.id}",
54
+ :description => "some kind of meeting", :location => 'skype.address' }
55
+ end
56
+
57
+ it "should create a new version when an attribute is updated" do
58
+ event = Event.create!(@valid_attributes)
59
+ event.revision_number.should == 0
60
+ event.name = "updated test"
61
+ event.save
62
+ event.revision_number.should == 1
63
+ end
64
+
65
+ it "should create a new version when using update_attributes" do
66
+ event = Event.create!(@valid_attributes)
67
+ event.revision_number.should == 0
68
+ event.update_attributes(:name => "updated test")
69
+ event.revision_number.should == 1
70
+ end
71
+
72
+ it "should not create a new version when no attributes have changed" do
73
+ event = Event.create!(@valid_attributes)
74
+ event.revision_number.should == 0
75
+ event.name = @valid_attributes[:name]
76
+ event.save
77
+ event.revision_number.should == 0
78
+ end
79
+
80
+ context "with attendees" do
81
+
82
+ before(:each) do
83
+ @event = Event.create!(@valid_attributes)
84
+ # pending
85
+ #@contact = mock_model(Contact)
86
+ #@event.add_attendees([@contact.id])
87
+ #@event.save
88
+ #Contact.stub(:find).and_return([@contact])
89
+ end
90
+
91
+ context "adding an attendee" do
92
+
93
+ it "should update attendee_roster" do
94
+ pending
95
+ @event.attendee_roster.should == @contact.id.to_s
96
+ end
97
+
98
+ it "should create a new version" do
99
+ pending
100
+ @event.revision_number.should == 1
101
+ end
102
+
103
+ it "should have previous set of attendees available through the previous revision" do
104
+ pending
105
+ @event.find_revision(:previous).attendees.count.should == 0
106
+ @event.add_attendees([@contact.id])
107
+ @event.find_revision(:previous).attendees.count.should == 1
108
+ @event.attendees.count.should == 2
109
+ end
110
+ end
111
+
112
+ context "removing an attendee" do
113
+
114
+ before(:each) do
115
+ # pending
116
+ #@event.attendees.count.should == 1
117
+ #@attendee = @event.attendees.first
118
+ #@event.drop_attendees(@attendee.contact_id)
119
+ end
120
+
121
+ it "should not include the removed attendee in the current collection" do
122
+ pending
123
+ @event.attendees.count.should == 0
124
+ end
125
+
126
+ it "should create a new version" do
127
+ pending
128
+ @event.revision_number.should == 2
129
+ end
130
+
131
+ it "should have previous set of attendees available through the previous revision" do
132
+ pending
133
+ @event.find_revision(:previous).attendees.should == @attendee.contact
134
+ end
135
+
136
+ end
137
+ end
138
+
139
+ end