예제 #1
0
    def test_given_invalid_comment_id_then_raise_exception(self, storage_mock,
                                                           presenter_mock):
        comment_id = 1
        reply_user_id = 1
        reply_text = "Nice Comment"
        interactor = CommentInteractor(storage=storage_mock)
        from fb_post_clean_arch_v2.exceptions.custom_exceptions import \
            InvalidCommentId
        storage_mock.validate_comment_id.side_effect = InvalidCommentId
        from django_swagger_utils.drf_server.exceptions import NotFound
        from fb_post_clean_arch_v2.constants.exception_messages import \
            INVALID_COMMENT_ID
        presenter_mock.raise_exception_for_invalid_comment_id.side_effect = \
            NotFound(*INVALID_COMMENT_ID)
        exception_message = INVALID_COMMENT_ID[0]
        response_status_code = INVALID_COMMENT_ID[1]

        import pytest
        with pytest.raises(NotFound) as exception:
            interactor.create_reply_for_comment_wrapper(
                comment_id=comment_id,
                user_id=reply_user_id,
                reply_text=reply_text,
                presenter=presenter_mock)

        assert exception_message == exception.value.message
        assert response_status_code == exception.value.res_status
        storage_mock.validate_comment_id.assert_called_once_with(
            comment_id=comment_id)
        presenter_mock.raise_exception_for_invalid_comment_id. \
            assert_called_once()
    def test_get_states_for_task_with_invalid_project_id(self):

        #arrange
        from .raw_inputs import task_state_data
        from django_swagger_utils.drf_server.exceptions\
            import NotFound

        from project_management_portal.constants.exception_messages\
            import INVALID_PROJECT

        project_id = task_state_data['project_id']
        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = GetStatesForTaskInteractor(
            task_storage=task_storage, project_storage=project_storage)
        project_storage.validate_project_id.return_value = None
        project_presenter.raise_invalid_project_id_exception\
            .side_effect = NotFound(*INVALID_PROJECT)
        expected_error_msg = "Invalid project_id, try with valid project_id"

        #act
        with pytest.raises(NotFound) as error:
            interactor.get_states_for_task_based_on_current_state_wrapper(
                task_state_data,
                project_presenter=project_presenter,
                task_presenter=task_presenter)

        #assert
        assert str(error.value) == expected_error_msg
        project_storage.validate_project_id.assert_called_once_with(project_id)
        project_presenter.raise_invalid_project_id_exception\
            .assert_called_once()
예제 #3
0
    def test_update_task_state_invalid_project(self):

        #arrange
        from .raw_inputs import update_task_state_input_data
        from project_management_portal.constants.exception_messages\
            import INVALID_PROJECT

        project_id = update_task_state_input_data.get('project_id')
        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = TaskStateTransitionInteractor(
            task_storage=task_storage, project_storage=project_storage)

        project_storage.validate_project_id.return_value = False
        project_presenter.raise_invalid_project_id_exception\
            .side_effect = NotFound(*INVALID_PROJECT)
        expected_error_message\
            = "Invalid project_id, try with valid project_id"

        #act
        with pytest.raises(NotFound) as error:
            interactor.update_task_state_wrapper(update_task_state_input_data,
                                                 project_presenter,
                                                 task_presenter)

        #assert
        assert error.value.message == expected_error_message
        project_storage.validate_project_id.assert_called_once_with(
            project_id=project_id)
        project_presenter.raise_invalid_project_id_exception\
            .assert_called_once()
