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.
- data/Gemfile +23 -0
- data/Gemfile.lock +161 -0
- data/README +1 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/app/controllers/application_controller.rb +4 -0
- data/app/controllers/attendees_controller.rb +53 -0
- data/app/controllers/event_calendar/application_controller.rb +5 -0
- data/app/controllers/event_revisions_controller.rb +26 -0
- data/app/controllers/events_controller.rb +129 -0
- data/app/helpers/event_calendar/application_helper.rb +118 -0
- data/app/helpers/events_helper.rb +2 -0
- data/app/models/attendee.rb +6 -0
- data/app/models/deletable_instance_methods.rb +7 -0
- data/app/models/event.rb +124 -0
- data/app/models/event_revision.rb +9 -0
- data/app/models/participant.rb +23 -0
- data/app/models/participator.rb +20 -0
- data/app/views/attendees/index.html.erb +14 -0
- data/app/views/attendees/new.html.erb +13 -0
- data/app/views/event-calendar-shared/_flash.html.erb +7 -0
- data/app/views/event-calendar-shared/_main_menu.html.erb +3 -0
- data/app/views/event-calendar-shared/_navigation.html.erb +15 -0
- data/app/views/event_revisions/index.html.erb +31 -0
- data/app/views/event_revisions/show.html.erb +5 -0
- data/app/views/events/_browse_event_revisions.html.erb +19 -0
- data/app/views/events/_event.html.erb +10 -0
- data/app/views/events/_event_details.html.erb +26 -0
- data/app/views/events/_form.html.erb +36 -0
- data/app/views/events/attendees.html.erb +29 -0
- data/app/views/events/edit.html.erb +3 -0
- data/app/views/events/index.html.erb +41 -0
- data/app/views/events/new.html.erb +3 -0
- data/app/views/events/search.html.erb +11 -0
- data/app/views/events/show.html.erb +30 -0
- data/app/views/layouts/application.html.erb +49 -0
- data/config/application.rb +42 -0
- data/config/blueprint_settings.yml +10 -0
- data/config/boot.rb +13 -0
- data/config/cucumber.yml +8 -0
- data/config/database.example.yml +22 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +26 -0
- data/config/environments/production.rb +49 -0
- data/config/environments/test.rb +38 -0
- data/config/initializers/backtrace_silencers.rb +7 -0
- data/config/initializers/formtastic.rb +55 -0
- data/config/initializers/inflections.rb +10 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/secret_token.rb +9 -0
- data/config/initializers/session_store.rb +10 -0
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +67 -0
- data/db/migrate/20101011142543_create_events.rb +19 -0
- data/db/migrate/20101011172027_create_attendees.rb +16 -0
- data/db/migrate/20101011200048_make_events_revisable.rb +25 -0
- data/db/schema.rb +45 -0
- data/db/seeds.rb +7 -0
- data/lib/event_calendar.rb +3 -0
- data/lib/event_calendar/engine.rb +25 -0
- data/lib/generators/event_calendar/install/USAGE +5 -0
- data/lib/generators/event_calendar/install/install_generator.rb +19 -0
- data/lib/generators/event_calendar/install/templates/event_calendar.rake +169 -0
- data/lib/tasks/blueprint.rake +25 -0
- data/lib/tasks/cucumber.rake +53 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/images/rails.png +0 -0
- data/public/javascripts/event_calendar.js +62 -0
- data/public/javascripts/event_calendar_behaviors.js +131 -0
- data/public/javascripts/fullcalendar.js +3965 -0
- data/public/javascripts/jquery-ui-1.7.2.custom.min.js +298 -0
- data/public/javascripts/jquery.clonePosition.js +27 -0
- data/public/javascripts/jquery.js +154 -0
- data/public/javascripts/jquery.qtip-1.0.0-rc3.js +2149 -0
- data/public/javascripts/jquery.string.1.0-min.js +6 -0
- data/public/javascripts/jquery.tablesorter.min.js +2 -0
- data/public/javascripts/lowpro.jquery.js +224 -0
- data/public/javascripts/rails.js +132 -0
- data/public/robots.txt +5 -0
- data/public/stylesheets/blueprint/grid.css +280 -0
- data/public/stylesheets/blueprint/icons/cross.png +0 -0
- data/public/stylesheets/blueprint/icons/doc.png +0 -0
- data/public/stylesheets/blueprint/icons/email.png +0 -0
- data/public/stylesheets/blueprint/icons/external.png +0 -0
- data/public/stylesheets/blueprint/icons/feed.png +0 -0
- data/public/stylesheets/blueprint/icons/im.png +0 -0
- data/public/stylesheets/blueprint/icons/key.png +0 -0
- data/public/stylesheets/blueprint/icons/pdf.png +0 -0
- data/public/stylesheets/blueprint/icons/tick.png +0 -0
- data/public/stylesheets/blueprint/icons/visited.png +0 -0
- data/public/stylesheets/blueprint/icons/xls.png +0 -0
- data/public/stylesheets/blueprint/ie.css +36 -0
- data/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
- data/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
- data/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
- data/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
- data/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
- data/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
- data/public/stylesheets/blueprint/plugins/rtl/screen.css +110 -0
- data/public/stylesheets/blueprint/plugins/silksprite/sprite.css +1 -0
- data/public/stylesheets/blueprint/plugins/silksprite/sprites.png +0 -0
- data/public/stylesheets/blueprint/print.css +29 -0
- data/public/stylesheets/blueprint/readme.txt +12 -0
- data/public/stylesheets/blueprint/screen.css +429 -0
- data/public/stylesheets/error_messages.css +65 -0
- data/public/stylesheets/formtastic.css +131 -0
- data/public/stylesheets/formtastic_changes.css +14 -0
- data/public/stylesheets/fullcalendar.css +574 -0
- data/public/stylesheets/fullcalendar_changes.css +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/smoothness/jquery-ui-1.7.2.custom.css +406 -0
- data/public/stylesheets/tablesorter/blue/asc.gif +0 -0
- data/public/stylesheets/tablesorter/blue/bg.gif +0 -0
- data/public/stylesheets/tablesorter/blue/desc.gif +0 -0
- data/public/stylesheets/tablesorter/blue/style.css +39 -0
- data/public/stylesheets/text_and_colors.css +49 -0
- data/spec/controllers/attendees_controller_spec.rb +27 -0
- data/spec/controllers/event_revisions_controller_spec.rb +86 -0
- data/spec/controllers/events_controller_spec.rb +168 -0
- data/spec/fixtures/event_calendar_events.yml +8 -0
- data/spec/models/deletable_instance_methods_spec.rb +61 -0
- data/spec/models/event_revision_spec.rb +36 -0
- data/spec/models/event_spec.rb +139 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/spec_helpers/mocks.rb +6 -0
- data/vendor/plugins/searchable_by/MIT-LICENSE +20 -0
- data/vendor/plugins/searchable_by/README +55 -0
- data/vendor/plugins/searchable_by/Rakefile +23 -0
- data/vendor/plugins/searchable_by/init.rb +2 -0
- data/vendor/plugins/searchable_by/install.rb +1 -0
- data/vendor/plugins/searchable_by/lib/searchable_by.rb +137 -0
- data/vendor/plugins/searchable_by/tasks/searchable_by_tasks.rake +4 -0
- data/vendor/plugins/searchable_by/test/boot.rb +21 -0
- data/vendor/plugins/searchable_by/test/database.yml +22 -0
- data/vendor/plugins/searchable_by/test/fixtures/companies.yml +10 -0
- data/vendor/plugins/searchable_by/test/fixtures/company.rb +5 -0
- data/vendor/plugins/searchable_by/test/fixtures/employee.rb +5 -0
- data/vendor/plugins/searchable_by/test/fixtures/employees.yml +28 -0
- data/vendor/plugins/searchable_by/test/fixtures/schema.rb +18 -0
- data/vendor/plugins/searchable_by/test/helper.rb +12 -0
- data/vendor/plugins/searchable_by/test/lib/activerecord_test_case.rb +43 -0
- data/vendor/plugins/searchable_by/test/lib/activerecord_test_connector.rb +75 -0
- data/vendor/plugins/searchable_by/test/lib/load_fixtures.rb +9 -0
- data/vendor/plugins/searchable_by/test/searchable_by_test.rb +73 -0
- data/vendor/plugins/searchable_by/uninstall.rb +1 -0
- 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,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
|