示例#1
0
 def test_recipient_in_db_not_raises_validation_error(self):
     recipients = [{'name': 'test', 'email_address': '*****@*****.**'}]
     data_1 = create_schedule_input_data(content="placeholder 1",
                                         recipients=recipients)
     data_2 = create_schedule_input_data(content="placeholder 2",
                                         recipients=recipients)
     serializer_1 = ScheduleSerializer(data=data_1)
     serializer_2 = ScheduleSerializer(data=data_2)
     self.assertEqual(serializer_1.is_valid(), True)
     serializer_1.save()
     self.assertEqual(serializer_2.is_valid(), True)
     serializer_2.save()
示例#2
0
 def test_schedule_unique_together_validation(self):
     recipients = [{'name': 'test', 'email_address': '*****@*****.**'}]
     data_1 = create_schedule_input_data(recipients=recipients)
     serializer_1 = ScheduleSerializer(data=data_1)
     serializer_1.is_valid()
     serializer_1.save()
     data_2 = create_schedule_input_data(recipients=recipients)
     serializer_2 = ScheduleSerializer(data=data_2)
     serializer_2.is_valid()
     self.assertEqual(serializer_2.errors['non_field_errors'][0],
                      FIELDS_NOT_UNIQUE_TOGETHER_ERROR)
     with self.assertRaises(ValidationError):
         serializer_2.is_valid(raise_exception=True)
示例#3
0
 def test_update_schedule_end_date_before_start_raises_error(self):
     serialize_input_data(recipients=self.recipients)
     schedule = Schedule.objects.first()
     new_data = create_schedule_input_data()
     new_data['start_date'] = new_data['end_date'] + timedelta(days=1)
     serializer = ScheduleSerializer(instance=schedule, data=new_data)
     with self.assertRaises(ValidationError):
         serializer.is_valid(raise_exception=True)
示例#4
0
    def test_update_schedule_content(self):
        serialize_input_data(recipients=self.recipients)
        self.assertEqual(Schedule.objects.count(), 1)

        data = create_schedule_input_data(content="new content")
        schedule = Schedule.objects.first()
        updated_serializer = ScheduleSerializer(instance=schedule, data=data)
        self.assertEqual(updated_serializer.is_valid(), True)
        updated_serializer.save()
        self.assertEqual(schedule.content, updated_serializer.data['content'])
        self.assertEqual(schedule.content, "new content")
示例#5
0
    def test_update_one_schedule(self):
        data = create_schedule_input_data(recipients=self.recipients)
        response = self.client.post(path=self.schedule_base_url,
                                    data=data,
                                    content_type="application/json")
        self.assertEqual(response.status_code, 201)
        pk = [s.pk for s in Schedule.objects.all()]
        new_content = "new content"
        data = create_schedule_input_data(content=new_content)
        update_response = self.client.put(
            path=f'{self.schedule_base_url}{pk[0]}/',
            data=data,
            content_type="application/json")
        stream = BytesIO(update_response.content)
        json = JSONParser().parse(stream)

        self.assertEqual(update_response.status_code, 200)
        self.assertEqual(json['content'], new_content)

        schedule = Schedule.objects.get(id=pk[0])
        self.assertEqual(schedule.content, new_content)
示例#6
0
    def test_update_frequency_gt_end_date_raises_validation_error(self):
        serialize_input_data(recipients=self.recipients)
        self.assertEqual(Schedule.objects.count(), 1)

        data = create_schedule_input_data(frequency=timedelta(days=5),
                                          end_date=default_date_time(days=1))
        schedule = Schedule.objects.first()
        updated_serializer = ScheduleSerializer(instance=schedule, data=data)
        updated_serializer.is_valid()
        self.assertEqual(updated_serializer.errors['non_field_errors'][0],
                         FREQUENCY_GREATER_THAN_END_DATE_ERROR)
        with self.assertRaises(ValidationError):
            updated_serializer.is_valid(raise_exception=True)
示例#7
0
    def test_post_new_schedule(self):
        recipients = self.recipients
        data = create_schedule_input_data(recipients=recipients)

        response = self.client.post(path=self.schedule_base_url,
                                    data=data,
                                    content_type="application/json")

        self.assertEqual(response.status_code, 201)
        self.assertEqual(Schedule.objects.count(), 1)
        self.assertEqual(Recipient.objects.count(), 2)

        frequency = Schedule.objects.first().frequency
        self.assertIsInstance(frequency, timedelta)
示例#8
0
    def test_update_schedule_status_to_paused(self):
        serialize_input_data(recipients=self.recipients)
        schedule = Schedule.objects.first()
        self.assertEqual(schedule.status, Schedule.NOT_ADDED)

        new_data = create_schedule_input_data()
        new_data['status'] = Schedule.PAUSED
        serializer = ScheduleSerializer(instance=schedule, data=new_data)
        self.assertEqual(serializer.is_valid(), True)
        if serializer.is_valid():
            serializer.save()

        self.assertEqual(schedule.status, Schedule.PAUSED)
        self.assertEqual(Schedule.objects.count(), 1)
示例#9
0
    def test_recipients_more_than_500_raises_validation_error(self):
        data = {}
        recipients = [{
            'name': 'test',
            'email_address': f'test{idx}@test.com'
        } for idx in range(501)]
        data = create_schedule_input_data(recipients=recipients)

        serializer = ScheduleSerializer(data=data)
        serializer.is_valid()
        self.assertEqual(serializer.errors['non_field_errors'][0],
                         RECIPIENTS_GREATER_THAN_500_ERROR)

        with self.assertRaises(ValidationError):
            serializer.is_valid(raise_exception=True)