예제 #4
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    user = kwargs['user']
    request_data = kwargs['request_data']
    mandal_id = request_data['mandal_id']
    date = request_data['date']
    total_confirmed = request_data['total_confirmed']
    total_deaths = request_data['total_deaths']
    total_recovered = request_data['total_recovered']

    storage = MandalStorageImplementation()
    presenter = PresenterImplementation()

    interactor = UpdateStatistics(storage=storage, presenter=presenter)
    try:
        interactor.update_statistics(mandal_id=mandal_id,
                                     user=user,
                                     date=date,
                                     total_confirmed=total_confirmed,
                                     total_deaths=total_deaths,
                                     total_recovered=total_recovered)
    except InvalidMandalId:
        raise NotFound(*INVALID_MANDAL_ID)
    except InvalidDetailsForTotalConfirmed:
        raise BadRequest(*INVALID_TOTAL_CONFIRMED)
    except InvalidDetailsForTotalDeaths:
        raise BadRequest(*INVALID_TOTAL_DEATHS)
    except InvalidDetailsForTotalRecovered:
        raise BadRequest(*INVALID_TOTAL_RECOVERED)
    except StatNotFound:
        raise BadRequest(*DETAILS_NOT_FOUND)
    except UserNotAdmin:
        raise Forbidden(*USER_NOT_ADMIN)
    return HttpResponse(status=200)
    def test_create_task_with_invalid_project_id(self):

        #arrange
        user_id = 1
        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = CreateTaskInteractor(
            task_storage=task_storage,
            project_storage=project_storage
            )

        project_storage.validate_project_id.return_value = False
        project_presenter.raise_invalid_project_id_exception\
            .side_effect = NotFound(*INVALID_PROJECT)
        expected_error_msg = "Invalid project_id, try with valid project_id"

        #act
        with pytest.raises(NotFound) as error:
            interactor.create_task_wrapper(
            user_id=user_id,
            task_data=task_data,
            project_presenter=project_presenter,
            task_presenter=task_presenter
            )

        #assert
        assert str(error.value) == expected_error_msg
        project_storage.validate_project_id.assert_called_once_with(
            project_id=task_data.get('project_id'))
        project_presenter.raise_invalid_project_id_exception.assert_called_once()
예제 #6
0
    def test_get_states_transition_details_invalid_project_id(self):

        #arrange
        from .raw_inputs\
            import transition_details_query_dict

        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = GetStatesTransitionDetailsInteractor(
            task_storage=task_storage, project_storage=project_storage)

        project_storage.validate_project_id.return_value = None
        project_presenter.raise_invalid_project_id_exception\
            .side_effect = NotFound(*INVALID_PROJECT)
        expected_error_msg = "Invalid project_id, try with valid project_id"

        #act
        with pytest.raises(NotFound) as error:
            interactor.get_states_transition_details_wrapper(
                transition_details_query_dict,
                project_presenter=project_presenter,
                task_presenter=task_presenter)

        #assert
        assert error.value.message == expected_error_msg
        project_storage.validate_project_id.assert_called_once_with(
            transition_details_query_dict['project_id'])
        project_presenter.raise_invalid_project_id_exception\
            .assert_called_once()
예제 #7
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    comment_id = kwargs['comment_id']
    try:
        comment_replies = get_replies_for_comment(comment_id=comment_id)
    except InvalidCommentException:
        raise NotFound(*INVALID_COMMENT_ID)
    else:
        data = json.dumps(comment_replies)
        response = HttpResponse(data, status=200)
        return response
    """
예제 #8
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    storage = DistrictStorageImplementation()
    presenter = PresenterImplementation()
    interactor = GetDistrictReportOfSpecificDay(storage=storage,
                                                presenter=presenter)

    request_data = kwargs['request_data']
    district_id = kwargs['district_id']
    query = kwargs['request_query_params']
    date = query['date']

    try:
        response = interactor.get_district_report_of_specific_day(
            date=date, district_id=district_id)
    except InvalidDistrictId:
        raise NotFound(*INVALID_DISTRICT_ID)
    except InvalidDate:
        raise NotFound(*INVALID_DATE)
    data = json.dumps(response)
    return HttpResponse(data, status=200)
예제 #9
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    post_id = kwargs['post_id']
    try:
        user_reaction = get_reactions_to_post(post_id=post_id)
    except InvalidPostException:
        raise NotFound(*INVALID_POST_ID)
    else:
        data = json.dumps(user_reaction)
        response = HttpResponse(data, status=200)
        return response
    """
