def add_user(request): try: user_data = json.loads(request.body.read()) except Exception as e: logging.exception( 'Error loading json data from request:\n{0}'.format(e)) return HTTPResponse( status=HttpStatus.BAD_REQUEST, body='Request content type shall be an application/json') try: user = User(user_data) except (UserInsufficientData, UserInvalidDataType) as e: logging.exception('Invalid user data:\n{0}'.format(e)) return HTTPResponse(status=HttpStatus.BAD_REQUEST, body=str(e)) try: db = DataBase.get_instance() db.insert_user(user) except (DataBaseInstanceError, DuplicateUserError, DataBaseInsertionError) as e: logging.exception('Error storing user data:\n{0}'.format(e)) return HTTPResponse(status=HttpStatus.INTERNAL_ERROR, body=str(e)) logging.info('User was correctly created') return HTTPResponse(status=HttpStatus.CREATED)
def test_db_get_all_users_raises_db_read_error_when_read_all_users_fails( self, tiny_db_mock): db = DataBase.get_instance(ANY) db._db = Mock() db._db.all.side_effect = Exception('Test DB get all exception') with pytest.raises(DataBaseReadError): db.get_all_users() db._db.all.assert_called_once_with()
def get_all_users(): try: db = DataBase.get_instance() users = db.get_all_users() except (DataBaseInstanceError, DataBaseReadError) as e: logging.exception('Error getting all stored users:\n'.format(e)) return HTTPResponse(status=HttpStatus.INTERNAL_ERROR, body=str(e)) return HTTPResponse(status=HttpStatus.OK, body=json.dumps(users), content_type='application/json')
def test_db_insert_user_stores_a_user_when_its_username_does_not_exist( self, tiny_db_mock): db = DataBase.get_instance(ANY) db._db = Mock() db._db.search.return_value = [] user = Mock() db.insert_user(user) db._db.search.assert_called_once() db._db.insert.assert_called_once_with(user.data)
def test_db_get_all_users_returns_stored_users_when_get_all_users_works_ok( self, tiny_db_mock, stored_users): db = DataBase.get_instance(ANY) db._db = Mock() db._db.all.return_value = stored_users current_stored_users = db.get_all_users() db._db.all.assert_called_once_with() assert_that(current_stored_users).is_length(len(stored_users)) for stored_user in stored_users: assert_that(current_stored_users).contains(stored_user)
def test_db_insert_user_does_not_store_a_user_when_its_username_does_exist( self, tiny_db_mock): db = DataBase.get_instance(ANY) db._db = Mock() user = Mock() db._db.search.return_value = [user.data] with pytest.raises(DuplicateUserError): db.insert_user(user) db._db.search.assert_called_once() db._db.insert.assert_not_called()
def test_db_insert_user_does_not_store_a_user_when_the_insertion_fails( self, tiny_db_mock): db = DataBase.get_instance(ANY) db._db = Mock() db._db.search.return_value = [] db._db.insert.side_effect = Exception('Test DB insertion exception') user = Mock() with pytest.raises(DataBaseInsertionError): db.insert_user(user) db._db.search.assert_called_once() db._db.insert.assert_called_once_with(user.data)
def test_db_instantiation_twice_raises_an_instance_error( self, tiny_db_mock): DataBase.get_instance() with pytest.raises(DataBaseInstanceError): DataBase(db_path=ANY)
def test_db_instance_loads_a_db_from_provided_path(self, tiny_db_mock): db_path = '/test/path/some_db.json' DataBase.get_instance(db_path) tiny_db_mock.assert_called_once_with(db_path)
def test_db_instantiation_raises_db_instance_error_when_db_load_fails( self, tiny_db_mock): tiny_db_mock.side_effect = Exception('Tiny DB test Exception') with pytest.raises(DataBaseInstanceError): DataBase.get_instance(ANY)
def _load_db(db_path): logging.info('Loading DB from {0}'.format(db_path)) DataBase.get_instance(db_path)