コード例 #1
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_true_for_reminder_before_deadline_type_if_today_is_two_days_before_following_deadline(
         self):
     # same week
     today = date(2011, 9, 9)
     reminder = Reminder(reminder_mode=ReminderMode.BEFORE_DEADLINE, day=2)
     deadline = Deadline(frequency=Week(7), mode="Following")
     self.assertTrue(reminder.should_be_send_on(deadline, today))
コード例 #2
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_false_for_reminder_before_deadline_type_if_today_is_not_two_days_before_deadline(
         self):
     today = date(2011, 9, 9)
     # Sunday deadline
     reminder = Reminder(reminder_mode=ReminderMode.BEFORE_DEADLINE, day=1)
     deadline = Deadline(frequency=Week(7), mode="That")
     self.assertFalse(reminder.should_be_send_on(deadline, today))
コード例 #3
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_true_for_reminder_after_deadline_type_if_today_is_three_days_after_deadline_2(
         self):
     # next week
     today = date(2011, 9, 13)
     reminder = Reminder(reminder_mode=ReminderMode.AFTER_DEADLINE, day=3)
     deadline = Deadline(frequency=Week(6), mode="That")
     self.assertTrue(reminder.should_be_send_on(deadline, today))
コード例 #4
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
    def test_should_return_data_senders_as_sender_list_if_remind_to_mode_is_datasenders_without_submissions(
            self):

        reminder_and_deadline_dict = {'should_send_reminder_to_all_ds': False}

        def getitem(name):
            return reminder_and_deadline_dict[name]

        data_senders = [{
            'name': 'reporter1',
            'mobile_number': 'tel1'
        }, {
            'name': 'reporter2',
            'mobile_number': 'tel2'
        }, {
            'name': 'reporter3',
            'mobile_number': 'tel3'
        }, {
            'name': 'reporter4',
            'mobile_number': 'tel4'
        }]
        today = date(2011, 2, 10)
        project = MagicMock(spec=Project)
        expected_sender_list = [data_senders[0], data_senders[2]]
        project.get_data_senders_without_submissions_for.return_value = expected_sender_list
        project.reminder_and_deadline.__getitem__.side_effect = getitem
        reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE)
        self.assertEqual(expected_sender_list,
                         reminder.get_sender_list(project, today, None))
コード例 #5
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_true_for_reminder_before_deadline_type_if_today_is_on_weekend(
         self):
     # Case where deadline is in next week, but reminder is scheduled today
     today = date(2011, 9, 11)
     reminder = Reminder(reminder_mode=ReminderMode.BEFORE_DEADLINE, day=2)
     deadline = Deadline(frequency=Week(2), mode="That")
     self.assertTrue(reminder.should_be_send_on(deadline, today))
