Repository :
http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
---------------------------------------------------------------
commit 426de57fa966e58677f2ed3e30d94ff7750e7946
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Tue Dec 11 21:59:16 2012 +0100
If the agenda isn't free, break and do the time zone change before checking the
agenda
When editing a recursive meeting and checking if the agenda is free in the future, we
should adjust the meeting time zone beforehand.
Fix fedocallib unit-test accordingly. Make more use of TODAY in the unit-tests and
move
the time in the test_edit_meeting to prevent two meetings overlapping.
---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 30 +++++++++++++++++-------------
fedocal/tests/test_fedocallib.py | 20 ++++++++++----------
2 files changed, 27 insertions(+), 23 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index 851bb5d..ceedcfb 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -501,15 +501,19 @@ def agenda_is_free_in_future(session, calendar, meeting_date,
if time_start <= meeting.meeting_time_start \
and meeting.meeting_time_start < time_stop:
agenda_free = False
+ break
elif time_start < meeting.meeting_time_stop \
and meeting.meeting_time_stop <= time_stop:
agenda_free = False
+ break
elif time_start < meeting.meeting_time_start \
and time_stop > meeting.meeting_time_stop:
agenda_free = False
+ break
elif time_start > meeting.meeting_time_start \
and time_stop < meeting.meeting_time_stop:
agenda_free = False
+ break
return agenda_free
@@ -822,10 +826,22 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
raise InvalidMeeting(
'The start date of your meeting is later than the end date.')
+ meeting_time_start = convert_time(
+ datetime(meeting_date.year, meeting_date.month, meeting_date.day,
+ meeting_time_start.hour,
+ meeting_time_start.minute),
+ tzone, 'UTC')
+ meeting_time_stop = convert_time(
+ datetime(meeting_date_end.year, meeting_date_end.month,
+ meeting_date_end.day,
+ meeting_time_stop.hour,
+ meeting_time_stop.minute),
+ tzone, 'UTC')
+
if recursion_frequency and recursion_ends:
futur_meeting_at_time = agenda_is_free_in_future(session,
calendarobj, meeting_date, recursion_ends,
- meeting_time_start, meeting_time_stop)
+ meeting_time_start.time(), meeting_time_stop.time())
if not bool(calendarobj.calendar_multiple_meetings) and \
not(futur_meeting_at_time):
@@ -866,18 +882,6 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
bool(free_time):
new_meeting.save(session)
- meeting_time_start = convert_time(
- datetime(meeting_date.year, meeting_date.month, meeting_date.day,
- meeting_time_start.hour,
- meeting_time_start.minute),
- tzone, 'UTC')
- meeting_time_stop = convert_time(
- datetime(meeting_date_end.year, meeting_date_end.month,
- meeting_date_end.day,
- meeting_time_stop.hour,
- meeting_time_stop.minute),
- tzone, 'UTC')
-
meeting.meeting_name = meeting_name
meeting.meeting_manager = '%s,' % fas_user.username
if comanager:
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index b76eb7f..3e8feaa 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -613,7 +613,7 @@ class Fedocallibtests(Modeltests):
output = fedocallib.get_by_date(self.session, calendarobj, TODAY,
TODAY + relativedelta(years=+1))
self.assertNotEqual(output, None)
- self.assertEqual(len(output), 45)
+ self.assertEqual(len(output), 43)
# pylint: disable=R0915
def test_add_meeting_fail(self):
@@ -926,7 +926,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited2',
- date.today() + timedelta(days=1), None,
+ TODAY + timedelta(days=1), None,
time(23, 0), time(23, 59), 'pingou',
'Information2', 'EMEA', 'Europe/Paris',
None, None,
@@ -941,7 +941,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1), None,
+ TODAY + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'Europe/Paris',
None, None,
@@ -957,18 +957,18 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
- 'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1), None,
- time(23, 0), time(23, 59), None,
+ 'Fedora-fr-meeting_edited2',
+ TODAY + timedelta(days=1), None,
+ time(22, 0), time(23, 0), None,
'Information', 'EMEA', 'Europe/Paris',
7, TODAY + timedelta(days=30),
None, None)
meeting = model.Meeting.by_id(self.session, 1)
self.assertNotEqual(meeting, None)
- self.assertEqual(meeting.meeting_name, 'Fedora-fr-meeting_edited')
+ self.assertEqual(meeting.meeting_name, 'Fedora-fr-meeting_edited2')
self.assertEqual(meeting.meeting_manager, 'username,')
self.assertEqual(meeting.meeting_information, 'Information')
- self.assertEqual(meeting.meeting_time_stop.minute, 59)
+ self.assertEqual(meeting.meeting_time_stop.minute, 0)
self.assertEqual(meeting.recursion_frequency, 7)
self.assertEqual(meeting.recursion_ends, TODAY + timedelta(days=30))
self.assertEqual(meeting.reminder, None)
@@ -977,7 +977,7 @@ class Fedocallibtests(Modeltests):
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited2',
date.today() + timedelta(days=1), None,
- time(23, 0), time(23, 59), None,
+ time(21, 0), time(22, 00), None,
'Information2', None, 'Europe/Paris',
None, None,
None, None)
@@ -997,7 +997,7 @@ class Fedocallibtests(Modeltests):
'Test meeting with reminder-2',
date.today() + timedelta(days=1), date.today() + timedelta(
days=3),
- time(23, 0), time(23, 59), None,
+ time(20, 0), time(21, 00), None,
'Information2', None, 'Europe/Paris',
None, None,
'H-24', 'test(a)example.org')