예제 #10
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    post_id = kwargs['post_id']
    try:
        post_details = get_post(
            post_id=post_id
        )
    except InvalidPostException:
        raise NotFound(*INVALID_POST_ID)
    else:
        data = json.dumps(post_details)
        return HttpResponse(data, status=200)

    """
예제 #11
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    request_data = kwargs['request_data']
    username = request_data['username']
    password = request_data['password']

    storage = UserStorageImplementation()
    presenter = PresenterImplementation()
    oauth_storage = OAuth2SQLStorage()

    interactor = LoginUserInteractor(storage=storage,
                                     presenter=presenter,
                                     oauth_storage=oauth_storage)

    try:
        access_token_response = interactor.login_user(username=username,
                                                      password=password)
    except InvalidUserName:
        raise NotFound(*INVALID_USERNAME)
    except InvalidPassword:
        raise NotFound(*INVALID_PASSWORD)
    data = json.dumps(access_token_response)
    return HttpResponse(data, 200)
예제 #12
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    storage = StateStorageImplementation()
    presenter = PresenterImplementation()
    interactor = GetReportOFStateForDate(storage=storage, presenter=presenter)

    request_data = kwargs['request_data']
    query = kwargs['request_query_params']
    date = query['date']
    try:
        response = interactor.get_report_of_state_for_date(date=date)
    except InvalidDate:
        raise NotFound(*INVALID_DATE)
    data = json.dumps(response)
    return HttpResponse(data, status=200)
예제 #13
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    comment_id = kwargs['comment_id']
    user = kwargs['user']
    request_data = kwargs['request_data']
    reaction_type = request_data['reaction_type']
    try:
        react_to_comment(user_id=user.id,
                         comment_id=comment_id,
                         reaction_type=reaction_type)
    except InvalidCommentException:
        raise NotFound(*INVALID_COMMENT_ID)
    except InvalidReactionTypeException:
        raise BadRequest(*INVALID_REACTION_TYPE)
    return HttpResponse(status=200)
    """
예제 #14
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    mandal_id = kwargs['mandal_id']
    user = kwargs['user']
    storage = MandalStorageImplementation()
    presenter = PresenterImplementation()

    interactor = GetStatistics(storage=storage, presenter=presenter)
    try:
        response = interactor.get_statistics(mandal_id=mandal_id, user=user)
    except UserNotAdmin:
        raise Forbidden(*USER_NOT_ADMIN)
    except InvalidMandalId:
        raise NotFound(*INVALID_MANDAL_ID)
    data = json.dumps(response)
    return HttpResponse(data, status=200)
예제 #15
0
    def test_get_states_transition_details_invalid_state_transition(self):

        #arrange
        from .raw_inputs\
            import project_dto, task_dto, transition_details_query_dict

        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = GetStatesTransitionDetailsInteractor(
            task_storage=task_storage, project_storage=project_storage)

        project_storage.validate_project_id.return_value = project_dto
        task_storage.validate_task_id.return_value = task_dto
        project_storage\
            .validate_state_transition\
            .return_value = False
        project_presenter\
            .raise_invalid_transition_exception\
            .side_effect = NotFound(*INVALID_TRANSITION)

        expected_error_msg = "Invalid Transition, try with valid transition"

        #act
        with pytest.raises(NotFound) as error:
            interactor.get_states_transition_details_wrapper(
                transition_details_query_dict,
                project_presenter=project_presenter,
                task_presenter=task_presenter)

        #assert
        assert error.value.message == expected_error_msg
        project_storage.validate_project_id.assert_called_once_with(
            transition_details_query_dict['project_id'])
        task_storage.validate_task_id.assert_called_once_with(
            transition_details_query_dict['task_id'])
        project_storage\
            .validate_state_transition.assert_called_once_with(
                project_dto.workflow_id,
                task_dto.state_id,
                transition_details_query_dict['to_state_id'])
        project_presenter.raise_invalid_transition_exception\
            .assert_called_once()
