def test_price_field_validation(self):
        input_data = {
            "title": "res_1",
            "amount": 100,
            "unit": "liter",
            "price": -1,
            "date": "2020-03-21"
        }

        serializer = ResourceSerializer(data=input_data)
        with self.assertRaises(ValidationError):
            serializer.is_valid(raise_exception=True)
    def test_ok(self):
        res_1 = Resource.objects.create(title='res_1',
                                        amount=100,
                                        unit='kg',
                                        price=15,
                                        date='2020-03-21')
        res_2 = Resource.objects.create(title='res_2',
                                        amount=200,
                                        unit='liter',
                                        price=10,
                                        date='2021-03-21')

        expected_data = [{
            "title": "res_1",
            "id": res_1.id,
            "amount": 100,
            "unit": "kg",
            "price": 15,
            "cost": round(res_1.amount * res_1.price, 2),
            "date": "2020-03-21"
        }, {
            "title": "res_2",
            "id": res_2.id,
            "amount": 200,
            "unit": "liter",
            "price": 10,
            "cost": round(res_2.amount * res_2.price, 2),
            "date": "2021-03-21"
        }]

        serializer = ResourceSerializer([res_1, res_2], many=True)

        self.assertEqual(serializer.data, expected_data)
Exemplo n.º 3
0
    def test_get(self):
        res_1 = Resource.objects.create(title='res_1', amount=100, unit='kg', price=15, date='2020-03-21')
        res_2 = Resource.objects.create(title='res_2', amount=200, unit='liter', price=10, date='2021-03-21')
        res_3 = Resource.objects.create(title='res_3', amount=300, unit='m', price=5, date='2021-03-21')

        serializer = ResourceSerializer([res_1, res_2, res_3], many=True)

        url = reverse('resources')
        response = self.client.get(url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['resources'], serializer.data)
        self.assertEqual(response.data['total_count'], 3)
Exemplo n.º 4
0
    def get(self, request, *args, **kwargs):
        """
        Функция обработки GET-запроса.
        Получение списка ресурсов.
        """
        # Получение списка ресурсов
        queryset = Resource.objects.all().order_by('id')
        # Сериализация полученного списка
        serializer = ResourceSerializer(queryset, many=True)

        return Response(
            {
                'resources': serializer.data,
                'total_count': len(serializer.data)
            },
            status=status.HTTP_200_OK)
Exemplo n.º 5
0
    def post(self, request, *args, **kwargs):
        """
        Функция обработки POST-запроса.
        Создание экземпляра ресурса.
        """
        # Получение данных запроса
        input_data = request.data
        # Валидация, сериализация входных данных и создание экземпляра
        serializer = ResourceSerializer(data=input_data)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
Exemplo n.º 6
0
    def _update(self, request, partial=False, *args, **kwargs):
        """Вспомогательная функция обновления экземпляра ресурса."""
        # Получение id экземпляра ресурса из данных запроса
        object_id = request.data.get('id')
        # Поиск объекта по полученному id
        resource_obj = id_validation(object_id)

        # Валидация, сериализация входных данных и обновление экземпляра
        serializer = ResourceSerializer(instance=resource_obj,
                                        data=request.data,
                                        partial=partial)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response(serializer.data, status=status.HTTP_200_OK)
    def test_read_only_fields(self):
        res_1 = Resource.objects.create(title='res_1',
                                        amount=100,
                                        unit='kg',
                                        price=15,
                                        date='2020-03-21')

        input_data = {
            "title": "res_1",
            "id": 10,
            "amount": 100,
            "unit": "liter",
            "price": 15,
            "cost": 100000,
            "date": "2020-03-21"
        }

        serializer = ResourceSerializer(instance=res_1, data=input_data)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        self.assertNotEqual(res_1.id, 10)
        self.assertEqual(res_1.amount * res_1.price, serializer.data['cost'])
        self.assertEqual(res_1.unit, "liter")