public async Task ProjectService_CreateProject_Failed()
        {
            // arrange
            var request = GetProjectCreateRequest();

            MockProjectRepository.Setup_Any_Returns_True();

            // act
            var result = await SystemUnderTest.CreateProject(request);

            // assert
            result.ErrorMessages.ShouldNotBeNull();
            result.Status.ShouldBe(ResponseStatus.Failed);
            AssertReturnType <ProjectCreateResponse>(result);
            MockProjectRepository.Verify_Any();
        }
        public async Task ProjectService_CloneProject_ProjectAlreadyExist()
        {
            // arrange
            var request = GetProjectCloneRequest();

            MockOrganizationRepository.Setup_Any_Returns_False();
            MockProjectRepository.Setup_Any_Returns_True();

            // act
            var result = await SystemUnderTest.CloneProject(request);

            // assert
            result.ErrorMessages.ShouldNotBeNull();
            result.Status.ShouldBe(ResponseStatus.Failed);
            result.ErrorMessages.Any(x => x == "project_name_must_be_unique").ShouldBeTrue();
            AssertReturnType <ProjectCloneResponse>(result);
            MockOrganizationRepository.Verify_Any();
            MockProjectRepository.Verify_Any();
        }
        public async Task ProjectService_CreateProject_ProjectAlreadyExist()
        {
            // arrange
            var request = GetProjectCreateRequest();

            MockUserRepository.Setup_SelectById_Returns_OrganizationOneAdminUserOne();
            MockOrganizationRepository.Setup_Any_Returns_False();
            MockProjectRepository.Setup_Any_Returns_True();

            // act
            var result = await SystemUnderTest.CreateProject(request);

            // assert
            AssertResponseStatusAndErrorMessages(result, ResponseStatus.Failed, ProjectNameMustBeUnique);
            AssertReturnType <ProjectCreateResponse>(result);
            MockUserRepository.Verify_SelectById();
            MockOrganizationRepository.Verify_Any();
            MockProjectRepository.Verify_Any();
        }
        public async Task ProjectService_CloneProject_Success()
        {
            // arrange
            var request = GetProjectCloneRequest();

            MockUserRepository.Setup_SelectById_Returns_OrganizationOneAdminUserOne();
            MockProjectRepository.Setup_Select_Returns_OrganizationOneProjectOne();
            MockProjectRepository.Setup_Any_Returns_False();
            MockProjectUnitOfWork.Setup_DoCloneWork_Returns_True();

            // act
            var result = await SystemUnderTest.CloneProject(request);

            // assert
            result.Status.ShouldBe(ResponseStatus.Success);
            result.ErrorMessages.ShouldNotBeNull();
            result.ErrorMessages.Count.ShouldBe(0);
            AssertReturnType <ProjectCloneResponse>(result);
            MockUserRepository.Verify_SelectById();
            MockProjectRepository.Verify_Select();
            MockProjectRepository.Verify_Any();
            MockProjectUnitOfWork.Verify_DoCloneWork();
        }
        public async Task ProjectService_EditProject_Success()
        {
            // arrange
            var request = GetProjectEditRequest();

            MockOrganizationRepository.Setup_Any_Returns_False();
            MockProjectRepository.Setup_Update_Success();
            MockProjectRepository.Setup_Any_Returns_False();
            MockProjectRepository.Setup_Select_Returns_OrganizationOneProjectOne();

            // act
            var result = await SystemUnderTest.EditProject(request);

            // assert
            result.Status.ShouldBe(ResponseStatus.Success);
            result.ErrorMessages.ShouldNotBeNull();
            result.ErrorMessages.Count.ShouldBe(0);
            AssertReturnType <ProjectEditResponse>(result);
            MockOrganizationRepository.Verify_Any();
            MockProjectRepository.Verify_Update();
            MockProjectRepository.Verify_Any();
            MockProjectRepository.Verify_Select();
        }