Exemple #1
0
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()
Exemple #3
0
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)
Exemple #11
0
def _load_db(db_path):
    logging.info('Loading DB from {0}'.format(db_path))
    DataBase.get_instance(db_path)