예제 #16
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    post_id = kwargs['post_id']
    user = kwargs['user']
    try:
        delete_post(
            user_id=user.id,
            post_id=post_id,
        )
    except InvalidPostException:
        raise NotFound(*INVALID_POST_ID)
    except UserCannotDeletePostException:
        raise Forbidden(*UNAUTHORISED_USER_TYPE)
    return HttpResponse(status=200)


    """
예제 #17
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    storage = DistrictStorageImplementation()
    presenter = PresenterImplementation()
    interactor = GetDayWiseMandalDetails(storage=storage, presenter=presenter)

    request_data = kwargs['request_data']
    district_id = kwargs['district_id']
    try:
        response = interactor.get_day_wise_mandal_details(
            district_id=district_id)
    except InvalidDistrictId:
        raise NotFound(*INVALID_DISTRICT_ID)

    data = json.dumps(response)
    response = HttpResponse(data, status=200)
    return response
예제 #18
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    storage = DistrictStorageImplementation()
    presenter = PresenterImplementation()
    interactor = GetDailyCumulativeReportOfMandalsForDistrict(
        storage=storage, presenter=presenter)

    request_data = kwargs['request_data']
    district_id = kwargs['district_id']
    try:
        response = interactor.get_daily_cumulative_report_of_mandals_for_district(
            district_id=district_id)
    except InvalidDistrictId:
        raise NotFound(*INVALID_DISTRICT_ID)

    data = json.dumps(response)
    response = HttpResponse(data, status=200)
    return response
    def test_get_states_for_task_with_unauthorized_developer(self):

        #arrange
        from .raw_inputs import task_state_data
        from django_swagger_utils.drf_server.exceptions\
            import NotFound

        from project_management_portal.constants.exception_messages\
            import UN_AUTHORIZED_DEVELOPER

        project_id = task_state_data['project_id']
        user_id = task_state_data['user_id']
        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = GetStatesForTaskInteractor(
            task_storage=task_storage, project_storage=project_storage)
        project_storage\
            .validate_developer_for_project.return_value = False
        project_presenter.raise_unauthorized_developer_exception\
            .side_effect = NotFound(*UN_AUTHORIZED_DEVELOPER)
        expected_error_msg = "Developer not allowed to access this resource"

        #act
        with pytest.raises(NotFound) as error:
            interactor.get_states_for_task_based_on_current_state_wrapper(
                task_state_data,
                project_presenter=project_presenter,
                task_presenter=task_presenter)

        #assert
        assert str(error.value) == expected_error_msg
        project_storage\
            .validate_developer_for_project.assert_called_once_with(
                user_id,
                project_id)
        project_presenter.raise_unauthorized_developer_exception\
            .assert_called_once()
    def test_get_tasks_with_invalid_project(self):

        #arrange
        from project_management_portal.constants.exception_messages\
            import INVALID_PROJECT

        project_id = 1
        user_id = 1

        task_storage = create_autospec(TaskStorageInterface)
        project_storage = create_autospec(ProjectStorageInterface)
        task_presenter = create_autospec(TaskPresenterInterface)
        project_presenter = create_autospec(ProjectPresenterInterface)

        interactor = GetTasksInteractor(task_storage=task_storage,
                                        project_storage=project_storage
                                       )

        project_storage.validate_project_id.return_value = False
        task_storage.get_tasks.return_value = tasks_details_dtos
        project_presenter.raise_invalid_project_id_exception\
            .side_effect = NotFound(*INVALID_PROJECT)
        expection_error_msg = "Invalid project_id, try with valid project_id"

        #act
        with pytest.raises(NotFound) as error:
            interactor.get_tasks_wrapper(user_id=user_id,
                                         project_id=project_id,
                                         project_presenter=project_presenter,
                                         task_presenter=task_presenter
                                        )

        #assert
        assert error.value.message == expection_error_msg
        project_storage.validate_project_id.assert_called_once_with(
            project_id=project_id
            )
        project_presenter.raise_invalid_project_id_exception\
            .assert_called_once()
예제 #21
0
def api_wrapper(*args, **kwargs):
    # ---------MOCK IMPLEMENTATION---------

    comment_id = kwargs['comment_id']
    user = kwargs['user']
    request_data = kwargs['request_data']
    comment_content=request_data['content']
    try:
        reply_comment_id = reply_to_comment(
        user_id=user.id,
        comment_id=comment_id,
        reply_content=comment_content
        )
    except InvalidCommentException:
        raise NotFound(*INVALID_COMMENT_ID)
    except InvalidReplyContent:
        raise BadRequest(*INVALID_REPLY_CONTENT)
    else:
        data = json.dumps({"comment_id": reply_comment_id})
        response = HttpResponse(data, status=201)
        return response

    """
 def raise_exception_for_invalid_post(self):
     raise NotFound(*INVALID_POST_ID)
 def raise_invalid_username_exception(self):
     raise NotFound(*INVALID_USERNAME)
 def raise_invalid_transition_exception(self):
     raise NotFound(*INVALID_TRANSITION)
 def raise_invalid_project_id_exception(self):
     raise NotFound(*INVALID_PROJECT)
 def raise_invalid_workflow_id_exception(self):
     raise NotFound(*INVALID_WORKFLOW)
예제 #27
0
 def raise_invalid_password_exception(self):
     raise NotFound(*INVALID_PASSWORD)
 def raise_exception_for_invalid_user_id(self, user_id: int):
     raise NotFound(*USERISNOTVALID)
예제 #29
0
 def raise_invalid_testcase_for_question_exception(self):
     raise NotFound(*INVALID_TESTCASE_FOR_QUESTION)
예제 #30
0
 def raise_invalid_testcase_exception(self):
     raise NotFound(*INVALID_TESTCASE_ID)