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