示例#1
0
    def handle(self, *args, **options):
        """
        Build menus from test_settings
        :param args:
        :param options:
        :return:
        """
        Entree.objects.all().delete()
        Menu.objects.all().delete()
        Otable.objects.all().delete()
        # Load Entrees
        for e in test_settings.ENTREES:
            new_entree = Entree()
            new_entree.name = e[0]
            new_entree.category = e[1]
            new_entree.configurations = e[2]
            new_entree.sides = e[3]
            new_entree.price = e[4]
            new_entree.save()
        entrees = Entree.objects.all()
        # load menus assign entries
        for m in test_settings.MENUS:
            new_menu = Menu()
            new_menu.name = m[0]
            new_menu.save()
            for e in m[1]:
                new_menu.entrees.add(entrees[e])

        # load tables
        for t in test_settings.TABLES:
            new_table = Otable()
            new_table.name = t
            new_table.save()
示例#2
0
class TestMenuViewSet(APITestCase):
    def setUp(self):
        self.dish = Dish()

        self.dish.name = 'test name'
        self.dish.description = 'test description'
        self.dish.price = 10
        self.dish.preparation_time = 20
        self.dish.is_vege = False
        self.dish.save()

        self.menu1 = Menu()
        self.menu1.name = 'Test menu1'
        self.menu1.description = 'test desc'
        self.menu1.save()

        self.menu2 = Menu()
        self.menu2.name = 'Test menu2'
        self.menu2.description = 'test desc'
        self.menu1.save()

        self.test_user1 = User.objects.create_user(username='******',
                                                   password='******')
        self.test_user1.save()

    def test_public_menu_viewset(self):
        queryset = Menu.objects.get(id=self.dish.id)
        queryset.dishes.add(self.dish.id)
        queryset.dishes_count = 1
        queryset.save()

        response = self.client.get('/api/public/menu/')
        self.assertEquals(response.status_code, status.HTTP_200_OK)
        self.assertEquals(response.data['count'], 1)
示例#3
0
def _import_menu(path, label, icon, show, parent, *args, **kwargs):
    menu = Menu()
    menu.path = path
    menu.title = label
    menu.icon = icon
    menu.show = show
    menu.parent = parent
    menu.save()
    return menu
示例#4
0
 def add(self, name, description, expire_date):
     try:
         obj = Orm(name=name,
                   description=description,
                   expiration_date=expire_date)
         obj.save()
         return True
     except Exception:
         return False
 def create_valid_menu(self, items, **kwargs):
     """items is a non-empty queryset of Item objects or a
     list of item PKs
     """
     menu = Menu(**VALID_MENU_DATA)
     for key, value in kwargs.items():
         setattr(menu, key, value)
     menu.save()  # can't add MTM relations to an object that isn't in DB
     menu.items = items
     menu.save()
     return menu
示例#6
0
class TestMenuModel(TestCase):
    def setUp(self):
        self.object1 = Menu()
        self.object1.name = 'menu 1'
        self.object1.description = 'desc 1'
        self.object1.save()

        self.queryset = Menu.objects.all()

    def test_menu_created(self):
        self.assertEquals(len(self.queryset), 1)
        self.assertEquals(self.queryset[0].__str__(), f'{self.object1.name}')
示例#7
0
def submit_menu(request):
    if not (request.user.is_authenticated and check_if_steward(request.user)):
        return HttpResponseRedirect(reverse('menu:index'))

    days_to_num = {
        "Sunday Brunch": 0,
        "Sunday Dinner": 0,
        "Monday Dinner": 1,
        "Tuesday Dinner": 2,
        "Wednesday Dinner": 3,
        "Thursday Dinner": 4
    }

    d = dict(request.POST.iterlists())
    start_date = datetime.strptime(request.POST.get('start_date'),
                                   "%Y-%m-%d").date()

    Menu.objects.filter(start_date=start_date).delete()

    menu = Menu(start_date=start_date,
                servings=request.POST.get("serving_size"),
                notes=request.POST.get("notes"))
    menu.save()

    for key, item in d.items():
        if "day" in key:
            day_num = key.split("_")[1]
            meal_key = "item_" + day_num

            recipes = d[
                meal_key]  #list of all recipe names corresponding to that meal in the menu
            meal = Meal(menu=menu,
                        date=start_date +
                        timedelta(days_to_num[request.POST.get(key)]),
                        meal_name=request.POST.get(key))
            meal.save()

            # add automatic lateplates
            for auto_plate in AutoLatePlate.objects.all():
                if str(request.POST.get(key)) in str(auto_plate.days):
                    user = User.objects.filter(
                        username=auto_plate.username).first()
                    l = LatePlate(meal=meal, name=getLatePlateText(user))
                    l.save()

            # add recipes
            for r in recipes:
                recipe = Recipe.objects.filter(recipe_name=r).first()
                meal.recipes.add(recipe)

    return HttpResponseRedirect(reverse('menu:index'))
