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)
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", )
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)
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, )
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)
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)
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)
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)
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)
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)