async def test_register_user_should_create_user(create_user, auth):
    mock_request = create_mock_request(
        data=dict(email=CREATE_USER_REQUEST.email,
                  username=CREATE_USER_REQUEST.username,
                  password=CREATE_USER_REQUEST.password))
    mock_request.app.get.side_effect = [create_user, auth]
    users_api = UsersAPI()
    await users_api.register_user(mock_request)
    create_user.execute.assert_called_with(CREATE_USER_REQUEST)
async def test_login_should_return_400_if_user_does_not_exist(users, auth):
    message = "Invalid login credentials"
    users.find_by_credentials.return_value = None
    mock_request = create_mock_request(
        data=dict(email=USER.email, password=USER.password))
    mock_request.app.get.side_effect = [users, auth]
    users_api = UsersAPI()
    response = await users_api.login(mock_request)
    users.find_by_credentials.assert_called_with(USER.email, USER.password)
    assert response.status == 400
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(errors=[message])
async def test_login_should_return_user_id_and_generated_token_if_credentials_match(
        users, auth):
    users.find_by_credentials.return_value = USER
    mock_request = create_mock_request(
        data=dict(email=USER.email, password=USER.password))
    mock_request.app.get.side_effect = [users, auth]
    users_api = UsersAPI()
    response = await users_api.login(mock_request)
    users.find_by_credentials.assert_called_with(USER.email, USER.password)
    auth.generate_token.assert_called_with(USER_ID)
    assert response.status == 200
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(userId=USER_ID, token=TOKEN)
async def test_register_user_should_return_400_if_request_data_is_invalid(
        create_user, auth):
    mock_request = create_mock_request(
        data=dict(email=CREATE_USER_REQUEST.email,
                  username=CREATE_USER_REQUEST.username,
                  password=CREATE_USER_REQUEST.password))
    mock_request.app.get.side_effect = [create_user, auth]
    message = "Some Error"
    users_api = UsersAPI()
    create_user.execute.side_effect = ValueError(message)
    response = await users_api.register_user(mock_request)
    assert response.status == 400
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(errors=[message])
async def test_register_user_should_return_user_id_and_generated_token(
        create_user, auth):
    mock_request = create_mock_request(
        data=dict(email=CREATE_USER_REQUEST.email,
                  username=CREATE_USER_REQUEST.username,
                  password=CREATE_USER_REQUEST.password))
    mock_request.app.get.side_effect = [create_user, auth]
    users_api = UsersAPI()
    response = await users_api.register_user(mock_request)
    create_user.execute.assert_called_with(CREATE_USER_REQUEST)
    auth.generate_token.assert_called_with(USER_ID)
    assert response.status == 201
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(userId=USER_ID, token=TOKEN)
Exemple #6
0
async def test_creates_path(create_path, users):
    mock_request = create_mock_request(CREATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = USER_ID
    mock_request.app.get.side_effect = [create_path]
    create_path.execute.return_value = CreatePathResponse(path_id=PATH_ID)
    paths_api = PathsAPI()

    response = await paths_api.create_path(mock_request)

    mock_request.get.assert_called_with("user_id")
    create_path.execute.assert_called_with(CREATE_PATH_REQUEST)
    assert response.status == 201
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(pathId=PATH_ID)
Exemple #7
0
async def test_update_path_returns_404_if_path_does_not_exist(update_path):
    update_path.execute.side_effect = PathNotFound
    mock_request = create_mock_request(UPDATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = USER_ID
    mock_request.app.get.side_effect = [update_path]
    paths_api = PathsAPI()

    response = await paths_api.update_path(mock_request)

    mock_request.app.get.assert_called_with("update_path")
    assert response.status == 404
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assert result.get("message") == "Learning path not found"
Exemple #8
0
async def test_update_path_returns_403_if_user_id_does_not_match_author(update_path):
    update_path.execute.return_value = UPDATE_PATH_RESPONSE
    mock_request = create_mock_request(UPDATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = "DifferentUser"
    mock_request.app.get.side_effect = [update_path]
    paths_api = PathsAPI()

    response = await paths_api.update_path(mock_request)

    mock_request.app.get.assert_called_with("update_path")
    assert response.status == 403
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assert result.get("message") == "Update Request Forbidden"
Exemple #9
0
async def test_get_path_returns_404_if_path_not_found(paths):
    paths.find_by_id.return_value = None
    mock_request = create_mock_request()
    mock_request.app.get.side_effect = [paths]
    mock_request.match_info.get.return_value = PATH_ID
    paths_api = PathsAPI()

    response = await paths_api.get_path(mock_request)

    paths.find_by_id.assert_called_with(PATH_ID)
    assert response.status == 404
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assert result.get("message") == "Learning path not found"
Exemple #10
0
async def test_create_path_raises_400_if_request_data_is_invalid(create_path, users):
    message = "Some Error"
    create_path.execute.side_effect = ValueError((message,))
    mock_request = create_mock_request(CREATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = USER_ID
    mock_request.app.get.side_effect = [create_path]
    create_path.execute.return_value = CreatePathResponse(path_id=PATH_ID)
    paths_api = PathsAPI()

    response = await paths_api.create_path(mock_request)

    assert response.status == 400
    assert response.content_type == "application/json"
    assert json.loads(response.text) == dict(errors=[message])
Exemple #11
0
async def test_update_path_returns_400_if_validation_error_is_raised(update_path):
    error_message = "Some Error"
    update_path.execute.side_effect = ValueError([error_message])
    mock_request = create_mock_request(UPDATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = USER_ID
    mock_request.app.get.side_effect = [update_path]
    paths_api = PathsAPI()

    response = await paths_api.update_path(mock_request)

    mock_request.app.get.assert_called_with("update_path")
    assert response.status == 400
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assert error_message in result.get("errors")
Exemple #12
0
async def test_updates_existing_path(update_path):
    update_path.execute.return_value = UPDATE_PATH_RESPONSE
    mock_request = create_mock_request(UPDATE_PATH_REQUEST_DATA)
    mock_request.get.return_value = USER_ID
    mock_request.app.get.side_effect = [update_path]
    paths_api = PathsAPI()

    response = await paths_api.update_path(mock_request)

    mock_request.app.get.assert_called_with("update_path")
    update_path.execute.assert_called_with(UPDATE_PATH_REQUEST)
    assert response.status == 200
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assert result.get("id") == UPDATE_PATH.id
    assert result.get("title") == UPDATE_PATH.title
    assert result.get("created_on") == UPDATE_PATH.created_on.timestamp()
    assert result.get("updated_on") == UPDATE_PATH.updated_on.timestamp()
    assert result.get("categories") == UPDATE_PATH.categories
Exemple #13
0
async def test_get_path_returns_path_with_id(paths):
    paths.find_by_id.return_value = PATH
    mock_request = create_mock_request()
    mock_request.app.get.side_effect = [paths]
    mock_request.match_info.get.return_value = PATH_ID
    paths_api = PathsAPI()

    response = await paths_api.get_path(mock_request)

    paths.find_by_id.assert_called_with(PATH_ID)
    assert response.status == 200
    assert response.content_type == "application/json"
    result = json.loads(response.text)
    assignment = PATH.assignments[0]
    assert result.get("id") == PATH.id
    assert result.get("title") == PATH.title
    assert result.get("created_on") == PATH.created_on.timestamp()
    assert result.get("updated_on") == PATH.updated_on.timestamp()
    assert result.get("categories") == PATH.categories
    assert result.get("assignments") == [
        dict(id=assignment.id, name=assignment.name,
             resource=assignment.resource, instructions=assignment.instructions)]
def create_participation_http_request(usecase):
    request = create_mock_request(dict(pathId=PATH_ID))
    request.get.return_value = USER_ID
    request.app.get.side_effect = [usecase]
    return request