From d2bfbfd2810fbee673e43b2515db8bac527b3441 Mon Sep 17 00:00:00 2001 From: hukl Date: Mon, 16 Mar 2009 20:58:49 +0100 Subject: Refactored Chaos Calendar by wrapping libical and introducing event and occurrence model. More improvements to come. Enables us to create events with reoccurrence and intervals etc. --- test/fixtures/events.yml | 3 + test/fixtures/occurrences.yml | 1 + test/functional/events_controller_test.rb | 45 ++++++++++ test/functional/occurrences_controller_test.rb | 45 ++++++++++ test/unit/event_test.rb | 119 +++++++++++++++++++++++++ test/unit/helpers/events_helper_test.rb | 4 + test/unit/helpers/occurrences_helper_test.rb | 4 + test/unit/occurrence_test.rb | 8 ++ 8 files changed, 229 insertions(+) create mode 100644 test/fixtures/events.yml create mode 100644 test/fixtures/occurrences.yml create mode 100644 test/functional/events_controller_test.rb create mode 100644 test/functional/occurrences_controller_test.rb create mode 100644 test/unit/event_test.rb create mode 100644 test/unit/helpers/events_helper_test.rb create mode 100644 test/unit/helpers/occurrences_helper_test.rb create mode 100644 test/unit/occurrence_test.rb (limited to 'test') diff --git a/test/fixtures/events.yml b/test/fixtures/events.yml new file mode 100644 index 0000000..bd73671 --- /dev/null +++ b/test/fixtures/events.yml @@ -0,0 +1,3 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html + + diff --git a/test/fixtures/occurrences.yml b/test/fixtures/occurrences.yml new file mode 100644 index 0000000..a56c164 --- /dev/null +++ b/test/fixtures/occurrences.yml @@ -0,0 +1 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html diff --git a/test/functional/events_controller_test.rb b/test/functional/events_controller_test.rb new file mode 100644 index 0000000..5698c7b --- /dev/null +++ b/test/functional/events_controller_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class EventsControllerTest < ActionController::TestCase + # test "should get index" do + # get :index + # assert_response :success + # assert_not_nil assigns(:events) + # end + # + # test "should get new" do + # get :new + # assert_response :success + # end + # + # test "should create event" do + # assert_difference('Event.count') do + # post :create, :event => { } + # end + # + # assert_redirected_to event_path(assigns(:event)) + # end + # + # test "should show event" do + # get :show, :id => events(:one).to_param + # assert_response :success + # end + # + # test "should get edit" do + # get :edit, :id => events(:one).to_param + # assert_response :success + # end + # + # test "should update event" do + # put :update, :id => events(:one).to_param, :event => { } + # assert_redirected_to event_path(assigns(:event)) + # end + # + # test "should destroy event" do + # assert_difference('Event.count', -1) do + # delete :destroy, :id => events(:one).to_param + # end + # + # assert_redirected_to events_path + # end +end diff --git a/test/functional/occurrences_controller_test.rb b/test/functional/occurrences_controller_test.rb new file mode 100644 index 0000000..0b00e0e --- /dev/null +++ b/test/functional/occurrences_controller_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class OccurrencesControllerTest < ActionController::TestCase + # test "should get index" do + # get :index + # assert_response :success + # assert_not_nil assigns(:occurrences) + # end + # + # test "should get new" do + # get :new + # assert_response :success + # end + # + # test "should create occurrence" do + # assert_difference('Occurrence.count') do + # post :create, :occurrence => { } + # end + # + # assert_redirected_to occurrence_path(assigns(:occurrence)) + # end + # + # test "should show occurrence" do + # get :show, :id => occurrences(:one).to_param + # assert_response :success + # end + # + # test "should get edit" do + # get :edit, :id => occurrences(:one).to_param + # assert_response :success + # end + # + # test "should update occurrence" do + # put :update, :id => occurrences(:one).to_param, :occurrence => { } + # assert_redirected_to occurrence_path(assigns(:occurrence)) + # end + # + # test "should destroy occurrence" do + # assert_difference('Occurrence.count', -1) do + # delete :destroy, :id => occurrences(:one).to_param + # end + # + # assert_redirected_to occurrences_path + # end +end diff --git a/test/unit/event_test.rb b/test/unit/event_test.rb new file mode 100644 index 0000000..8d51b1a --- /dev/null +++ b/test/unit/event_test.rb @@ -0,0 +1,119 @@ +require 'test_helper' + +class EventTest < ActiveSupport::TestCase + + def setup + Page.delete_all + @cal_node = Node.create :slug => "calendar" + @cal_node.move_to_child_of Node.root + @draft = @cal_node.find_or_create_draft User.first + @draft.title = "99C3" + @draft.abstract = "The 99th Chaos Comunication Congress" + @draft.body = "Its totally freakin awesome" + @draft.save + @cal_node.publish_draft! + @cal_node.head.reload + end + + test 'verfy setup data' do + assert_not_nil @cal_node + assert_not_nil @cal_node.head + end + + test 'creating an event with malformed rrule raises exception' do + assert_raise(ArgumentError) do + Event.create!( + :start_time => "2009-01-01T15:23:42".to_time, + :end_time => "2009-01-01T20:05:23".to_time, + :url => "http://events.ccc.de/congress/2082", + :latitude => 52.525308, + :longitude => 13.378944, + :rrule => "FOOBAR", + :allday => false, + :custom_rrule => false, + :node_id => @cal_node.id + ) + end + end + + test 'create day event for node with one occurrence' do + assert_not_nil event = Event.create!( + :start_time => "2009-01-01T15:23:42".to_time, + :end_time => "2009-01-01T20:05:23".to_time, + :url => "http://events.ccc.de/congress/2082", + :latitude => 52.525308, + :longitude => 13.378944, + :rrule => nil, + :allday => false, + :custom_rrule => false, + :node_id => @cal_node.id + ) + + assert_equal 1, Occurrence.count + assert_equal event.start_time, Occurrence.first.start_time + assert_equal event.end_time, Occurrence.first.end_time + assert_equal @cal_node.head.title, Occurrence.first.summary + end + + test 'create day event with weekly reoccurrence and checking data' do + assert_not_nil event = Event.create!( + :start_time => "2009-01-01T15:23:42".to_time, + :end_time => "2009-01-01T20:05:23".to_time, + :url => "http://events.ccc.de/congress/2082", + :latitude => 52.525308, + :longitude => 13.378944, + :rrule => "FREQ=WEEKLY;INTERVAL=1", + :allday => false, + :custom_rrule => false, + :node_id => @cal_node.id + ) + + assert_not_nil scoped_occurrences = event.occurrences_in_range( + "2009-01-01".to_time, "2009-12-31".to_time + ) + + assert_equal 52, scoped_occurrences.length + + assert_equal "2009-12-24T15:23:42".to_time, scoped_occurrences[51].start_time + assert_equal "2009-12-24T20:05:23".to_time, scoped_occurrences[51].end_time + assert_equal "99C3", scoped_occurrences[51].summary + assert_equal @cal_node.event, scoped_occurrences[51].event + assert_equal @cal_node, scoped_occurrences[51].node + + assert_equal "2009-03-19T15:23:42".to_time, scoped_occurrences[11].start_time + assert_equal "2009-03-19T20:05:23".to_time, scoped_occurrences[11].end_time + assert_equal "99C3", scoped_occurrences[11].summary + assert_equal @cal_node.event, scoped_occurrences[11].event + assert_equal @cal_node, scoped_occurrences[11].node + + assert_equal "2009-01-01T15:23:42".to_time, scoped_occurrences[0].start_time + assert_equal "2009-01-01T20:05:23".to_time, scoped_occurrences[0].end_time + assert_equal "99C3", scoped_occurrences[0].summary + assert_equal @cal_node.event, scoped_occurrences[11].event + assert_equal @cal_node, scoped_occurrences[11].node + end + + test 'create chaosradio event with custom rrule and interval' do + assert_not_nil event = Event.create!( + :start_time => "2009-01-28T21:00:00".to_time, + :end_time => "2009-01-28T23:00:00".to_time, + :url => "http://chaosradio.ccc.de", + :latitude => 52.525308, + :longitude => 13.378944, + :rrule => "FREQ=MONTHLY;INTERVAL=1;BYDAY=-1WE", + :allday => false, + :custom_rrule => true, + :node_id => @cal_node.id + ) + + assert_not_nil scoped_occurrences = event.occurrences_in_range( + "2009-01-01".to_time, "2009-12-31".to_time + ) + + assert_equal 12, scoped_occurrences.length + + expected_days = [28, 25, 25, 29, 27, 24, 29, 26, 30, 28, 25, 30] + chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} + assert_equal expected_days, chaosradio_days + end +end \ No newline at end of file diff --git a/test/unit/helpers/events_helper_test.rb b/test/unit/helpers/events_helper_test.rb new file mode 100644 index 0000000..2e7567e --- /dev/null +++ b/test/unit/helpers/events_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class EventsHelperTest < ActionView::TestCase +end diff --git a/test/unit/helpers/occurrences_helper_test.rb b/test/unit/helpers/occurrences_helper_test.rb new file mode 100644 index 0000000..0692926 --- /dev/null +++ b/test/unit/helpers/occurrences_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class OccurrencesHelperTest < ActionView::TestCase +end diff --git a/test/unit/occurrence_test.rb b/test/unit/occurrence_test.rb new file mode 100644 index 0000000..91a78ec --- /dev/null +++ b/test/unit/occurrence_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class OccurrenceTest < ActiveSupport::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end -- cgit v1.3