Esempio n. 1
0
    def test_search_by_name(self):
        """
        Search text should be contained by either firstname or
        lastname.
        """
        client1 = ClientFactory(member__firstname='tessst',
                                member__lastname='woooo')
        client2 = ClientFactory(member__firstname='woooo',
                                member__lastname='tessst')
        client3 = ClientFactory(member__firstname='woooo',
                                member__lastname='woooo')
        note1a = NoteFactory(client=client1)
        note1b = NoteFactory(client=client1)
        note2a = NoteFactory(client=client2)
        note2b = NoteFactory(client=client2)
        note3a = NoteFactory(client=client3)
        note3b = NoteFactory(client=client3)

        self.force_login()
        url = reverse('note:note_list')
        response = self.client.get(url, {'name': 'esss'})
        self.assertEqual(response.status_code, 200)
        notes = response.context['notes']
        self.assertIn(note1a, notes)
        self.assertIn(note1b, notes)
        self.assertIn(note2a, notes)
        self.assertIn(note2b, notes)
        self.assertNotIn(note3a, notes)
        self.assertNotIn(note3b, notes)
Esempio n. 2
0
 def setUpTestData(cls):
     cls.client1 = ClientFactory()
     cls.billed_orders = OrderFactory.create_batch(
         10,
         delivery_date=datetime.datetime.today(),
         client=cls.client1,
         status="D",
     )
     cls.orders = OrderFactory.create_batch(
         10,
         delivery_date=datetime.datetime.today(),
         client=ClientFactory(),
         status="O",
     )
Esempio n. 3
0
 def test_get_with_client_pk(self):
     client = ClientFactory()
     response = self.client.get(
         reverse('member:client_notes_add', kwargs={'pk': client.pk}))
     self.assertEqual(response.status_code, 200)
     content = str(response.content, encoding=response.charset)
     self.assertIn(str(client.pk), content)
     self.assertIn(client.member.firstname, content)
     self.assertIn(client.member.lastname, content)
Esempio n. 4
0
 def setUpTestData(cls):
     cls.clients = ClientFactory()
     cls.admin = User.objects.create_superuser(
         username='******',
         email='*****@*****.**',
         password='******')
     cls.note = NoteFactory.create(
         client=cls.clients,
         author=cls.admin,
     )
Esempio n. 5
0
 def test_allow_access_to_users_with_edit_permission(self):
     # Setup
     user = User.objects.create_superuser(username='******',
                                          email='*****@*****.**',
                                          password='******')
     user.save()
     self.client.login(username='******', password='******')
     client = ClientFactory()
     url = reverse('member:client_notes_add', kwargs={'pk': client.pk})
     # Run
     response = self.client.get(url)
     # Check
     self.assertEqual(response.status_code, 200)
Esempio n. 6
0
 def test_redirects_users_who_do_not_have_edit_permission(self):
     # Setup
     user = User.objects.create_user(username='******',
                                     email='*****@*****.**',
                                     password='******')
     user.is_staff = True
     user.save()
     self.client.login(username='******', password='******')
     client = ClientFactory()
     url = reverse('member:client_notes_add', kwargs={'pk': client.pk})
     # Run
     response = self.client.get(url)
     # Check
     self.assertEqual(response.status_code, 302)
Esempio n. 7
0
 def test_allow_access_to_users_with_edit_permission(self):
     # Setup
     user = User.objects.create_superuser(username='******',
                                          email='*****@*****.**',
                                          password='******')
     user.save()
     self.client.login(username='******', password='******')
     url = reverse('note:note_add')
     # Run
     response = self.client.post(url, {
         'note': "test note TEST_PHRASE",
         "client": ClientFactory().pk,
         "priority": '1'
     },
                                 follow=True)
     # Check
     self.assertEqual(response.status_code, 200)
Esempio n. 8
0
 def test_create_set_fields(self):
     """
     Test if author, date, is_read are correctly set.
     """
     time_1 = timezone.now()
     response = self.client.post(reverse('note:note_add'), {
         'note': "test note TEST_PHRASE",
         "client": ClientFactory().pk,
         "priority": '1',
         "category": '1'
     },
                                 follow=False)
     time_2 = timezone.now()
     self.assertEqual(response.status_code, 302)  # successful creation
     note = Note.objects.get(note__contains="TEST_PHRASE")
     self.assertEqual(note.author, self.admin)
     self.assertEqual(note.is_read, False)
     self.assertTrue(time_1 <= note.date_created <= time_2)