示例#8
0
    def create(self, validated_data):

        try:
            with transaction.atomic():
                instance = Menu(start_date=validated_data['start_date'],
                                end_date=validated_data['end_date'],
                                user_id=validated_data['user_id'])
                instance.save()
                meals_ids = validated_data.get('meals_ids', [])
                for m_id in meals_ids:
                    instance.meals.add(m_id)
                return instance

        except Exception as exc:
            #raise serializers.ValidationError({"non_field_errors":[str(exc)]})
            raise serializers.ValidationError(
                {"non_field_errors": ['Database Error']})
示例#9
0
    def test_adding_dish_to_menu_view(self):
        test_menu = Menu()
        test_menu.name = 'Test menu'
        test_menu.description = 'Test description'
        test_menu.save()

        test_menu_queryset = Menu.objects.get(pk=test_menu.pk)

        self.client.login(username='******', password='******')
        url = reverse('add_dish_to_menu', args=[test_menu_queryset.pk])
        response = self.client.post(url, {'dish_pk': '5'})

        test_menu_queryset = Menu.objects.get(pk=test_menu.pk)

        self.assertEquals(response.status_code, 302)
        self.assertEquals(test_menu_queryset.dishes_count, 1)
        self.assertEquals(test_menu_queryset.dishes.count(), 1)
示例#10
0
class MenuTest(TestCase):

    fixtures = [
        "test/menu_menu",
    ]

    def setUp(self):
        # Menu's instance
        self.menu = Menu(pk=1)
        self.menu.save()

    def test_is_updated(self):
        # No updated
        get_updated = self.menu.is_updated()
        self.assertEquals(get_updated, False)

    def test_is_send(self):
        # Send False
        get_send = self.menu.is_send()
        self.assertEquals(get_send, False)
示例#11
0
class MenuTimeLineTest(TestCase):
    def setUp(self):
        self.user_subscribing_restaurant = User.objects.create_user(username='******', email='', password='******',
                                             address='서울시 서초구 서초2동 사랑의 교회')
        self.user_without_subscribing = User.objects.create_user(username='******', email='', password='******',
                                                                 address='서울시 서초구 서초2동 사랑의 교회')
        self.restaurant_create_one_menu = Restaurant.objects.create(
            name='굽내치킨1', title='굽내치킨1-서초점',
            min_order_price=10000, delivery_charge=1000, estimated_delivery_time='20:00',
            operation_start_hour='11:00', operation_end_hour='20:00', )
        self.restaurant_update_menu = Restaurant.objects.create(
            name='굽내치킨2', title='굽내치킨2-서초점',
            min_order_price=10000, delivery_charge=1000, estimated_delivery_time='20:00',
            operation_start_hour='11:00', operation_end_hour='20:00', )
        self.restaurant_without_menu_alarm = Restaurant.objects.create(
            name='굽내치킨3', title='굽내치킨-서초점',
            min_order_price=10000, delivery_charge=1000, estimated_delivery_time='20:00',
            operation_start_hour='11:00', operation_end_hour='20:00', )
        self.user_subscribing_restaurant.subscribed_restaurants.set = self.restaurant_create_one_menu
        self.created_menu = Menu(
            restaurant=self.restaurant_create_one_menu,
            name='갈비천왕',
            detail='갈비 맛입니다.',
            price=20000,
            type='양념류',
            img='test.jpg',
        )
        self.created_menu.save()

    def test_when_menutimeline_empty_return_message(self):
        '''
        타임라인이 없는 경우 메시지
        '''
        # Given
        self.client.login(username='******', password='******')
        # When
        response = self.client.get(reverse('timeline_api:menutimeline'))
        message = response.json()['message']
        # Then
        self.assertEqual(message, '구독 중인 레스토랑이 없거나 전해드릴 메뉴 알림이 없습니다.')