コード例 #6
0
def _add_reminder_info_to_project(cleaned_data,
                                  project,
                                  organization,
                                  reminder_list=None):
    set_deadline = False
    if project.reminder_and_deadline.get('has_deadline'):
        project.reminder_and_deadline['frequency_period'] = cleaned_data[
            'frequency_period']
        if cleaned_data['frequency_period'] == 'month':
            if project.reminder_and_deadline.get('deadline_week'):
                del project['reminder_and_deadline']['deadline_week']
                set_deadline = True
            project.reminder_and_deadline['deadline_month'] = cleaned_data[
                'deadline_month']
        else:
            if project.reminder_and_deadline.get('deadline_month'):
                del project.reminder_and_deadline['deadline_month']
                set_deadline = True
            project.reminder_and_deadline['deadline_week'] = cleaned_data[
                'deadline_week']
        if project.reminder_and_deadline.get(
                'deadline_type') != cleaned_data['deadline_type']:
            set_deadline = True
        project.reminder_and_deadline['deadline_type'] = cleaned_data[
            'deadline_type']

        if reminder_list is None:
            reminder_list = Reminder.objects.filter(project_id=project.id)
        reminder_list.delete()

        if cleaned_data['should_send_reminders_before_deadline']:
            Reminder(project_id=project.id,
                     day=cleaned_data['number_of_days_before_deadline'],
                     message=cleaned_data['reminder_text_before_deadline'],
                     reminder_mode=ReminderMode.BEFORE_DEADLINE,
                     organization=organization).save()

        if cleaned_data['should_send_reminders_on_deadline']:
            Reminder(project_id=project.id,
                     day=0,
                     message=cleaned_data['reminder_text_on_deadline'],
                     reminder_mode=ReminderMode.ON_DEADLINE,
                     organization=organization).save()

        if cleaned_data['should_send_reminders_after_deadline']:
            Reminder(project_id=project.id,
                     day=cleaned_data['number_of_days_after_deadline'],
                     message=cleaned_data['reminder_text_after_deadline'],
                     reminder_mode=ReminderMode.AFTER_DEADLINE,
                     organization=organization).save()

        project.reminder_and_deadline[
            'should_send_reminder_to_all_ds'] = not cleaned_data[
                'whom_to_send_message']
    else:
        reminder_list = Reminder.objects.filter(project_id=project.id)
        reminder_list.delete()

    return project, set_deadline
コード例 #7
0
    def test_should_calculate_frequency_period_for_next_deadline_if_reminder_before_deadline(self):
        today = date(2011, 2, 10)
        project = Mock(spec=Project)
        mock_deadline = Mock(spec=Deadline)
        project.deadline.return_value = mock_deadline

        reminder = Reminder(reminder_mode=ReminderMode.BEFORE_DEADLINE)
        reminder.get_sender_list(project, today,None)
        mock_deadline.next_deadline.assert_called_once_with(today)
コード例 #8
0
 def test_should_create_reminder_log(self):
     reminder = Reminder(reminder_mode=ReminderMode.AFTER_DEADLINE, day=2)
     dbm_mock = Mock(spec=DatabaseManager)
     log = reminder.log(dbm_mock,
                        'test_project',
                        datetime.now(),
                        number_of_sms=10)
     self.assertTrue(isinstance(log, ReminderLog))
     dbm_mock._save_document.assert_called_once()
コード例 #9
0
    def test_should_calculate_frequency_period_for_next_deadline_if_reminder_on_deadline(self):
        today = date(2011, 2, 10)
        project = Mock(spec=Project)
        mock_deadline = Mock(spec=Deadline)
        project.deadline.return_value = mock_deadline

        reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE, remind_to=RemindTo.DATASENDERS_WITHOUT_SUBMISSIONS)
        reminder.get_sender_list(project, today,None)
        mock_deadline.current_deadline.assert_called_once_with(today)
コード例 #10
0
    def test_should_calculate_frequency_period_for_current_deadline_if_reminder_after_deadline(self):
        today = date(2011, 2, 10)
        project = Mock(spec=Project)
        mock_deadline = Mock(spec=Deadline)
        project.deadline.return_value = mock_deadline
        project.reminder_and_deadline.return_value = {'should_send_reminder_to_all_ds': True, 'has_deadline': True}

        reminder = Reminder(reminder_mode=ReminderMode.AFTER_DEADLINE)
        reminder.get_sender_list(project, today,None)
        mock_deadline.current_deadline.assert_called_once_with(today)
コード例 #11
0
 def test_should_return_all_data_senders_as_sender_list_if_remind_to_mode_is_all_datasenders(self):
     data_senders = [{'name': 'reporter1', 'mobile_number': 'tel1'},
             {'name': 'reporter2', 'mobile_number': 'tel2'},
             {'name': 'reporter3', 'mobile_number': 'tel3'},
             {'name': 'reporter4', 'mobile_number': 'tel4'}
     ]
     today = date(2011, 2, 10)
     project = Mock(spec=Project)
     project.get_data_senders.return_value = data_senders
     reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE)
     self.assertEqual(data_senders, reminder.get_sender_list(project, today,None))
