def test_addcountry(self): # first login as admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) adminToken = data['data']['token'] # add new country headers = {'token': adminToken} data = { 'name': 'usa', 'phone_code': 1, 'phone_length': 10, 'iso_name': 'USA' } result = self.client_app.post("/api/addcountry", data=json.dumps(data),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(data['message'], None) self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) country = getCountry(name='usa') self.assertTrue(country, 'no country') self.assertEqual(country.name, 'usa', 'no country') self.assertEqual(country.phone_code, 1, 'no country') self.assertEqual(country.iso_name, 'USA', 'no country')
def test_addUser3(self): """ login with admin then add user withot the defulat values""" admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset resultAdmin = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(resultAdmin.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(resultAdmin.content_type, 'application/json') self.assertEqual(resultAdmin.status_code, 200) # add user # the user country country = getCountry(phoneCode=249) userData = {'name':'mustafa', 'phone':'0123456789', 'password':'******',\ 'status':'active', 'permission':'user', 'country_id':country.id} headers = {'token': data['data']['token']} result = self.client_app.post("/api/adduser", data=json.dumps(userData),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(data['message'], None) self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201)
def test_login2(self): """ test the login route with wrong password""" admin_phone = os.getenv('admin_phone') if not admin_phone: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': '******', 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertTrue(data['message'], 'wrong phone or password') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 202)
def test_registerUser3(self): ''' regster user - invalid phone number''' # the user country country = getCountry(phoneCode=249) data = { 'phone': '00929596047', 'password': '******', 'country_id': country.id, 'name': 'mustafa' } # post requset result = self.client_app.post("/api/registeruser", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'phone number not pass the validation') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 400)
def test_login(self): """ test the login route with admin""" admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_checkLogin(self): ''' tests the 'checklogin' route ''' # post request result = self.client_app.post("/api/checklogin", content_type='application/json') data = json.loads(result.data.decode()) self.assertNotEqual(data['status'], 'success') self.assertNotEqual(result.status_code, 200) # now login admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post request result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') token = data['data']['token'] headers = {'token': token} # check login again result = self.client_app.post("/api/checklogin", headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) # new user token token = data['data'].get('token') self.assertTrue(token, 'no new token returned')
def test_getfeedback(self): ''' tests the getfeedback Route''' # first add feedback text = "this app is very awesome, thank you for your hard work" data = {"feedback": text} result = self.client_app.post("/api/addfeedback", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # now get it # first login with admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) # get the token token = data['data']['token'] headers = {'token': token} result = self.client_app.post("/api/getfeedback", data=json.dumps({}), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(len(data['data']['feedback']), 1) self.assertEqual(result.status_code, 200)
def test_update2(self): # update the user data - update the password # first log-in with admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # update the admin data token = data['data']['token'] headers = {"token": token} data = {"password": admin_password, "newpassword": "******"} # put requset result = self.client_app.put("/api/modifyuser", data=json.dumps(data), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # check the new name in the database user = Users.query.filter_by(phone=admin_phone).first() self.assertTrue(user, "update admin name failed") self.assertEqual(user.phone, admin_phone, "admin phone don't match")
def test_forgotPassword(self): ''' tests the forgotPassword route''' # the user country country = getCountry(phoneCode=20) admin_phone = os.getenv('admin_phone') data = {'phone': admin_phone, 'country_id': country.id} # post requset result = self.client_app.post("/api/forgotpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # test with not found user country = getCountry(phoneCode=249) data = {'phone': '929596047', 'country_id': country.id} # post requset result = self.client_app.post("/api/forgotpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'no user with this phone') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 202)
def test_addfeedback2(self): ''' add feedbak with logined user''' # login with admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) # get the token token = data['data']['token'] headers = {'token': token} text = "this app is very awesome, thank you for your hard work" data = {"feedback": text} result = self.client_app.post("/api/addfeedback", data=json.dumps(data), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # check the feedback in the database feedback = Feedback.query.all() self.assertTrue(feedback, 'no feedback added') self.assertEqual(len(feedback), 1, "wrong length of feedback numbers") # check admin id self.assertTrue(feedback[0].user_public_id, "no user id added")
def test_registerUser2(self): ''' regster user withot name''' # the user country country = getCountry(phoneCode=249) data = { 'phone': '+249929596047', 'password': '******', 'country_id': country.id } # post requset result = self.client_app.post("/api/registeruser", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201)
def test_deletefeedback(self): ''' tests the deletefeedback route''' # add first text = "this app is very awesome, thank you for your hard work" data = {"feedback": text} result = self.client_app.post("/api/addfeedback", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # check the feedback in the database feedback = Feedback.query.all() self.assertTrue(feedback, 'no feedback added') self.assertEqual(len(feedback), 1, "wrong length of feedback numbers") # login as admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) # get the token token = data['data']['token'] headers = {'token': token} # get the feedback id result = self.client_app.post("/api/getfeedback", data=json.dumps({}), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) feedbackId = data['data']['feedback'][0]['id'] # delete the feedback data = {'feedbackid': feedbackId} result = self.client_app.delete("/api/deletefeedback", data=json.dumps(data), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) # now check if its deleted result = self.client_app.post("/api/getfeedback", data=json.dumps({}), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(len(data['data']['feedback']), 0) self.assertEqual(result.status_code, 200)
def test_updateoperationStatus(self): ''' tests the update operation status route''' # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] from app.models import Age age = Age.query.first() # add new operation headers = {'token': token} data = { 'date': '2020-11-15', 'type_id': 2, 'country_id': 1, 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) result = self.client_app.get("/api/getoperation", data=data, content_type="multipart/form-data") data = json.loads(result.data.decode()) operation = data['data']['operations'][0] # now update status to closed data = {'status': 'closed', 'operationid': operation['id']} result = self.client_app.put("/api/updateoperationstatus", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_addoperation(self): """ add new operation""" # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] # add new operation headers = {'token': token} file_path = os.path.join(current_app.config['UPLOAD_FOLDER'], os.getenv('IMEGE_TEST_NAME')) # send 3 photos photos = [] for _ in range(3): photos.append((open(file_path, 'rb'), os.getenv('IMEGE_TEST_NAME'))) from app.models import Age age = Age.query.first() data = { 'photos': photos, 'date': '2020-11-15', 'type_id': 2, 'country_id': 1, 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") # close the files for file in photos: file[0].close() data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # the person get added person = getPerson() self.assertTrue(person[0]) photos = getPohto(object=person[0]) self.assertTrue(photos) self.assertEqual(len(photos), 3) # delete person to get rid of the photos deletePerson(id=person[0].id) # no photos after delete self.assertEqual(len(getPohto()), 0, 'photos not deleted') # get new token with auto generate and then try add new operation # headers = {'token': token} # check login again - generate token result = self.client_app.post("/api/checklogin", headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) # new user token newtoken = data['data'].get('token') self.assertTrue(token, 'no new token returned') headers = {'token': newtoken} # now add new operation # data = { 'date': '2020-11-15', 'type_id': 2, 'country_id': 1, 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201)
def test_resetPassword(self): ''' test the 'resetPassword' route ''' # first requset a code with the admon phone # the user country country = getCountry(phoneCode=20) admin_phone = os.getenv('admin_phone') data = {'phone': admin_phone, 'country_id': country.id} # post requset result = self.client_app.post("/api/forgotpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the code from the database code = UserVerificationNumber.query.first() # now check with the resetPassword route (withot the new password) data = { 'phone': admin_phone, 'country_id': country.id, 'code': code.code } # post requset result = self.client_app.post("/api/resetpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # now check with the resetPassword route (with the new password) data = { 'phone': admin_phone, 'country_id': country.id, 'code': code.code, 'password': '******' } # post requset result = self.client_app.post("/api/resetpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # now check agin - must failed becouse the code get deleted data = { 'phone': admin_phone, 'country_id': country.id, 'code': code.code, 'password': '******' } # post requset result = self.client_app.post("/api/resetpassword", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'Invalid code.') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 202)
def test_addoperation2(self): """ add operations then get it """ # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] from app.models import Age age = Age.query.first() # add new operation headers = {'token': token} data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # add new operation2 headers = {'token': token} data = { 'date': '2020-10-25', 'type_id': 2, 'country_id': '2', 'object_type': 'Car', "brand": 'brand', "model": 'model', "plate_number_letters": "klj", "plate_number_numbers": "123", "car_type": "1" } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # get the operation data = {} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 2) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the operation wuth country id filter data = {'country_id': 1} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 1) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the operation with object=Peron filter data = {'object': "Person"} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 1) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the operation with object=Car filter data = {'object': "Car"} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 1) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the operation with wrong object filter data = {'object': "wrong"} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 0) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # get the operation with not exist data data = {'id': "4"} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 0) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_addoperation3(self): ''' add operation with full data then get it ''' # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] # add new operation headers = {'token': token} lat = 48.856613 lng = 2.352222 from app.models import Age age = Age.query.first() data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Person', 'person_name': 'mustafa', 'age_id': age.id, 'details': 'this long paragraph of details', 'gender': 'male', 'skin': 2, 'shelter': True, 'lat': lat, 'lng': lng } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # get the operation data = {} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data['data']['operations']) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(data['data']['operations'][0]['details'], 'this long paragraph of details', 'no details') self.assertEqual(data['data']['operations'][0]['lat'], lat, 'no lat') self.assertEqual(data['data']['operations'][0]['lng'], lng, 'no lng') self.assertEqual(data['data']['operations'][0]['object']['skin'], 2, 'no skin') self.assertEqual(data['data']['operations'][0]['object']['shelter'], True, 'no shelter') self.assertEqual(data['data']['operations'][0]['object']['age_id'], age.id, 'not same age') self.assertEqual(data['data']['operations'][0]['user']['name'], 'admin', 'no user') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # try add with shelter is False or witout shelter # data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Person', 'person_name': 'mustafa', 'age_id': age.id, 'details': 'this long paragraph of details', 'gender': 'male', 'skin': 2, 'shelter': False, 'lat': lat, 'lng': lng } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Person', 'person_name': 'mustafa', 'age_id': age.id, 'details': 'this long paragraph of details', 'gender': 'male', 'skin': 2, 'lat': lat, 'lng': lng } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201)
def test_addoperation4(self): ''' add new user then add operation with it''' admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset resultAdmin = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(resultAdmin.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(resultAdmin.status_code, 200) # add user # the user country country = getCountry(phoneCode=249) userData = {'name':'mustafa', 'phone':'0123456789', 'password':'******',\ 'status':'active', 'permission':'user', 'country_id':country.id} headers = {'token': data['data']['token']} result = self.client_app.post("/api/adduser", data=json.dumps(userData),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # login with the new user data = { 'phone': '0123456789', 'password': '******', 'country_id': country.id } resultAdmin = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(resultAdmin.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(resultAdmin.status_code, 200) token = data['data']['token'] from app.models import Age age = Age.query.first() # try add operation with this user headers = {'token': token} data = { 'date': '2020-11-15', 'type_id': 2, 'country_id': 1, 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201)
def test_addcountry2(self): """ try add country without valid data""" # first login as admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) adminToken = data['data']['token'] # add new country headers = {'token': adminToken} data = {} result = self.client_app.post("/api/addcountry", data=json.dumps(data),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'required data not submitted') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 400) data = {'name': 'usa', 'phone_length': 10} result = self.client_app.post("/api/addcountry", data=json.dumps(data),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'required data not submitted') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 400) # already exists data = { 'name': 'sudan', 'phone_code': 249, 'phone_length': 9, 'iso_name': 'SD' } result = self.client_app.post("/api/addcountry", data=json.dumps(data),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'failure') self.assertEqual(data['message'], 'Country already exists.') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 202)
def test_addoperation6(self): ''' add operation with full data then get it - with 'car' object''' # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] # add new operation headers = {'token': token} lat = 48.856613 lng = 2.352222 data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Car', 'model': 'toyota', 'car_type': '1', 'brand': 'brand', 'plate_number_letters': 'fds', 'plate_number_numbers': '321', 'details': 'this long paragraph of details', 'lat': lat, 'lng': lng, 'city': 'giza', 'state': 'cairo' } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 201) # get the operation data = {} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data['data']['operations']) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(data['data']['operations'][0]['details'], 'this long paragraph of details', 'no details') self.assertEqual(data['data']['operations'][0]['lat'], lat, 'no lat') self.assertEqual(data['data']['operations'][0]['lng'], lng, 'no lng') self.assertEqual(data['data']['operations'][0]['city'], 'giza', 'not the same city') self.assertEqual(data['data']['operations'][0]['state'], 'cairo', 'not the same stete') self.assertEqual(data['data']['operations'][0]['object']['model'], 'toyota', 'no car model') self.assertEqual(data['data']['operations'][0]['object']['brand'], 'brand', 'not same brand') self.assertEqual(data['data']['operations'][0]['user']['name'], 'admin', 'no user') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_addoperation8(self): ''' add new operation with 'PersonalBelongings' object''' # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] headers = {'token': token} # now add the operation # data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'PersonalBelongings', 'personal_belongings_type': '1', 'personal_belongings_subtype': '2' } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # try get the data # data = {'object': 'PersonalBelongings'} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data['data']['operations']) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual( data['data']['operations'][0]['object'] ['personal_belongings_type'], 1) self.assertEqual( data['data']['operations'][0]['object'] ['personal_belongings_subtype'], 2) self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_deletefeedback2(self): ''' delete feedback with user id''' # login with admin admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) # get the token token = data['data']['token'] headers = {'token': token} text = "this app is very awesome, thank you for your hard work" data = {"feedback": text} # add three feddbacks with admin result = self.client_app.post("/api/addfeedback", data=json.dumps(data), headers=headers, content_type='application/json') result = self.client_app.post("/api/addfeedback", data=json.dumps(data), headers=headers, content_type='application/json') result = self.client_app.post("/api/addfeedback", data=json.dumps(data), headers=headers, content_type='application/json') # make sure the feedback get added feedback = Feedback.query.all() self.assertEqual(len(feedback), 3, 'not rigth numbers of feedback') # get the admin public id admin = getUser(phone=admin_phone) # delete with admin id data = {'userid': admin.public_id} result = self.client_app.delete("/api/deletefeedback", data=json.dumps(data), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) # now check if its deleted result = self.client_app.post("/api/getfeedback", data=json.dumps({}), headers=headers, content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(len(data['data']['feedback']), 0) self.assertEqual(result.status_code, 200)
def test_addoperation7(self): ''' add new operation with Accident object''' # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] headers = {'token': token} from app.models import Age age = Age.query.first() # now add the operation # the cars and the persons must be a json string cars = [{ 'model': 'toyota', 'car_type': '1', 'brand': 'brand', 'plate_number_letters': 'fds', 'plate_number_numbers': '321' }, { 'model': 'toyota', 'car_type': '1', 'brand': 'brand', 'plate_number_letters': 'fdrs', 'plate_number_numbers': '3241' }] persons = [{ 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id }, { 'person_name': 'mustafa2', 'gender': 'male', 'age_id': age.id }] data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Accident', 'cars': json.dumps(cars), 'persons': json.dumps(persons), } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # try get the data # data = {'object': 'Accident'} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data['data']['operations']) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(len(data['data']['operations'][0]['object']['cars']), 2) self.assertEqual( len(data['data']['operations'][0]['object']['persons']), 2) self.assertEqual( data['data']['operations'][0]['object']['cars'][0]['model'], 'toyota', 'no car model') self.assertEqual( data['data']['operations'][0]['object']['cars'][0] ['plate_number_numbers'], '321') self.assertEqual( data['data']['operations'][0]['object']['cars'][1]['brand'], 'brand', 'not same brand') self.assertEqual( data['data']['operations'][0]['object']['cars'][1] ['plate_number_numbers'], '3241') self.assertEqual( data['data']['operations'][0]['object']['persons'][0]['name'], 'mustafa') self.assertEqual( data['data']['operations'][0]['object']['persons'][1]['name'], 'mustafa2') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)
def test_addUser2(self): """ login with admin then add user , then try add user with normal user""" admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') if not admin_phone or not admin_password: raise ValueError('Environment variables not found!') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } # post requset resultAdmin = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(resultAdmin.data.decode()) self.assertEqual(data['status'], 'success') self.assertTrue(data['data']['token'], 'no token returned') self.assertEqual(resultAdmin.content_type, 'application/json') self.assertEqual(resultAdmin.status_code, 200) # add user # the user country country = getCountry(phoneCode=249) userData = {'name':'mustafa', 'phone':'0123456789', 'password':'******',\ 'status':'active', 'permission':'user', 'country_id':country.id} headers = {'token': data['data']['token']} result = self.client_app.post("/api/adduser", data=json.dumps(userData),\ headers=headers,content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(data['message'], None) self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # try add user with the new user # login normalUserData = { 'phone': '0123456789', 'password': '******', 'country_id': country.id } noremalUserResult = self.client_app.post( "/api/login", data=json.dumps(normalUserData), content_type='application/json') normalUser = json.loads(noremalUserResult.data.decode()) normalUserToken = normalUser['data']['token'] self.assertEqual(normalUser['status'], 'success') self.assertTrue(normalUserToken, 'no token returned') self.assertEqual(noremalUserResult.content_type, 'application/json') self.assertEqual(noremalUserResult.status_code, 200) # add user testUserData = {'name':'test', 'phone':'0123456789', 'password':'******',\ 'status':'active', 'permission':'user'} headers = {'token': normalUserToken} result = self.client_app.post("/api/adduser", data=json.dumps(testUserData),\ headers=headers,content_type='application/json') testData = json.loads(result.data.decode()) self.assertEqual(testData['status'], 'failure') self.assertEqual(testData['message'], "You don't have the permission.") self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 401)
def test_addcomment(self): ''' test add comments on operation ''' # first add the operation # # first log-in admin_phone = os.getenv('admin_phone') admin_password = os.getenv('admin_pass') # the user country country = getCountry(phoneCode=20) data = { 'phone': admin_phone, 'password': admin_password, 'country_id': country.id } result = self.client_app.post("/api/login", data=json.dumps(data), content_type='application/json') data = json.loads(result.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(result.status_code, 200) token = data['data']['token'] from app.models import Age age = Age.query.first() # add new operation headers = {'token': token} data = { 'date': '2020-11-15', 'type_id': 1, 'country_id': '1', 'object_type': 'Person', 'person_name': 'mustafa', 'gender': 'male', 'age_id': age.id } result = self.client_app.post("/api/addoperation", data=data, headers=headers,\ content_type="multipart/form-data") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # get the operation data # data = {} result = self.client_app.get('/api/getoperation', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['operations']), 1) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200) # the operation id operationId = data['data']['operations'][0]['id'] # now add the comment # data = {'operationid': operationId, 'text': 'this is the message body'} result = self.client_app.post("/api/sendcomment", data=json.dumps(data), headers=headers,\ content_type="application/json") data = json.loads(result.data.decode()) self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 201) # now get the comments # data = {'operationid': operationId} result = self.client_app.get('/api/getcomment', query_string=data, content_type='application/json') data = json.loads(result.data.decode()) self.assertTrue(data, 'no operations') self.assertEqual(len(data['data']['comments']), 1) self.assertEqual(data['data']['comments'][0]['text'], 'this is the message body') self.assertEqual(data['message'], None) self.assertEqual(data['status'], 'success') self.assertEqual(result.content_type, 'application/json') self.assertEqual(result.status_code, 200)