示例#12
0
    def test_menu_model_save_filter(self):
        """
        Ensure that menus can be created.
        """
        breakfest_menu = Menu()
        lunch_menu = Menu()
        dinner_menu = Menu()

        breakfest_menu.name = 'Breakfest'
        lunch_menu.name = 'Lunch'
        dinner_menu.name = 'Dinner'

        breakfest_menu.save()
        lunch_menu.save()
        dinner_menu.save()

        breakfest_menu = Menu.objects.filter(name='Breakfest')
        lunch_menu = Menu.objects.filter(name='Lunch')
        dinner_menu = Menu.objects.filter(name='Dinner')

        self.assertEqual(len(breakfest_menu), 1)
        self.assertEqual(len(lunch_menu), 1)
        self.assertEqual(len(dinner_menu), 1)
示例#13
0
class TestViews(TestCase):
    def setUp(self):
        self.client = Client()

        self.test_user1 = User.objects.create_user(username='******', password='******')
        self.test_user1.save()

        for i in range(50):
            self.menu1 = Menu()
            self.menu1.name = f'menu {i}'
            self.menu1.description = f'opis{i}'
            self.menu1.save()

        for i in range(50):
            self.dish1 = (Dish())
            self.dish1.name = f'danie {i}'
            self.dish1.description = f'opis {i}'
            self.dish1.price = i
            self.dish1.preparation_time = i + 12
            if i // 3 == 0:
                self.dish1.is_vege = True
            else:
                self.dish1.is_vege = False
            self.dish1.save()

        self.menu_queryset = Menu.objects.all()
        self.dish_queryset = Dish.objects.all()

        self.menu_queryset[0].dishes.set(self.dish_queryset)

    def test_user_not_logged_in(self):
        url = reverse('create_menu')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        url = reverse('add_dish_to_menu', args=['0'])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        url = reverse('menu_detail', args=['0'])
        response = self.client.post(url, {'dish_id': '4'})
        self.assertEquals(response.status_code, 403)

        url = reverse('edit_menu', args=['0'])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        url = reverse('edit_dish', args=['0'])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        url = reverse('delete_menu', args=['0'])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

        url = reverse('delete_dish', args=['0'])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 302)

    def test_home_view(self):
        url = reverse('home')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_home_view_not_empty_menu_shows(self):
        queryset = Menu.objects.get(pk=30)
        queryset.dishes.add('1')
        queryset.save()

        queryset = Menu.objects.get(pk=15)
        queryset.dishes.add('1')
        queryset.save()

        queryset = Menu.objects.filter(dishes_count__gt=0)

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

        for q in queryset:
            self.assertContains(response, q.name)

    def test_home_view_pagination(self):
        url = reverse('home')
        self.client.login(username='******', password='******')

        response = self.client.get(url)
        for i in range(10):
            self.assertContains(response, f'menu {i}')

        response = self.client.get(url + '?page=2')
        for i in range(10, 20):
            self.assertContains(response, f'menu {i}')

    def test_dish_list_view(self):
        url = reverse('dish_list')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_dish_list_view_pagination(self):
        url = reverse('dish_list')
        self.client.login(username='******', password='******')

        response = self.client.get(url)
        for i in range(10):
            self.assertContains(response, f'danie {i}')

        response = self.client.get(url + '?page=2')
        for i in range(10, 20):
            self.assertContains(response, f'danie {i}')

    def test_home_view_searching(self):
        url = reverse('home')
        self.client.login(username='******', password='******')

        response = self.client.get(url + '?name=24')
        self.assertContains(response, 'menu 24')

        response = self.client.get(url + '?name=24')
        self.assertContains(response, 'menu 24')

        response = self.client.get(url + '?sorting=name&sorting_direction=ASC')
        self.assertContains(response, 'menu 1')

        response = self.client.get(url + '?sorting=name&sorting_direction=DESC')
        self.assertContains(response, 'menu 49')

    def test_menu_detail_view(self):
        url = reverse('menu_detail', args=[self.menu_queryset[0].pk])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_dish_detail_view(self):
        url = reverse('dish_detail', args=[self.menu_queryset[0].pk])
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_param_replace(self):
        factory = RequestFactory()
        request = factory.get('/?sort_by=name&ascending=true')
        context = {'request': request}
        func_resp = param_replace(context)

        self.assertEquals(func_resp, 'sort_by=name&ascending=true')

    def test_create_menu_view(self):
        self.client.login(username='******', password='******')
        url = reverse('create_menu')
        response = self.client.get(url)

        self.assertEquals(response.status_code, 200)

    def test_create_dish_view(self):
        self.client.login(username='******', password='******')
        url = reverse('create_dish')
        response = self.client.get(url)

        self.assertEquals(response.status_code, 200)

    def test_create_dish_view(self):
        self.client.login(username='******', password='******')
        url = reverse('create_dish')
        response = self.client.get(url)

        self.assertEquals(response.status_code, 200)

    def test_add_dish_to_menu_view(self):
        self.client.login(username='******', password='******')
        url = reverse('add_dish_to_menu', args=[self.menu_queryset[0].pk])
        response = self.client.get(url)

        self.assertEquals(response.status_code, 200)

    def test_adding_dish_to_menu_view(self):
        test_menu = Menu()
        test_menu.name = 'Test menu'
        test_menu.description = 'Test description'
        test_menu.save()

        test_menu_queryset = Menu.objects.get(pk=test_menu.pk)

        self.client.login(username='******', password='******')
        url = reverse('add_dish_to_menu', args=[test_menu_queryset.pk])
        response = self.client.post(url, {'dish_pk': '5'})

        test_menu_queryset = Menu.objects.get(pk=test_menu.pk)

        self.assertEquals(response.status_code, 302)
        self.assertEquals(test_menu_queryset.dishes_count, 1)
        self.assertEquals(test_menu_queryset.dishes.count(), 1)

    def test_remove_dish_from_menu(self):
        self.client.login(username='******', password='******')
        url = reverse('menu_detail', args=[self.menu_queryset[0].pk])
        response = self.client.post(url, {'dish_pk': str(self.dish_queryset[5].pk)})

        self.assertEquals(response.status_code, 302)