Esempio n. 9
0
    def test_route_meal_statistics(self):
        """
        On dashboard, routes statistics should display:
        "scheduled dishes (+ episodic default dishes)"
        for active, paused and pending clients.
        """
        self.client.login(username=self.admin.username, password="******")

        route_factory1 = RouteFactory()
        route_factory2 = RouteFactory()
        route_factory_empty = RouteFactory()  # Empty route

        meals_schedule_option, _ = Option.objects.get_or_create(
            name='meals_schedule', option_group='dish')

        test_clients = (
            # Status        Deliv  Route Mon T Wed T Fri S Sun
            (Client.PENDING, 'E', route_factory1, 0, 2, 3, 4, 5, 6, 7),  # 1
            (Client.PENDING, 'E', route_factory2, 2, 3, 0, 1, 0, 3, 5),  # 2
            (Client.PENDING, 'E', route_factory2, 2, 0, 0, 1, 2, 3, 5),  # 3
            (Client.ACTIVE, 'E', route_factory1, 1, 2, 3, 4, 5, 6, 0),  # 4
            (Client.ACTIVE, 'E', route_factory1, 1, 0, 3, 0, 5, 6, 3),  # 5
            (Client.ACTIVE, 'E', route_factory2, 2, 3, 4, 1, 2, 3, 1),  # 6
            (Client.PAUSED, 'E', route_factory1, 1, 2, 3, 4, 0, 4, 3),  # 7
            (Client.PAUSED, 'E', route_factory2, 2, 3, 0, 1, 2, 3, 5),  # 8
            (Client.PAUSED, 'E', route_factory2, 2, 3, 4, 0, 2, 3, 5),  # 9
            (Client.STOPNOCONTACT, 'E', route_factory1, 1, 2, 0, 4, 5, 6,
             3),  # 10
            (Client.STOPNOCONTACT, 'E', route_factory2, 0, 3, 4, 1, 2, 3,
             1),  # 11
            (Client.STOPCONTACT, 'E', route_factory1, 1, 2, 3, 4, 5, 6,
             7),  # 12
            (Client.STOPCONTACT, 'E', route_factory1, 1, 0, 3, 4, 5, 6,
             7),  # 13
            (Client.STOPCONTACT, 'E', route_factory2, 2, 3, 4, 1, 2, 3,
             5),  # 14
            (Client.DECEASED, 'E', route_factory1, 1, 2, 0, 4, 5, 6, 3),  # 15
            (Client.DECEASED, 'E', route_factory2, 2, 3, 4, 1, 0, 3, 1),  # 16
            (Client.PENDING, 'O', route_factory1, 1, 2, 3, 4, 5, 6, 7),  # 51
            (Client.PENDING, 'O', route_factory1, 7, 6, 5, 4, 3, 2, 1),  # 52
            (Client.PENDING, 'O', route_factory2, 2, 0, 4, 1, 2, 3, 5),  # 53
            (Client.ACTIVE, 'O', route_factory1, 6, 5, 0, 3, 2, 1, 5),  # 54
            (Client.ACTIVE, 'O', route_factory2, 2, 3, 0, 1, 0, 3, 1),  # 55
            (Client.ACTIVE, 'O', route_factory2, 2, 0, 4, 1, 2, 3, 1),  # 56
            (Client.PAUSED, 'O', route_factory1, 1, 2, 0, 4, 0, 4, 3),  # 57
            (Client.PAUSED, 'O', route_factory1, 1, 0, 3, 4, 2, 4, 3),  # 58
            (Client.PAUSED, 'O', route_factory2, 0, 3, 0, 1, 0, 3, 5),  # 59
            (Client.STOPNOCONTACT, 'O', route_factory1, 1, 2, 3, 4, 5, 6,
             3),  # 60
            (Client.STOPNOCONTACT, 'O', route_factory2, 2, 3, 4, 1, 2, 3,
             1),  # 61
            (Client.STOPCONTACT, 'O', route_factory1, 1, 2, 3, 4, 5, 6,
             7),  # 62
            (Client.STOPCONTACT, 'O', route_factory1, 1, 0, 3, 4, 5, 6,
             7),  # 63
            (Client.STOPCONTACT, 'O', route_factory2, 2, 3, 4, 1, 2, 3,
             5),  # 64
            (Client.DECEASED, 'O', route_factory1, 1, 2, 3, 4, 5, 6, 3),  # 65
            (Client.DECEASED, 'O', route_factory2, 2, 3, 4, 1, 2, 3, 1),  # 66
        )

        for status, delivery_type, route_factory, mon, tue, wed, thu, fri, sat, sun in test_clients:
            client_factory = ClientFactory(
                status=status,
                delivery_type=delivery_type,
                route=route_factory,
                meal_default_week={
                    "main_dish_monday_quantity": mon,
                    "main_dish_tuesday_quantity": tue,
                    "main_dish_wednesday_quantity": wed,
                    "main_dish_thursday_quantity": thu,
                    "main_dish_friday_quantity": fri,
                    "main_dish_saturday_quantity": sat,
                    "main_dish_sunday_quantity": sun,
                    "size_monday": "R",
                    "size_tuesday": "L",
                    "size_wednesday": "R",
                    "size_thursday": "R",
                    "size_friday": "R",
                    "size_saturday": "R",
                    "size_sunday": "R",
                    # These fields really doesn't matter
                    "diabetic_monday_quantity": 666,
                    "fruit_salad_monday_quantity": 666,
                    "compote_tuesday_quantity": 666,
                    "dessert_wednesday_quantity": 666,
                    "diabetic_thursday_quantity": 666,
                    "fruit_salad_thursday_quantity": 666,
                    "diabetic_friday_quantity": 666,
                    "fruit_salad_friday_quantity": 666,
                    "compote_saturday_quantity": 666,
                    "dessert_saturday_quantity": 666,
                    "diabetic_sunday_quantity": 666,
                    "fruit_salad_sunday_quantity": 666
                })

            if delivery_type == 'O':
                # Ongoing: only two delivery days!
                Client_option.objects.create(client=client_factory,
                                             option=meals_schedule_option,
                                             value=json.dumps(
                                                 ['tuesday', 'wednesday']))

        response = self.client.get(reverse_lazy('page:home'), follow=False)
        self.assertEqual(response.status_code, 200)
        routes = response.context['routes']
        routes = {
            route_name: (schedules, defaults)
            for route_name, defaults, schedules in routes
        }

        self.assertIn(route_factory1.name, routes)
        self.assertIn(route_factory2.name, routes)
        self.assertIn(route_factory_empty.name, routes)

        route1 = routes[route_factory1.name]
        route2 = routes[route_factory2.name]
        route_empty = routes[route_factory_empty.name]

        # Ongoing dishes -- ongoing clients on delivery days
        # Test clients 51 & 52 & 54 & 57 & 58
        self.assertEqual(route1[0].get('monday', 0), 0)
        self.assertEqual(route1[0].get('tuesday', 0), 2 + 6 + 5 + 2 + 0)
        self.assertEqual(route1[0].get('wednesday', 0), 3 + 5 + 0 + 0 + 3)
        self.assertEqual(route1[0].get('thursday', 0), 0)
        self.assertEqual(route1[0].get('friday', 0), 0)
        self.assertEqual(route1[0].get('saturday', 0), 0)
        self.assertEqual(route1[0].get('sunday', 0), 0)

        # Test clients 53 & 55 & 56 & 59
        self.assertEqual(route2[0].get('monday', 0), 0)
        self.assertEqual(route2[0].get('tuesday', 0), 0 + 3 + 0 + 3)
        self.assertEqual(route2[0].get('wednesday', 0), 4 + 0 + 4 + 0)
        self.assertEqual(route2[0].get('thursday', 0), 0)
        self.assertEqual(route2[0].get('friday', 0), 0)
        self.assertEqual(route2[0].get('saturday', 0), 0)
        self.assertEqual(route2[0].get('sunday', 0), 0)

        self.assertEqual(route_empty[0].get('monday', 0), 0)
        self.assertEqual(route_empty[0].get('tuesday', 0), 0)
        self.assertEqual(route_empty[0].get('wednesday', 0), 0)
        self.assertEqual(route_empty[0].get('thursday', 0), 0)
        self.assertEqual(route_empty[0].get('friday', 0), 0)
        self.assertEqual(route_empty[0].get('saturday', 0), 0)
        self.assertEqual(route_empty[0].get('sunday', 0), 0)

        # Episodic dishes -- ongoing clients out of delivery days
        #                    and episodic clients
        # Test clients 1 & 4 & 5 & 7 (episodic)
        #              51 & 52 & 54 & 57 & 58 (ongoing)
        self.assertEqual(route1[1].get('monday', 0), 3)
        self.assertEqual(route1[1].get('tuesday', 0), 6)
        self.assertEqual(route1[1].get('wednesday', 0), 12)
        self.assertEqual(route1[1].get('thursday', 0), 12)
        self.assertEqual(route1[1].get('friday', 0), 15)
        self.assertEqual(route1[1].get('saturday', 0), 22)
        self.assertEqual(route1[1].get('sunday', 0), 13)

        # Test clients 2 & 3 & 6 & 8 & 9 (episodic)
        #              53 & 55 & 56 & 59 (ongoing)
        self.assertEqual(route2[1].get('monday', 0), 10)
        self.assertEqual(route2[1].get('tuesday', 0), 12)
        self.assertEqual(route2[1].get('wednesday', 0), 8)
        self.assertEqual(route2[1].get('thursday', 0), 4)
        self.assertEqual(route2[1].get('friday', 0), 8)
        self.assertEqual(route2[1].get('saturday', 0), 15)
        self.assertEqual(route2[1].get('sunday', 0), 21)

        self.assertEqual(route_empty[1].get('monday', 0), 0)
        self.assertEqual(route_empty[1].get('tuesday', 0), 0)
        self.assertEqual(route_empty[1].get('wednesday', 0), 0)
        self.assertEqual(route_empty[1].get('thursday', 0), 0)
        self.assertEqual(route_empty[1].get('friday', 0), 0)
        self.assertEqual(route_empty[1].get('saturday', 0), 0)
        self.assertEqual(route_empty[1].get('sunday', 0), 0)
