Ejemplo n.º 1
0
    def test_get_success_url(self):

        # create user for this test (It will only exist briefly in the test
        # database).
        user = create_user('alice', 'westerville')

        # Client sends HTTP requests and receives HTTP responses like a user's
        # browser.  It doesn't run any JavaScript, for that you need to use
        # Selenium to control a real browser.
        client = Client()

        # The first time I ran this test, I found that response.url was the
        # login page.  Ooops, forgot to log in.  Call the force_login method
        # to make Django act like we've gone through the login page
        client.force_login(user)

        box_number = BoxNumber.format_box_number(1)
        url = reverse('fpiweb:box_new', args=(box_number, ))

        box_type = BoxType.objects.get(box_type_code='Evans')

        post_data = {
            'box_number': box_number,
            'box_type': box_type.pk,
        }

        response = client.post(url, post_data)

        # Check whether the HTTP status code is 200, if it's not display the
        # text of the page returned.  Sometimes this makes looking for what
        # happened like looking for a needle in a haystack.

        # Unit-testing frameworks like unittest or pytest may discard text
        # sent to the terminal (stdout) unless a test fails.
        # print(dir(response))

        # Here's a handy page to bookmark:
        #     https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
        #
        # Status code 418 is my favorite!
        self.assertEqual(302, response.status_code, str(response.content))

        box = Box.objects.order_by('-pk').first()
        self.assertEqual(reverse('fpiweb:box_details', args=(box.pk, )),
                         response.url)

        box = Box.objects.get(box_number=box_number)

        self.assertEqual(box_type, box.box_type)
        self.assertEqual(box_type.box_type_qty, box.quantity)
    def test_get(self):

        user = create_user('bob', 'shrock')

        client = Client()
        client.force_login(user)

        response = client.get(self.url)
        self.assertEqual(200, response.status_code)

        pallet_select_form = response.context.get('pallet_select_form')
        self.assertIsInstance(pallet_select_form, PalletSelectForm)

        pallet_name_form = response.context.get('pallet_name_form')
        self.assertIsInstance(pallet_name_form, PalletNameForm)
    def test_post_bad_form_name(self):

        user = create_user('cindy', 'state')

        client = Client()
        client.force_login(user)

        form_name = 'cindy'
        response = client.post(self.url, {
            'form_name': form_name,
        })
        self.assertContains(
            response,
            escape(f"Unexpected form name {repr(form_name)}"),
            status_code=500,
            html=True,
        )
    def test_post_pallet_select_name_form(self):

        user = create_user('alice', 'shrock')

        client = Client()
        client.force_login(user)

        # -------------------
        # No pallet selected
        # -------------------
        response = client.post(
            self.url, {
                'form_name': BuildPalletView.PALLET_SELECT_FORM_NAME,
            })
        self.assertEqual(
            400,
            response.status_code,
            response.content.decode(),
        )
        self.assertIsInstance(
            response.context.get('pallet_select_form'),
            PalletSelectForm,
        )

        pallet = Pallet.objects.create()

        response = client.post(
            self.url, {
                'form_name': BuildPalletView.PALLET_SELECT_FORM_NAME,
                'pallet': pallet.pk
            })
        self.assertEqual(200, response.status_code)

        build_pallet_form = response.context.get('form')
        box_forms = response.context.get('box_forms')
        pallet_form = response.context.get('pallet_form')

        self.assertIsInstance(build_pallet_form, BuildPalletForm)
        self.assertIsInstance(box_forms, BaseFormSet)
        self.assertIsInstance(pallet_form, HiddenPalletForm)

        pallet_form = response.context.get('pallet_form')
        self.assertIsInstance(pallet_form, HiddenPalletForm)
        self.assertEqual(pallet, pallet_form.initial.get('pallet'))
    def test_post_pallet_name_form(self):

        user = create_user('doug', 'state')

        client = Client()
        client.force_login(user)

        # -----------------------
        # No pallet name entered
        # -----------------------
        response = client.post(
            self.url, {
                'form_name': BuildPalletView.PALLET_NAME_FORM_NAME,
            })
        self.assertEqual(400, response.status_code)
        self.assertIsInstance(
            response.context.get('pallet_name_form'),
            PalletNameForm,
        )

        pallet_name = "nuevo palet"
        response = client.post(
            self.url, {
                'form_name': BuildPalletView.PALLET_NAME_FORM_NAME,
                'name': pallet_name,
            })
        self.assertEqual(200, response.status_code)

        build_pallet_form = response.context.get('form')
        box_forms = response.context.get('box_forms')
        pallet_form = response.context.get('pallet_form')

        self.assertIsInstance(build_pallet_form, BuildPalletForm)
        self.assertIsInstance(box_forms, BaseFormSet)
        self.assertIsInstance(pallet_form, HiddenPalletForm)

        pallet_form = response.context.get('pallet_form')
        self.assertIsInstance(pallet_form, HiddenPalletForm)
        self.assertEqual(
            Pallet.objects.get(name=pallet_name),
            pallet_form.initial.get('pallet'),
        )
Ejemplo n.º 6
0
    def test_post(self):

        user = create_user('john', 'doe')

        client = Client()
        url = reverse('fpiweb:login')

        response = client.post(
            url,
            {
                'username': user.username,
                'password': default_password,
            },
        )

        self.assertEqual(302, response.status_code)
        self.assertEqual(reverse('fpiweb:index'), response.url)

        response = client.post(
            url,
            {
                'username': user.username,
                'password': '******',
            },
        )

        # yeah, FormViews like this one return 200 status code if form
        # fails validation
        self.assertEqual(200, response.status_code)

        soup = BeautifulSoup(response.content, 'html.parser')
        error_list = soup.find('ul', class_='errorlist')
        self.assertIsNotNone(error_list)
        self.assertIn(
            "Invalid username and/or password",
            error_list.get_text(),
        )
    def test_post_process_box_forms(self):

        # Pick a specific Location
        location = Location.objects.get(
            loc_row__loc_row='01',
            loc_bin__loc_bin='02',
            loc_tier__loc_tier='A1',
        )

        number_of_boxes = 3
        boxes = self.build_boxes(number_of_boxes)

        product = Product.objects.first()
        exp_year = date.today().year + 3

        pallet = Pallet.objects.create(name='gray pallet',
                                       pallet_status=Pallet.FILL)

        # Using PalletBoxes to build form post data
        pallet_boxes = self.build_pallet_boxes(
            pallet,
            boxes,
            product,
            exp_year,
        )
        pallet_boxes[0].exp_month_start = 3
        pallet_boxes[0].exp_month_end = 6

        post_data = self.get_build_pallet_form_post_data(location)
        post_data.update(self.get_hidden_pallet_form_post_data(pallet))
        post_data.update(self.get_box_forms_post_data(pallet_boxes))

        user = create_user('alan', 'turing')

        client = Client()
        client.force_login(user)

        response = client.post(
            self.url,
            post_data,
        )

        self.assertEqual(200, response.status_code)

        for i, box in enumerate(boxes):
            box.refresh_from_db()

            self.assertEqual(product, box.product)
            self.assertEqual(location, box.location)
            self.assertEqual(exp_year, box.exp_year)

            if i == 0:
                self.assertEqual(3, box.exp_month_start)
                self.assertEqual(6, box.exp_month_end)

            self.assertEqual(
                1,
                Activity.objects.filter(box_number=box.box_number).count())

        self.assertFalse(Pallet.objects.filter(pk=pallet.pk).exists())
        self.assertFalse(
            PalletBox.objects.filter(
                box_number__in={b.box_number
                                for b in boxes}))