Chris@1295: # Redmine - project management software Chris@1295: # Copyright (C) 2006-2013 Jean-Philippe Lang Chris@1295: # Chris@1295: # This program is free software; you can redistribute it and/or Chris@1295: # modify it under the terms of the GNU General Public License Chris@1295: # as published by the Free Software Foundation; either version 2 Chris@1295: # of the License, or (at your option) any later version. Chris@1295: # Chris@1295: # This program is distributed in the hope that it will be useful, Chris@1295: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@1295: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@1295: # GNU General Public License for more details. Chris@1295: # Chris@1295: # You should have received a copy of the GNU General Public License Chris@1295: # along with this program; if not, write to the Free Software Chris@1295: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@1295: Chris@1295: require File.expand_path('../../../test_helper', __FILE__) Chris@1295: Chris@1295: class ActivitiesHelperTest < ActionView::TestCase Chris@1295: include ActivitiesHelper Chris@1295: Chris@1295: class MockEvent Chris@1295: attr_reader :event_datetime, :event_group, :name Chris@1295: Chris@1295: def initialize(group=nil) Chris@1295: @@count ||= 0 Chris@1295: @name = "e#{@@count}" Chris@1295: @event_datetime = Time.now + @@count.hours Chris@1295: @event_group = group || self Chris@1295: @@count += 1 Chris@1295: end Chris@1295: Chris@1295: def self.clear Chris@1295: @@count = 0 Chris@1295: end Chris@1295: end Chris@1295: Chris@1295: def setup Chris@1295: MockEvent.clear Chris@1295: end Chris@1295: Chris@1295: def test_sort_activity_events_should_sort_by_datetime Chris@1295: events = [] Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new Chris@1295: Chris@1295: assert_equal [ Chris@1295: ['e2', false], Chris@1295: ['e1', false], Chris@1295: ['e0', false] Chris@1295: ], sort_activity_events(events).map {|event, grouped| [event.name, grouped]} Chris@1295: end Chris@1295: Chris@1295: def test_sort_activity_events_should_group_events Chris@1295: events = [] Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new(events[0]) Chris@1295: events << MockEvent.new(events[0]) Chris@1295: Chris@1295: assert_equal [ Chris@1295: ['e2', false], Chris@1295: ['e1', true], Chris@1295: ['e0', true] Chris@1295: ], sort_activity_events(events).map {|event, grouped| [event.name, grouped]} Chris@1295: end Chris@1295: Chris@1295: def test_sort_activity_events_with_group_not_in_set_should_group_events Chris@1295: e = MockEvent.new Chris@1295: events = [] Chris@1295: events << MockEvent.new(e) Chris@1295: events << MockEvent.new(e) Chris@1295: Chris@1295: assert_equal [ Chris@1295: ['e2', false], Chris@1295: ['e1', true] Chris@1295: ], sort_activity_events(events).map {|event, grouped| [event.name, grouped]} Chris@1295: end Chris@1295: Chris@1295: def test_sort_activity_events_should_sort_by_datetime_and_group Chris@1295: events = [] Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new(events[1]) Chris@1295: events << MockEvent.new(events[2]) Chris@1295: events << MockEvent.new Chris@1295: events << MockEvent.new(events[2]) Chris@1295: Chris@1295: assert_equal [ Chris@1295: ['e6', false], Chris@1295: ['e4', true], Chris@1295: ['e2', true], Chris@1295: ['e5', false], Chris@1295: ['e3', false], Chris@1295: ['e1', true], Chris@1295: ['e0', false] Chris@1295: ], sort_activity_events(events).map {|event, grouped| [event.name, grouped]} Chris@1295: end Chris@1295: end