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