示例#10
0
 def test_serializer_can_deserialize_json(self):
     recipients = [{
         'name': 'test',
         'email_address': '*****@*****.**'
     }, {
         'name': 'test2',
         'email_address': '*****@*****.**'
     }]
     data = create_schedule_input_data(recipients=recipients)
     serializer = ScheduleSerializer(data=data)
     self.assertEqual(serializer.is_valid(), True)
     schedule = serializer.save()
     self.assertIsInstance(schedule, Schedule)
     self.assertEqual(Schedule.objects.count(), 1)
     self.assertEqual(Recipient.objects.count(), 2)
示例#11
0
    def test_update_schedule_recipients(self):
        serialize_input_data(recipients=self.recipients)
        self.assertEqual(Schedule.objects.count(), 1)
        recipients = [{'name': 'test', 'email_address': '*****@*****.**'}]
        data = create_schedule_input_data(recipients=recipients)
        schedule = Schedule.objects.first()
        updated_serializer = ScheduleSerializer(instance=schedule, data=data)
        self.assertEqual(updated_serializer.is_valid(), True)
        updated_serializer.save()
        updated_recipients = schedule.recipients.all()

        self.assertEqual(
            updated_recipients[0].email_address,
            updated_serializer.data['recipients'][0]['email_address'])
        self.assertEqual(updated_recipients[0].email_address,
                         '*****@*****.**')
示例#12
0
    def test_recipient_duplication_raises_validation_error(self):
        recipients = [{
            'name': 'test',
            'email_address': '*****@*****.**'
        }, {
            'name': 'test',
            'email_address': '*****@*****.**'
        }]

        data = create_schedule_input_data(recipients=recipients)

        serializer = ScheduleSerializer(data=data)
        serializer.is_valid()
        self.assertEqual(serializer.errors['non_field_errors'][0],
                         RECIPIENTS_CONTAIN_DUPLICATES_ERROR)
        with self.assertRaises(ValidationError):
            serializer.is_valid(raise_exception=True)
示例#13
0
    def test_update_schedule_frequency(self):
        serialize_input_data(start_date=default_date_time(),
                             end_date=default_date_time(days=5),
                             recipients=self.recipients)
        self.assertEqual(Schedule.objects.count(), 1)

        data = create_schedule_input_data(frequency=timedelta(days=2),
                                          end_date=default_date_time(days=5))
        schedule = Schedule.objects.first()
        updated_serializer = ScheduleSerializer(instance=schedule, data=data)
        self.assertEqual(updated_serializer.is_valid(), True)
        updated_serializer.save()
        self.assertEqual(updated_serializer.validated_data['frequency'],
                         timedelta(days=2))
        self.assertEqual(updated_serializer.validated_data['frequency'],
                         schedule.frequency)
        self.assertEqual(Schedule.objects.count(), 1)
示例#14
0
    def test_invalid_email_addresses_raise_validation_error(self):
        recipients = [{
            'name': 'test',
            'email_address': 'test'
        }, {
            'name': 'test',
            'email_address': '*****@*****.**'
        }]
        data = create_schedule_input_data(recipients=recipients)
        schedule_serializer = ScheduleSerializer(data=data)

        self.assertEqual(schedule_serializer.is_valid(), False)
        self.assertEqual(
            schedule_serializer.errors['recipients'][0]['email_address'][0],
            INVALID_EMAIL_ADDRESS_ERROR)
        self.assertEqual(Schedule.objects.count(), 0)
        self.assertEqual(Recipient.objects.count(), 0)
        with self.assertRaises(ValidationError):
            schedule_serializer.is_valid(raise_exception=True)
示例#15
0
    def test_updating_interval_adds_new_celery_task(self):
        serialize_input_data(recipients=self.recipients)
        schedule = Schedule.objects.first()
        interval = Interval.objects.first()
        self.assertEqual(interval.interval, schedule.frequency)
        self.assertIsNotNone(app.conf.beat_schedule[str(interval.interval)])
        self.assertEqual(Interval.objects.count(), 1)

        new_data = create_schedule_input_data()
        new_data['frequency'] = timedelta(days=3)
        new_data['end_date'] = new_data['start_date'] + timedelta(days=5)
        serializer = ScheduleSerializer(instance=schedule, data=new_data)
        if serializer.is_valid():
            serializer.save()

        interval = Interval.objects.get(interval=new_data['frequency'])
        self.assertIsNotNone(app.conf.beat_schedule[str(interval.interval)])
        # self.assertEqual(len(app.conf.beat_schedule), 2)
        self.assertEqual(Interval.objects.count(), 2)
示例#16
0
    def test_update_interval_when_updating_schedule(self):
        serialize_input_data(recipients=self.recipients)
        schedule = Schedule.objects.first()
        interval = Interval.objects.first()
        self.assertEqual(schedule.frequency, interval.interval)

        new_data = create_schedule_input_data()
        new_data['frequency'] = timedelta(days=3)
        new_data['end_date'] = new_data['start_date'] + timedelta(days=5)
        serializer = ScheduleSerializer(instance=schedule, data=new_data)

        self.assertEqual(serializer.is_valid(), True)
        if serializer.is_valid():
            serializer.save()
        interval = Interval.objects.get(interval=new_data['frequency'])
        self.assertEqual(Schedule.objects.count(), 1)
        self.assertEqual(Interval.objects.count(), 2)
        self.assertEqual(schedule.frequency, new_data['frequency'])
        self.assertEqual(schedule.frequency, interval.interval)