コード例 #12
0
 def test_should_calculate_frequency_period_for_current_deadline_if_reminder_after_deadline(self):
     reminder_and_deadline_dict = {'should_send_reminder_to_all_ds': False, 'has_deadline': True}
     def getitem(name):
         return reminder_and_deadline_dict[name]
     today = date(2011, 2, 10)
     project = MagicMock(spec=Project)
     mock_deadline = MagicMock(spec=Deadline)
     project.deadline.return_value = mock_deadline
     project.reminder_and_deadline.__getitem__.side_effect = getitem
     reminder = Reminder(reminder_mode=ReminderMode.AFTER_DEADLINE)
     reminder.get_sender_list(project, today, None)
     mock_deadline.current_deadline.assert_called_once_with(today)
コード例 #13
0
    def test_should_return_data_senders_as_sender_list_if_remind_to_mode_is_datasenders_without_submissions(self):
        data_senders = [{'name': 'reporter1', 'mobile_number': 'tel1'},
                {'name': 'reporter2', 'mobile_number': 'tel2'},
                {'name': 'reporter3', 'mobile_number': 'tel3'},
                {'name': 'reporter4', 'mobile_number': 'tel4'}
        ]
        today = date(2011, 2, 10)
        project = Mock(spec=Project)
        expected_sender_list = [data_senders[0], data_senders[2]]
        project.get_data_senders_without_submissions_for.return_value = expected_sender_list

        reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE)
        self.assertEqual(expected_sender_list, reminder.get_sender_list(project, today,None))
コード例 #14
0
def manage_reminders(request, project_id):
    if request.method == 'GET':
        reminders = Reminder.objects.filter(project_id=project_id, voided=False)
        return HttpResponse(json.dumps([reminder.to_dict() for reminder in reminders]))

    if request.method == 'POST':
        reminders = json.loads(request.POST['reminders'])
        Reminder.objects.filter(project_id=project_id).delete()
        for reminder in reminders:
            Reminder(project_id=project_id, day=reminder['day'], message=reminder['message'],
                     reminder_mode=reminder['reminderMode'], organization=utils.get_organization(request),
                     remind_to=reminder['targetDataSenders']).save()
        return HttpResponse("Reminders has been saved")
コード例 #15
0
def create_reminder(request, project_id):
    if is_empty(request.POST['id']):
        Reminder(project_id=project_id, day=request.POST.get('day', 0), message=request.POST['message'],
                 reminder_mode=request.POST['reminder_mode'], remind_to=request.POST['remind_to'],
                 organization=utils.get_organization(request)).save()
        messages.success(request, 'Reminder added successfully')
    else:
        reminder = Reminder.objects.filter(project_id=project_id, id=request.POST['id'])[0]
        reminder.day = request.POST.get('day', 0)
        reminder.message = request.POST['message']
        reminder.reminder_mode = request.POST['reminder_mode']
        reminder.remind_to = request.POST['remind_to']
        reminder.save()
        messages.success(request, 'Reminder updated successfully')
    return HttpResponseRedirect(reverse(reminders, args=[project_id]))
コード例 #16
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_false_for_reminder_on_deadline_type_if_today_is_not_on_deadline(
         self):
     today = date(2011, 9, 10)
     reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE)
     deadline = Deadline(frequency=Week(5), mode="That")
     self.assertFalse(reminder.should_be_send_on(deadline, today))
コード例 #17
0
ファイル: test_reminders.py プロジェクト: mariot/datawinners
 def test_should_return_true_if_deadline_is_last_day_of_the_month_and_today_28th_of_february(
         self):
     today = date(2018, 2, 28)
     reminder = Reminder(reminder_mode=ReminderMode.ON_DEADLINE)
     deadline = Deadline(frequency=Month(0), mode="That")
     self.assertTrue(reminder.should_be_send_on(deadline, today))