示例#1
0
def schedule_one(request, pk):
    """
    view to get or update or delete a single schedule corresponding
    to the primary key passed as an argument to the view.
    """
    try:
        schedule = Schedule.objects.get(pk=pk)
    except Schedule.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = ScheduleSerializer(instance=schedule)
        return JsonResponse(serializer.data, status=200)

    elif request.method == 'PUT':
        data = JSONParser().parse(request)
        serializer = ScheduleSerializer(instance=schedule, data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)

    elif request.method == 'DELETE':
        schedule.delete()
        return HttpResponse(status=204)
示例#2
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")
示例#3
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()
示例#4
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)
示例#5
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)
示例#6
0
def schedule_list(request):
    """
    view to fetch all schedules stored or to add a new schedule
    """
    if request.method == 'GET':
        schedules = Schedule.objects.all()
        serializers = ScheduleSerializer(instance=schedules, many=True)
        return JsonResponse(serializers.data, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = ScheduleSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)
示例#7
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,
                         '*****@*****.**')
示例#8
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)
示例#9
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)
示例#10
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)
示例#11
0
def serialize_input_data(description="placeholder",
                         subject="placeholder",
                         content="placeholder",
                         frequency=timedelta(days=1),
                         start_date=default_date_time(),
                         end_date=default_date_time(days=1),
                         status=Schedule.NOT_ADDED,
                         recipients=[],
                         num_schedules=1):
    for num in range(num_schedules):
        data = create_schedule_input_data(description=description,
                                          subject=subject,
                                          content=f"{content}: {num}",
                                          frequency=frequency,
                                          start_date=start_date,
                                          end_date=end_date,
                                          status=status,
                                          recipients=recipients)
        serializer = ScheduleSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
示例#12
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)