示例#14
0
 def new(self, request):
     menu = Menu(creation_date=datetime.datetime.now())
     menu.save()
     request.session[CART_ID] = menu.id
     return menu
示例#15
0
class MyTests(TestCase):
    """all of the unittests"""
    def setUp(self):
        """create an instance in the database"""
        self.ingredient = Ingredient.objects.create(name="lskdjflkjfd")
        self.item = Item(
            name="LKJklsjd",
            description="LKSJdlfkjsldfjsd",
            chef=user,
        )
        self.item.save()
        self.item.ingredients.add(self.ingredient)

        self.menu = Menu(season="asdfasdfadsfadsf",
                         expiration_date=timezone.now() +
                         timezone.timedelta(days=1))
        self.menu.save()
        self.menu.items.add(self.item)

    def test_models_creation(self):
        now = timezone.now()
        self.assertLess(self.item.created_date, now)
        self.assertLess(self.menu.created_date, now)
        self.assertIn(self.ingredient, self.item.ingredients.all())
        self.assertIn(self.item, self.menu.items.all())
        self.assertEqual(user, self.item.chef)

    def test_menu_list_view(self):
        resp = self.client.get(reverse('mysite:menu_list'))
        self.assertEqual(resp.status_code, 200)
        self.assertIn(self.menu, resp.context['menus'])
        self.assertTemplateUsed(resp, 'menu/list_all_current_menus.html')
        self.assertContains(resp, self.menu.season)

    def test_menu_detail_view(self):
        resp = self.client.get(
            reverse('mysite:menu_detail', kwargs={'pk': self.menu.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(self.menu, resp.context['menu'])
        self.assertTemplateUsed(resp, 'menu/menu_detail.html')
        self.assertContains(resp, self.menu.season)

    def test_item_detail_view(self):
        resp = self.client.get(
            reverse('mysite:item_detail', kwargs={'pk': self.item.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(self.item, resp.context['item'])
        self.assertTemplateUsed(resp, 'menu/detail_item.html')
        self.assertContains(resp, self.item.name)

    def test_create_new_menu_view_get(self):
        resp = self.client.get(reverse('mysite:menu_new'))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/new_menu.html')
        self.assertContains(resp, "Create new menu")

    def test_create_new_menu_view_post(self):
        expiration_date = timezone.now() + timezone.timedelta(days=2)

        self.client.post('/menu/new/',
                         data={
                             'expiration_date':
                             expiration_date.strftime("%Y-%m-%d"),
                             'season':
                             'Spring 2018',
                             'created_date':
                             timezone.now().strftime("%Y-%m-%d"),
                             'items': ['1']
                         })

        self.assertEqual(Menu.objects.count(), 2)

    def test_edit_menu_view_get(self):
        resp = self.client.get(
            reverse('mysite:menu_edit', kwargs={'pk': self.menu.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/edit_menu.html')
        self.assertContains(resp, "Change menu")

    def test_edit_menu_view_post(self):
        expiration_date = timezone.now() + timezone.timedelta(days=3)

        self.client.post(
            reverse('mysite:menu_edit', args=[self.menu.id]), {
                'expiration_date': expiration_date.strftime("%Y-%m-%d"),
                'season': 'Spring 2019',
                'created_date': timezone.now().strftime("%Y-%m-%d"),
                'items': ['1']
            })
        menu = Menu.objects.get(id=1)
        self.assertEqual(menu.season, 'Spring 2019')

    def test_edit_item_view_get(self):
        resp = self.client.get(
            reverse('mysite:item_edit', kwargs={'pk': self.item.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/item_edit.html')
        self.assertContains(resp, "Change item")
示例#16
0
class NewVisitorTest(LiveServerTestCase):
    """basically runs through the website using the browser
    to see if its working"""
    def setUp(self):
        """establishes a model instance in the database"""
        self.browser = webdriver.Firefox()

        self.ingredient = Ingredient.objects.create(name="lskdjflkjfd")
        self.item = Item(
            name="LKJklsjd",
            description="LKSJdlfkjsldfjsd",
            chef=user,
        )
        self.item.save()
        self.item.ingredients.add(self.ingredient)

        self.menu = Menu(season="asdfasdfadsfadsf",
                         expiration_date=timezone.now() +
                         timezone.timedelta(days=1))
        self.menu.save()
        self.menu.items.add(self.item)

    def tearDown(self):
        self.browser.quit()

    # notice how this one doesn't start with 'test',
    # that's because it is a helper method to keep our code DRY.
    def solve_loading_interference(self,
                                   specific_text,
                                   specific_text_not="hippo"):
        """is a method instead of doing 'time.sleep()'"""
        #we set this up so not only do we not have to use a 'time.sleep()'
        #to let the browser load, we catch the browser when it loads
        #within a half second which cuts down on wait time to finish the testing.
        #you have to do a time.wait type of maneuver after whenever you do
        #input.send_keys.(Keys.ENTER) or click()
        start_time = time.time()
        while True:
            try:
                page_text = self.browser.find_element_by_tag_name('body').text
                self.assertIn(specific_text, page_text)
                self.assertNotIn(specific_text_not, page_text)
                return
            except (AssertionError, WebDriverException) as e:
                if time.time() - start_time > MAX_WAIT:
                    raise e
                time.sleep(0.5)

    def test_can_start_a_list_and_retrieve_it_later(self):
        """runs through the browser to make sure site is working"""

        self.browser.get(self.live_server_url)
        body_text = self.browser.find_element_by_tag_name('body').text
        self.assertIn("asdfasdfadsfadsf", body_text)

        anchors = self.browser.find_elements_by_tag_name('a')
        for anchor in anchors:
            if anchor.text == "asdfasdfadsfadsf":
                anchorA = anchor
                break
        anchorA.click()
        self.solve_loading_interference("On the menu this season:")

        edit_menu = self.browser.find_element_by_class_name('btn')
        edit_menu.click()
        self.solve_loading_interference("Change menu")

        edit_menu = self.browser.find_element_by_class_name('btn')
        edit_menu.click()
        self.solve_loading_interference("On the menu this season:")

        anchors = self.browser.find_elements_by_tag_name('a')
        for anchor in anchors:
            if anchor.text == "LKJklsjd":
                anchorA = anchor
                break
        anchorA.click()
        self.solve_loading_interference("lskdjflkjfd")

        anchors = self.browser.find_elements_by_tag_name('a')
        for anchor in anchors:
            if anchor.text == "Soda Fountain":
                anchorA = anchor
                break
        anchorA.click()
        self.solve_loading_interference("asdfasdfadsfadsf")

        new_menu = self.browser.find_element_by_class_name('top-menu')
        new_menu.click()
        self.solve_loading_interference("Create new menu")

        inputbox = self.browser.find_element_by_id('id_season')
        inputbox.send_keys('best menu ever')
        checkbox = self.browser.find_element_by_id('id_items_0')
        checkbox.click()

        el = self.browser.find_element_by_id('id_expiration_date_year')
        for option in el.find_elements_by_tag_name('option'):
            if option.text == '2019':
                option.click()  # select() in earlier versions of webdriver
                break
        submit_new_menu = self.browser.find_element_by_class_name('save')
        submit_new_menu.click()
        self.solve_loading_interference("On the menu this season")
示例#17
0
    def test_entree_model(self):
        """
        Ensure that entrees can be created and assigned to menus.
        """
        mex1 = Entree()
        mex2 = Entree()
        mex3 = Entree()

        us1 = Entree()
        us2 = Entree()
        us3 = Entree()

        mex1.name = 'Taco'
        mex1.configurations = 'chicken beef'
        mex2.name = 'Burrito'
        mex2.configurations = 'chicken beef'
        mex3.name = 'Tortilla Soup'
        mex1.category = 'Mexican'
        mex2.category = 'Mexican'
        mex3.category = 'Mexican'

        us1.name = 'Hot Dog'
        us1.configurations = 'white wholewheat'
        us1.sides = 'fries onion-ring'
        us2.name = 'Hamburger'
        us2.configurations = 'rare well'
        us2.sides = 'fries onion-ring'
        us3.name = 'Grilled Cheese'
        us2.configurations = 'american swiss brie'
        us1.category = 'American'
        us2.category = 'American'
        us3.category = 'American'

        mex1.price = 1.99
        mex2.price = 2.99
        mex3.price = 4.99
        mex1.save()
        mex2.save()
        mex3.save()
        us1.price = 1.99
        us2.price = 2.99
        us3.price = 3.99
        us1.save()
        us2.save()
        us3.save()

        # assign to menus


        breakfest_menu = Menu()
        lunch_menu = Menu()
        dinner_menu = Menu()

        breakfest_menu.name = 'Breakfest'
        lunch_menu.name = 'Lunch'
        dinner_menu.name = 'Dinner'


        breakfest_menu.save()
        lunch_menu.save()
        dinner_menu.save()

        breakfest_menu.entrees.add(mex1)
        breakfest_menu.entrees.add(us2)
        lunch_menu.entrees.add(mex3)
        lunch_menu.entrees.add(us1)
        dinner_menu.entrees.add(mex2)
        dinner_menu.entrees.add(us3)

        breakfest_entrees =  breakfest_menu.entrees.all()
        self.assertEqual('Hamburger', breakfest_entrees[0].name)
        now = dt.now()
        # test model signals that update update_at
        self.assertEqual(now.year, us1.updated_at.year)
        self.assertEqual(now.month, us1.updated_at.month)
        self.assertEqual(now.day, us1.updated_at.day)
        self.assertEqual(now.year, dinner_menu.updated_at.year)
        self.assertEqual(now.month, dinner_menu.updated_at.month)
        self.assertEqual(now.day, dinner_menu.updated_at.day)

        Entree.objects.all().delete()
        Menu.objects.all().delete()
class MyTests(TestCase):
    """all of the unittests"""
    def setUp(self):
        """create an instance in the database"""
        self.ingredient = Ingredient.objects.create(name="Pepperoni")
        self.item = Item(
            name="Pizza",
            description="Round and delicious",
            chef=user,
        )
        self.item.save()
        self.item.ingredients.add(self.ingredient)

        self.menu = Menu(season="YearLong",
                         expiration_date=timezone.now() +
                         timezone.timedelta(days=1))
        self.menu.save()
        self.menu.items.add(self.item)

    def test_models_creation(self):
        """Test creation of the model with sample data above"""
        now = timezone.now()
        self.assertLess(self.item.created_date, now)
        self.assertLess(self.menu.created_date, now)
        self.assertIn(self.ingredient, self.item.ingredients.all())
        self.assertIn(self.item, self.menu.items.all())
        self.assertEqual(user, self.item.chef)

    def test_menu_list_view(self):
        """Test the rendering of the menu list template"""
        resp = self.client.get(reverse('menu_list'))
        self.assertEqual(resp.status_code, 200)
        self.assertIn(self.menu, resp.context['menus'])
        self.assertTemplateUsed(resp, 'menu/menu_list.html')
        self.assertContains(resp, self.menu.season)

    def test_menu_detail_view(self):
        """Test the rendering of the menu detail view"""
        resp = self.client.get(
            reverse('menu_detail', kwargs={'pk': self.menu.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(self.menu, resp.context['menu'])
        self.assertTemplateUsed(resp, 'menu/menu_detail.html')
        self.assertContains(resp, self.menu.season)

    def test_item_detail_view(self):
        """Test the rendering of the item detail view"""
        resp = self.client.get(
            reverse('item_detail', kwargs={'pk': self.item.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(self.item, resp.context['item'])
        self.assertTemplateUsed(resp, 'menu/item_detail.html')
        self.assertContains(resp, self.item.name)

    def test_create_new_menu_view_get(self):
        """Test the rendering of the create new menu view"""
        resp = self.client.get(reverse('menu_new'))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/create_new_menu.html')
        self.assertContains(resp, "Add New Menu")

    def test_create_new_menu_view_post(self):
        """Test the posting of data from the create new menu view"""
        expiration_date = timezone.now() + timezone.timedelta(days=2)

        self.client.post('/menu/new/',
                         data={
                             'expiration_date':
                             expiration_date.strftime("%Y-%m-%d"),
                             'season':
                             'Spring 2018',
                             'created_date':
                             timezone.now().strftime("%Y-%m-%d"),
                             'items': ['1']
                         })

        self.assertEqual(Menu.objects.count(), 2)

    def test_edit_menu_view_get(self):
        """Test the rendering of the edit menu view"""
        resp = self.client.get(
            reverse('menu_edit', kwargs={'pk': self.menu.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/edit_menu.html')
        self.assertContains(resp, "Edit Menu")

    def test_edit_menu_view_post(self):
        """Test the posting of data from the edit menu view"""
        expiration_date = timezone.now() + timezone.timedelta(days=3)

        self.client.post(
            reverse('menu_edit', args=[self.menu.id]), {
                'expiration_date': expiration_date.strftime("%Y-%m-%d"),
                'season': 'Spring 2019',
                'created_date': timezone.now().strftime("%Y-%m-%d"),
                'items': ['1']
            })
        menu = Menu.objects.get(id=1)
        self.assertEqual(menu.season, 'Spring 2019')

    def test_edit_item_view_get(self):
        """Test the rendering of data from the item edit view"""
        resp = self.client.get(
            reverse('item_edit', kwargs={'pk': self.item.id}))
        self.assertEqual(resp.status_code, 200)
        self.assertTemplateUsed(resp, 'menu/item_edit.html')
        self.assertContains(resp, "Edit Item")