def test_get(self): ag_login_id = '0077c686-b0ad-11f8-e050-8a800c5d1877' self.mock_login_admin() email = db.get_login_info(ag_login_id)[0]['email'] response = self.get('/ag_edit_participant/', {'email': email}) self.assertEqual(response.code, 200) # check that all relevant user information is rendered on HTML side login = db.get_login_by_email(email) for key, value in login.items(): if not isinstance(key, unicode): key = key.decode('utf-8') if key == 'zip': key = u'zipcode' elif key == 'ag_login_id': continue if not isinstance(value, unicode): value = value.decode('utf-8') key = xhtml_escape(key.encode('utf-8')) value = xhtml_escape(value.encode('utf-8')) self.assertIn(('</td><td><input type="text" name="%s" id="%s" ' 'value="%s"></td></tr>') % (key, key, value), response.body) # check what happens if user with email does not exist. # TODO: we should create a better error message in the handler to be # displayed, see issue: #115 response = self.get('/ag_edit_participant/?email=notInDB') self.assertIn('AN ERROR HAS OCCURED!', response.body) self.assertEqual(response.code, 500) # TODO: similarly if no email, i.e. user, is given. Issue: #115 response = self.get('/ag_edit_participant/?email=') self.assertIn('AN ERROR HAS OCCURED!', response.body) self.assertEqual(response.code, 500)
def test_post_user(self): self.mock_login_admin() # search participant info search_term = '*****@*****.**' response = self.post('/ag_search/', {'search_term': search_term}) self.assertEqual(response.code, 200) for login in db.search_participant_info(search_term): for l in db.get_login_info(login): for field in l: if field == 'ag_login_id': self.assertNotIn(l[field], response.body) else: self.assertIn(l[field], response.body)
def post(self): term = self.get_argument('search_term') results = {} # search participant info logins = db.search_participant_info(term) results = set(logins) # search kit info and add to resluts logins = db.search_kits(term) results = results | set(logins) # search barcode and add to results logins = db.search_barcodes(term) results = results | set(logins) # search handout kits handouts = db.search_handout_kits(term) # now take the ag_login_ids and collect the information to display display_results = [] # list of dictionatries for login in results: login_display = {} login_display['login_info'] = db.get_login_info(login) login_display['humans'] = db.getHumanParticipants( login) login_display['animals'] = db.getAnimalParticipants( login) login_display['kit'] = db.get_kit_info_by_login(login) for kit in login_display['kit']: barcode_info = {} ag_barcodes = db.get_barcode_info_by_kit_id( kit['ag_kit_id']) barcode_info = {} for ag_barcode in ag_barcodes: barcode_info[ag_barcode['barcode']] = {} barcode_info[ag_barcode['barcode']]['ag_info'] = ag_barcode lab_barcode_info = db.get_barcode_details( ag_barcode['barcode']) plate = db.get_plate_for_barcode( ag_barcode['barcode']) barcode_info[ag_barcode['barcode']]['barcode_info'] = \ lab_barcode_info barcode_info[ag_barcode['barcode']]['plate'] = plate kit['barcode_info'] = barcode_info display_results.append(login_display) # now render the page self.render("ag_search.html", results=display_results, handouts=handouts, currentuser=self.current_user)
def test_post(self): self.mock_login_admin() name = u'TESTDUDE' address = u'123 fake test street' city = u'testcity' state = u'\xc3\x8ele-de-France' zipcode = u'1L2 2G3' country = 'United Kingdom' ag_login_id = '0023cc03-3332-eec6-e050-8a800c5d3c04' email = db.get_login_info(ag_login_id)[0]['email'] # check a regular update response = self.post('/ag_edit_participant/', {'email': email, 'name': name, 'address': address, 'city': city, 'state': state, 'zipcode': zipcode, 'country': country, 'ag_login_id': ag_login_id}) self.assertEqual(response.code, 200) self.assertIn('Participant was updated successfully', response.body) # pull it back out and verify response = self.get('/ag_edit_participant/', {'email': email}) self.assertEqual(response.code, 200) # check that all relevant user information is rendered on HTML side login = db.get_login_by_email(email) for key, value in login.items(): if key == 'zip': key = 'zipcode' elif key == 'ag_login_id': continue value = value.decode('utf-8') self.assertIn('</td><td><input type="text" name="%s" id="%s" ' 'value="%s"></td></tr>' % (key, key, xhtml_escape(value)), response.body.decode('utf-8')) # wrong ag_login_id response = self.post('/ag_edit_participant/', {'email': email, 'name': name, 'address': address, 'city': city, 'state': state, 'zipcode': zipcode, 'country': country, 'ag_login_id': 'wrongID'}) self.assertEqual(response.code, 200) self.assertIn('Error Updating Particpant Info', response.body) # check missing arguments response = self.post('/ag_edit_participant/', {'email': email, 'name': name, 'city': city, 'state': state, 'zipcode': zipcode, 'country': country, 'ag_login_id': ag_login_id}) self.assertEqual(response.code, 400) self.assertIn(('MissingArgumentError: HTTP 400: Bad Request ' '(Missing argument address)'), response.body)