mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	Tests
This commit is contained in:
		@@ -256,7 +256,7 @@ class TransformedFood(Food):
 | 
			
		||||
                self.allergens.set(self.allergens.union(child.allergens.all()))
 | 
			
		||||
                if not (child.polymorphic_ctype.model == 'basicfood' and child.date_type == 'DDM'):
 | 
			
		||||
                    self.expiry_date = min(self.expiry_date, child.expiry_date)
 | 
			
		||||
        return super().save(force_insert, force_update, using, update_fields)
 | 
			
		||||
        return super().save(force_insert=False, force_update=force_update, using=using, update_fields=update_fields)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        verbose_name = _('Transformed food')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										0
									
								
								apps/food/tests/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								apps/food/tests/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -6,9 +6,12 @@ from django.contrib.auth.models import User
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
from activity.models import Activity, ActivityType
 | 
			
		||||
from member.models import Club
 | 
			
		||||
 | 
			
		||||
from ..api.views import AllergenViewSet, BasicFoodViewSet, TransformedFoodViewSet, QRCodeViewSet
 | 
			
		||||
from ..models import Allergen, BasicFood, TransformedFood, QRCode
 | 
			
		||||
from ..api.views import AllergenViewSet, BasicFoodViewSet, TransformedFoodViewSet, QRCodeViewSet, \
 | 
			
		||||
    DishViewSet, SupplementViewSet, OrderViewSet, FoodTransactionViewSet
 | 
			
		||||
from ..models import Allergen, BasicFood, TransformedFood, QRCode, Dish, Supplement, Order, FoodTransaction
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFood(TestCase):
 | 
			
		||||
