public async Task GetFundingStreamPermissionsForUser_WhenNoResultsFound_ThenEmptyListReturned()
        {
            // Arrange
            List <FundingStreamPermission> repositoryResult = new List <FundingStreamPermission>();

            IUserRepository userRepository = CreateUserRepository();

            userRepository
            .GetFundingStreamPermissions(Arg.Is(UserId))
            .Returns(repositoryResult);

            FundingStreamPermissionService service = CreateService(userRepository);

            // Act
            IActionResult result = await service.GetFundingStreamPermissionsForUser(UserId);

            // Assert
            result
            .Should()
            .BeOfType <OkObjectResult>()
            .Which
            .Value
            .Should()
            .BeEquivalentTo <IEnumerable <FundingStreamPermissionCurrent> >(Enumerable.Empty <FundingStreamPermissionCurrent>());

            await userRepository
            .Received(1)
            .GetFundingStreamPermissions(Arg.Is(UserId));
        }
        public async Task GetFundingStreamPermissionsForUser_WhenUserIdIsNull_ThenBadRequestReturned()
        {
            // Arrange
            string userId = null;

            FundingStreamPermissionService service = CreateService();

            // Act
            IActionResult result = await service.GetFundingStreamPermissionsForUser(userId);

            // Assert
            result
            .Should()
            .BeOfType <BadRequestObjectResult>()
            .Which
            .Value
            .Should()
            .Be("userId is null or empty");
        }
        public async Task GetFundingStreamPermissionsForUser_WhenResultsFound_ThenFundingStreamPermissionsReturned()
        {
            // Arrange
            List <FundingStreamPermission> repositoryResult = new List <FundingStreamPermission>()
            {
                new FundingStreamPermission()
                {
                    CanApproveFunding            = true,
                    CanChooseFunding             = true,
                    CanCreateSpecification       = false,
                    CanEditCalculations          = false,
                    CanEditSpecification         = false,
                    CanMapDatasets               = false,
                    CanReleaseFunding            = true,
                    CanCreateProfilePattern      = true,
                    CanEditProfilePattern        = true,
                    CanDeleteProfilePattern      = true,
                    CanAssignProfilePattern      = false,
                    CanApplyCustomProfilePattern = false,
                    CanApproveCalculations       = true,
                    CanApproveAnyCalculations    = false,
                    CanApproveAllCalculations    = false,
                    FundingStreamId              = FundingStreamId,
                    UserId = UserId
                },
                new FundingStreamPermission()
                {
                    CanApproveFunding            = true,
                    CanChooseFunding             = true,
                    CanCreateSpecification       = true,
                    CanEditCalculations          = true,
                    CanEditSpecification         = false,
                    CanMapDatasets               = false,
                    CanReleaseFunding            = true,
                    CanCreateProfilePattern      = false,
                    CanEditProfilePattern        = false,
                    CanDeleteProfilePattern      = false,
                    CanAssignProfilePattern      = true,
                    CanApplyCustomProfilePattern = false,
                    CanApproveCalculations       = false,
                    CanApproveAnyCalculations    = true,
                    CanApproveAllCalculations    = true,
                    FundingStreamId              = "fs2",
                    UserId = UserId
                }
            };

            IUserRepository userRepository = CreateUserRepository();

            userRepository
            .GetFundingStreamPermissions(Arg.Is(UserId))
            .Returns(repositoryResult);

            FundingStreamPermissionService service = CreateService(userRepository);

            // Act
            IActionResult result = await service.GetFundingStreamPermissionsForUser(UserId);

            // Assert
            result
            .Should()
            .BeOfType <OkObjectResult>()
            .Which
            .Value
            .Should()
            .BeEquivalentTo <IEnumerable <FundingStreamPermissionCurrent> >(new List <FundingStreamPermissionCurrent>()
            {
                new FundingStreamPermissionCurrent()
                {
                    CanApproveFunding            = true,
                    CanChooseFunding             = true,
                    CanCreateSpecification       = false,
                    CanEditCalculations          = false,
                    CanEditSpecification         = false,
                    CanMapDatasets               = false,
                    CanReleaseFunding            = true,
                    CanCreateProfilePattern      = true,
                    CanEditProfilePattern        = true,
                    CanDeleteProfilePattern      = true,
                    CanAssignProfilePattern      = false,
                    CanApplyCustomProfilePattern = false,
                    CanApproveCalculations       = true,
                    CanApproveAnyCalculations    = false,
                    CanApproveAllCalculations    = false,
                    FundingStreamId              = FundingStreamId,
                    UserId = UserId
                },
                new FundingStreamPermissionCurrent()
                {
                    CanApproveFunding            = true,
                    CanChooseFunding             = true,
                    CanCreateSpecification       = true,
                    CanEditCalculations          = true,
                    CanEditSpecification         = false,
                    CanMapDatasets               = false,
                    CanReleaseFunding            = true,
                    CanCreateProfilePattern      = false,
                    CanEditProfilePattern        = false,
                    CanDeleteProfilePattern      = false,
                    CanAssignProfilePattern      = true,
                    CanApplyCustomProfilePattern = false,
                    CanApproveCalculations       = false,
                    CanApproveAnyCalculations    = true,
                    CanApproveAllCalculations    = true,
                    FundingStreamId              = "fs2",
                    UserId = UserId
                }
            });

            await userRepository
            .Received(1)
            .GetFundingStreamPermissions(Arg.Is(UserId));
        }