Esempio n. 10
0
    def setUpTestData(cls):
        meal_default_week = {
            "main_dish_friday_quantity": 1,
            "main_dish_monday_quantity": 1,
            "main_dish_saturday_quantity": 1,
            "main_dish_sunday_quantity": 1,
            "main_dish_thursday_quantity": 1,
            "main_dish_tuesday_quantity": 1,
            "main_dish_wednesday_quantity": 1,

            "size_friday": "L",
            "size_monday": "L",
            "size_saturday": "L",
            "size_sunday": "L",
            "size_thursday": "L",
            "size_tuesday": "L",
            "size_wednesday": "L",

            "dessert_friday_quantity": 1,
            "dessert_monday_quantity": 1,
            "dessert_saturday_quantity": 1,
            "dessert_sunday_quantity": 1,
            "dessert_thursday_quantity": 1,
            "dessert_tuesday_quantity": 1,
            "dessert_wednesday_quantity": 1,
        }
        cls.route1 = RouteFactory()
        cls.route2 = RouteFactory()
        cls.c_valid = ClientFactory(
            pk=10,
            status=Client.ACTIVE,
            delivery_type="O",  # ongoing
            route=cls.route1,
            meal_default_week=meal_default_week,
            member=MemberFactory(
                firstname="Valid",
                lastname="Valid",
                address=AddressFactory()
            )
        )
        cls.c_nr = ClientFactory(
            pk=20,
            status=Client.ACTIVE,
            delivery_type="O",  # ongoing
            route=None,
            meal_default_week=meal_default_week,
            member=MemberFactory(
                firstname="Nronly",
                lastname="Nronly",
                address=AddressFactory()
            )
        )
        cls.c_ng = ClientFactory(
            pk=30,
            status=Client.ACTIVE,
            delivery_type="O",  # ongoing
            route=cls.route2,
            meal_default_week=meal_default_week,
            member=MemberFactory(
                firstname="Ngonly",
                lastname="Ngonly",
                address=AddressFactory(
                    latitude=None
                )
            )
        )
        cls.c_nrng = ClientFactory(
            pk=40,
            status=Client.ACTIVE,
            delivery_type="O",  # ongoing
            route=None,
            meal_default_week=meal_default_week,
            member=MemberFactory(
                firstname="Nrng",
                lastname="Nrng",
                address=AddressFactory(
                    longitude=None
                )
            )
        )

        cls.main_dish = ComponentFactory(
            name="coq au vin",
            component_group="main_dish")
        cls.sides = ComponentFactory(
            name="sides",
            component_group="sides")

        cls.ingred_chickens = []
        cls.ingred_wines = []
        for client in (cls.c_valid, cls.c_nr, cls.c_ng, cls.c_nrng):
            # Ensure that orders are created when refrshing orders.
            client.set_simple_meals_schedule([
                'monday', 'tuesday', 'wednesday', 'thursday', 'friday',
                'saturday', 'sunday'])

            # client-specific ingredient (for testing clashes)
            this_chicken = IngredientFactory(
                name="chicken_{0}".format(client.id),
                ingredient_group="meat")
            this_wine = IngredientFactory(
                name="wine_{0}".format(client.id),
                ingredient_group="oils_and_sauces")

            # add them to main_dish
            ComponentIngredientFactory(
                component=cls.main_dish,
                ingredient=this_chicken)
            ComponentIngredientFactory(
                component=cls.main_dish,
                ingredient=this_wine)

            # all special veggies, special winehaters
            this_incompatib = IncompatibilityFactory(
                restricted_item=RestrictedItemFactory(
                    name="veggie_{0}".format(client.id),
                    restricted_item_group="meat"
                ),
                ingredient=this_chicken
            )
            Restriction.objects.create(
                client=client,
                restricted_item=this_incompatib.restricted_item)
            Client_avoid_ingredient.objects.create(
                client=client,
                ingredient=this_wine)

            # keep track of these chickens and wines
            cls.ingred_chickens.append(this_chicken)
            cls.ingred_wines.append(this_wine)