@@ -117,9 +120,229 @@ class TestFood(TestCase):
 | 
			
		||||
            self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFoodOrder(TestCase):
 | 
			
		||||
    """
 | 
			
		||||
    Test Food Order
 | 
			
		||||
    """
 | 
			
		||||
    fixtures = ('initial',)
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.user = User.objects.create_superuser(
 | 
			
		||||
            username='admintoto',
 | 
			
		||||
            password='toto1234',
 | 
			
		||||
            email='toto@example.com'
 | 
			
		||||
        )
 | 
			
		||||
        self.client.force_login(self.user)
 | 
			
		||||
 | 
			
		||||
        sess = self.client.session
 | 
			
		||||
        sess['permission_mask'] = 42
 | 
			
		||||
        sess.save()
 | 
			
		||||
 | 
			
		||||
        self.basicfood = BasicFood.objects.create(
 | 
			
		||||
            id=1,
 | 
			
		||||
            name='basicfood',
 | 
			
		||||
            owner=Club.objects.get(name="BDE"),
 | 
			
		||||
            expiry_date=timezone.now(),
 | 
			
		||||
            is_ready=True,
 | 
			
		||||
            date_type='DLC',
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.transformedfood = TransformedFood.objects.create(
 | 
			
		||||
            id=2,
 | 
			
		||||
            name='transformedfood',
 | 
			
		||||
            owner=Club.objects.get(name="BDE"),
 | 
			
		||||
            expiry_date=timezone.now(),
 | 
			
		||||
            is_ready=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.second_transformedfood = TransformedFood.objects.create(
 | 
			
		||||
            id=3,
 | 
			
		||||
            name='second transformedfood',
 | 
			
		||||
            owner=Club.objects.get(name="BDE"),
 | 
			
		||||
            expiry_date=timezone.now(),
 | 
			
		||||
            is_ready=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.third_transformedfood = TransformedFood.objects.create(
 | 
			
		||||
            id=4,
 | 
			
		||||
            name='third transformedfood',
 | 
			
		||||
            owner=Club.objects.get(name="BDE"),
 | 
			
		||||
            expiry_date=timezone.now(),
 | 
			
		||||
            is_ready=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.activity = Activity.objects.create(
 | 
			
		||||
            activity_type=ActivityType.objects.get(name="Perm bouffe"),
 | 
			
		||||
            organizer=Club.objects.get(name="BDE"),
 | 
			
		||||
            creater=self.user,
 | 
			
		||||
            attendees_club_id=1,
 | 
			
		||||
            date_start=timezone.now(),
 | 
			
		||||
            date_end=timezone.now(),
 | 
			
		||||
            name="Test activity",
 | 
			
		||||
            open=True,
 | 
			
		||||
            valid=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.dish = Dish.objects.create(
 | 
			
		||||
            main=self.transformedfood,
 | 
			
		||||
            price=500,
 | 
			
		||||
            activity=self.activity,
 | 
			
		||||
            available=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.second_dish = Dish.objects.create(
 | 
			
		||||
            main=self.second_transformedfood,
 | 
			
		||||
            price=1000,
 | 
			
		||||
            activity=self.activity,
 | 
			
		||||
            available=True,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.supplement = Supplement.objects.create(
 | 
			
		||||
            dish=self.dish,
 | 
			
		||||
            food=self.basicfood,
 | 
			
		||||
            price=100,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.order = Order.objects.create(
 | 
			
		||||
            user=self.user,
 | 
			
		||||
            activity=self.activity,
 | 
			
		||||
            dish=self.dish,
 | 
			
		||||
        )
 | 
			
		||||
        self.order.supplements.add(self.supplement)
 | 
			
		||||
        self.order.save()
 | 
			
		||||
 | 
			
		||||
    def test_dish_list(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to display dish list
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:dish_list", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
    def test_dish_create(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to create a dish
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:dish_create", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
        response = self.client.post(reverse("food:dish_create", kwargs={"activity_pk": self.activity.pk}), data={
 | 
			
		||||
            "main": self.third_transformedfood.pk,
 | 
			
		||||
            "price": 4,
 | 
			
		||||
            "activity": self.activity.pk,
 | 
			
		||||
            "supplements-0-food": self.basicfood.pk,
 | 
			
		||||
            "supplements-0-price": 0.5,
 | 
			
		||||
            "supplements-TOTAL_FORMS": 1,
 | 
			
		||||
            "supplements-INITIAL_FORMS": 0,
 | 
			
		||||
            "supplements-MIN_NUM_FORMS": 0,
 | 
			
		||||
            "supplements-MAX_NUM_FORMS": 1000,
 | 
			
		||||
        })
 | 
			
		||||
        self.assertRedirects(response, reverse("food:dish_list", kwargs={"activity_pk": self.activity.pk}), 302, 200)
 | 
			
		||||
        self.assertTrue(Dish.objects.filter(main=self.third_transformedfood).exists())
 | 
			
		||||
        self.assertTrue(Supplement.objects.filter(food=self.basicfood, price=50).exists())
 | 
			
		||||
 | 
			
		||||
    def test_dish_update(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to update a dish
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:dish_update", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
        response = self.client.post(reverse("food:dish_update", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}), data={
 | 
			
		||||
            "price": 6,
 | 
			
		||||
            "supplements-0-food": self.basicfood.pk,
 | 
			
		||||
            "supplements-0-price": 1,
 | 
			
		||||
            "supplements-1-food": self.basicfood.pk,
 | 
			
		||||
            "supplements-1-price": 0.25,
 | 
			
		||||
            "supplements-TOTAL_FORMS": 2,
 | 
			
		||||
            "supplements-INITIAL_FORMS": 0,
 | 
			
		||||
            "supplements-MIN_NUM_FORMS": 0,
 | 
			
		||||
            "supplements-MAX_NUM_FORMS": 1000,
 | 
			
		||||
        })
 | 
			
		||||
        self.assertRedirects(response, reverse("food:dish_detail", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}), 302, 200)
 | 
			
		||||
        self.dish.refresh_from_db()
 | 
			
		||||
        self.assertTrue(Dish.objects.filter(main=self.transformedfood, price=600).exists())
 | 
			
		||||
        self.assertTrue(Supplement.objects.filter(dish=self.dish, food=self.basicfood, price=25).exists())
 | 
			
		||||
 | 
			
		||||
    def test_dish_detail(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to display dish details
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:dish_detail", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
    def test_dish_delete(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to delete a dish
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:dish_delete", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
        # Cannot delete already ordered Dish
 | 
			
		||||
        response = self.client.delete(reverse("food:dish_delete", kwargs={"activity_pk": self.activity.pk, "pk": self.dish.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 403)
 | 
			
		||||
        self.assertTrue(Dish.objects.filter(pk=self.dish.pk).exists())
 | 
			
		||||
 | 
			
		||||
        # Can delete a Dish with no order
 | 
			
		||||
        response = self.client.delete(reverse("food:dish_delete", kwargs={"activity_pk": self.activity.pk, "pk": self.second_dish.pk}))
 | 
			
		||||
        self.assertRedirects(response, reverse("food:dish_list", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertFalse(Dish.objects.filter(pk=self.second_dish.pk).exists())
 | 
			
		||||
 | 
			
		||||
    def test_order_food(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to make an order
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:order_create", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
        response = self.client.post(reverse("food:order_create", kwargs={"activity_pk": self.activity.pk}), data=dict(
 | 
			
		||||
            user=self.user.pk,
 | 
			
		||||
            activity=self.activity.pk,
 | 
			
		||||
            dish=self.second_dish.pk,
 | 
			
		||||
            supplements=self.supplement.pk
 | 
			
		||||
        ))
 | 
			
		||||
        self.assertRedirects(response, reverse("food:food_list"))
 | 
			
		||||
        self.assertTrue(Order.objects.filter(user=self.user, dish=self.second_dish, activity=self.activity).exists())
 | 
			
		||||
 | 
			
		||||
    def test_order_list(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to display order list
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:order_list", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
    def test_served_order_list(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to display served order list
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.get(reverse("food:served_order_list", kwargs={"activity_pk": self.activity.pk}))
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
 | 
			
		||||
    def test_serve_order(self):
 | 
			
		||||
        """
 | 
			
		||||
        Try to serve an order, then to unserve it
 | 
			
		||||
        """
 | 
			
		||||
        response = self.client.patch("/api/food/order/" + str(self.order.pk) + "/", data=dict(
 | 
			
		||||
            served=True
 | 
			
		||||
        ), content_type="application/json")
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
        self.order.refresh_from_db()
 | 
			
		||||
        self.assertTrue(Order.objects.filter(dish=self.dish, user=self.user, served=True).exists())
 | 
			
		||||
        self.assertIsNotNone(self.order.served_at)
 | 
			
		||||
 | 
			
		||||
        self.assertTrue(FoodTransaction.objects.filter(order=self.order, valid=True).exists())
 | 
			
		||||
 | 
			
		||||
        response = self.client.patch("/api/food/order/" + str(self.order.pk) + "/", data=dict(
 | 
			
		||||
            served=False
 | 
			
		||||
        ), content_type="application/json")
 | 
			
		||||
        self.assertEqual(response.status_code, 200)
 | 
			
		||||
        self.assertTrue(Order.objects.filter(dish=self.dish, user=self.user, served=False).exists())
 | 
			
		||||
 | 
			
		||||
        self.assertTrue(FoodTransaction.objects.filter(order=self.order, valid=False).exists())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestFoodAPI(TestAPI):
 | 
			
		||||
    def setUp(self) -> None:
 | 
			
		||||
        super().setUP()
 | 
			
		||||
        super().setUp()
 | 
			
		||||
 | 
			
		||||
        self.allergen = Allergen.objects.create(
 | 
			
		||||
            name='name',
 | 
			
		||||
@@ -168,3 +391,27 @@ class TestFoodAPI(TestAPI):
 | 
			
		||||
            Load QRCode API page and test all filters and permissions
 | 
			
		||||
            """
 | 
			
		||||
            self.check_viewset(QRCodeViewSet, '/api/food/qrcode/')
 | 
			
		||||
 | 
			
		||||
        def test_dish_api(self):
 | 
			
		||||
            """
 | 
			
		||||
            Load Dish API page and test all filters and permissions
 | 
			
		||||
            """
 | 
			
		||||
            self.check_viewset(DishViewSet, '/api/food/dish/')
 | 
			
		||||
 | 
			
		||||
        def test_supplement_api(self):
 | 
			
		||||
            """
 | 
			
		||||
            Load Supplement API page and test all filters and permissions
 | 
			
		||||
            """
 | 
			
		||||
            self.check_viewset(SupplementViewSet, '/api/food/supplement/')
 | 
			
		||||
 | 
			
		||||
        def test_order_api(self):
 | 
			
		||||
            """
 | 
			
		||||
            Load Order API page and test all filters and permissions
 | 
			
		||||
            """
 | 
			
		||||
            self.check_viewset(OrderViewSet, '/api/food/order/')
 | 
			
		||||
 | 
			
		||||
        def test_foodtransaction_api(self):
 | 
			
		||||
            """
 | 
			
		||||
            Load FoodTransaction API page and test all filters and permissions
 | 
			
		||||
            """
 | 
			
		||||
            self.check_viewset(FoodTransactionViewSet, '/api/food/foodtransaction/')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user