def get_user(user_id): if request.method == "GET": # get user user = UserService.get_user(user_id) return make_response(jsonify(user.serialize), 200) # update user if request.method == 'PUT': req = request.get_json() user = UserService.change_my_name(req, user_id) return user.serialize # delete user if request.method == 'DELETE': req = request.get_json() user = UserService.delete_user(req['userId']) return make_response(f'DELETED USER: {user}:', 200)
def update_user_and_refesh_token(db_session, email): user_service = UserService(db_session) user = user_service.get_user(email) user_service.update_user(user, request.json) user_service.set_token(user, AuthenticationService.generate_token()) return user
class APICreateUser(unittest.TestCase): def setUp(self): os.environ['ONE_AUTH_ENV'] = 'test' APP.config['TESTING'] = True self.app = APP.test_client() self.db_connection = get_db_session(APP.db_engine) self.user_service = UserService(self.db_connection) self.validation_code_service = ValidationCodeService( self.db_connection) self.create_user("*****@*****.**") def tearDown(self): self.delete_user('*****@*****.**') self.delete_user('*****@*****.**') def create_user(self, email): return self.app.post('/one_auth/api/user', data='{"email": "' + email + '"}', content_type='application/json') def test_should_log_out(self): some_email = '*****@*****.**' # self.user_service.delete_user(some_email) self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') self.user_service = UserService(self.db_connection) # update_data = '{"email": "*****@*****.**", "validation_code": "%s", "password": "******"}' % \ 111111 self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') response = self.app.get('/one_auth/api/access_tokens', content_type='application/json', headers={ 'Authorization': 'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ==' }) result_data = json.loads(response.data.decode('utf8')) self.assertEqual(200, response.status_code) self.assertIsNotNone(result_data['access_token']) access_token = some_email + ':' + result_data['access_token'] auth = base64.b64encode(access_token.encode('utf-8')).decode('utf-8') basic_auth = 'Basic {}'.format(auth) response = self.app.delete('/one_auth/api/access_tokens', headers={'Authorization': basic_auth}) self.assertEquals(200, response.status_code) user = self.user_service.get_user(some_email) self.assertIsNone(user.access_token) response = self.app.get('/one_auth/api/validations', headers={'Authorization': basic_auth}) self.assertEquals(401, response.status_code) response = self.app.get('/one_auth/api/access_tokens', content_type='application/json', headers={ 'Authorization': 'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ==' }) self.assertEquals(200, response.status_code) def delete_user(self, email): UserService(get_db_session(APP.db_engine)).delete_user(email)
def device_repo_test(): user_service = UserService() print "\n\n\n=======DEVICE REPO TEST=======" print "\ncreating a test user" user, msg = user_service.add_user("muhaftab", "1234", "Muhammad", "Aftab", "*****@*****.**") print msg print "adding a new device for user: %s" % user.username device1 = device_repo.add_device(user.username, "TableLamp") print "returned device is ", device1 device2 = device_repo.add_device(user.username, "Kettle") print "returned device is ", device2 print "\nfetching the new device from db" device = device_repo.find_device(user.username, device1.device_id)[0] print device print "\nfetching the user to see if device is added for user" user = user_service.get_user(user.username) print [d.serialize() for d in user.devices] print "\nadding some consumption data for the device" c1 = DeviceConsumption(10.0, 0.12, False, datetime.datetime.now()) c2 = DeviceConsumption(11.0, 2.12, True, datetime.datetime.now()) device_repo.add_device_consumption(device, c1) device_repo.add_device_consumption(device, c2) print "\ntesting if consumption data is added to device" print [c.serialize() for c in device.consumption] print "\nModifying device" new_device = Device("CoffeeMaker") updated_device = device_repo.update_device(user.username, device.device_id, new_device) print updated_device print "\ntesting if consumption data exists for updated device" print [c.serialize() for c in updated_device.consumption] print "\nadding device model to the device" json_params = {"p_peak": 80.8, "p_stable": 50.0, "lambda": 0.31} m1 = DeviceModel("ExponentialDecay", json_params) device_repo.add_device_model(updated_device, m1) print updated_device.serialize() print "\nfetching the user again to see if updated device is shown" user = user_service.get_user(user.username) print user.serialize() print "\nfetching list of devices for the user" print [device.serialize() for device in user_service.get_devices(user.username)] print "\ndeleting device" status = device_repo.delete_device(user.username, device.device_id) print status print "\nfetching the user agian to see if device is indeed deleted" user = user_service.get_user(user.username) print [d for d in user.devices] print "\nfinally deleting user" status = user_service.delete_user(user.username) print status
class OneAuthTests(unittest.TestCase): def setUp(self): os.environ['ONE_AUTH_ENV'] = 'test' APP.config['TESTING'] = True self.app = APP.test_client() self.mail = Mail(APP) self.db_connection = get_db_session(APP.db_engine) self.user_service = UserService(self.db_connection) self.validation_code_service = ValidationCodeService(self.db_connection) def test_should_return_415_while_not_passing_json(self): data = '{"email": "*****@*****.**"}' response = self.app.post('/one_auth/api/user', data=data, content_type='application/xml') self.assertEquals(415, response.status_code) def test_should_return_400_if_the_any_mandatory_field_is_not_exist_in_request_when_update_the_user_password(self): self.user_service.delete_user('*****@*****.**') with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'): self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') update_data = '{"email": "*****@*****.**", "validation_code": "123456"}' response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') self.assertEquals(400, response.status_code) update_data = '{"email": "*****@*****.**", "password": "******"}' response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') self.assertEquals(400, response.status_code) def test_update_user_password(self): self.user_service.delete_user('*****@*****.**') with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'): self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}' response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') self.db_connection.commit() created_user = self.user_service.get_user('*****@*****.**') response_json = json.loads(response.data.decode('utf8')) self.assertEquals(200, response.status_code) self.assertEquals('active', created_user.status) self.assertIsNotNone(response_json['access_token']) self.assertIsNotNone(created_user.password) def test_update_user_password_when_password_in_wrong_format(self): self.user_service.delete_user('*****@*****.**') with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'): self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}' response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') # self.assertEquals(400, response.status_code) def test_create_and_get_user(self): self.user_service.delete_user('*****@*****.**') user = self.user_service.create_user('*****@*****.**') assert '*****@*****.**' == user.email self.user_service.delete_user('*****@*****.**') def test_should_return_access_token_when_login_with_correct_email_and_password(self): some_email = '*****@*****.**' self.user_service.delete_user(some_email) with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda : '123456'): self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}' response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') response = self.app.get('/one_auth/api/access_tokens', content_type='application/json', headers={'Authorization': 'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ=='}) result_data = json.loads(response.data.decode('utf8')) self.assertEquals(200, response.status_code) self.assertIsNotNone(result_data['access_token']) self.user_service.delete_user(some_email) def test_should_return_401_when_login_with_incorrect_email_and_password(self): some_email = '*****@*****.**' self.user_service.delete_user(some_email) with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda : '123456'): self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json') update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}' self.app.put('/one_auth/api/user', data=update_data, content_type='application/json') response = self.app.get('/one_auth/api/access_tokens', content_type='application/json', headers={'Authorization': 'Basic OmFhYWE='}) self.assertEquals(401, response.status_code) self.user_service.delete_user(some_email) def test_should_return_200_when_access_token_validation_success(self): access_token = create_user_and_get_token('*****@*****.**') authorization = basic_auth('*****@*****.**', access_token) response = self.app.get('/one_auth/api/validations', headers={ 'Authorization': authorization }) self.assertEquals(200, response.status_code) result_data = json.loads(response.data.decode('utf8')) self.assertEquals('*****@*****.**', result_data['email']) self.assertEquals('', result_data['first_name']) self.assertEquals('', result_data['last_name']) self.assertEquals('', result_data['country']) self.assertEquals('', result_data['department']) self.assertEquals('', result_data['avatar']) @patch('one_auth.UserService') def test_should_return_401_when_access_token_validation_fail(self, mock_user_service): mock_user_service.encode_access_token_for = MagicMock(return_value='invalid_token') response = self.app.get('/one_auth/api/validations', headers={ 'Authorization': 'Basic eHh4QHRlc3QuY29tOnRlc3RfdG9rZW4=' }) self.assertEquals(401, response.status_code)