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'), )
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}))