public void MustBeValidStatusTransition_Valid_Succeeds(SolutionStatus oldStatus, SolutionStatus newStatus, string role)
        {
            var solnId = Guid.NewGuid().ToString();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext(role: role));
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var oldSoln   = Creator.GetSolution(id: solnId, status: oldStatus);
            var newSoln   = Creator.GetSolution(id: solnId, status: newStatus);

            _solutionDatastore.Setup(x => x.ById(solnId)).Returns(oldSoln);

            validator.MustBeValidStatusTransition();
            var valres = validator.Validate(newSoln);

            valres.Errors.Should().BeEmpty();
        }
        public void MustBeValidStatusTransition_Invalid_ReturnsError(SolutionStatus oldStatus, SolutionStatus newStatus, string role)
        {
            var solnId = Guid.NewGuid().ToString();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext(role: role));
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var oldSoln   = Creator.GetSolution(id: solnId, status: oldStatus);
            var newSoln   = Creator.GetSolution(id: solnId, status: newStatus);

            _solutionDatastore.Setup(x => x.ById(solnId)).Returns(oldSoln);

            validator.MustBeValidStatusTransition();
            var valres = validator.Validate(newSoln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Invalid Status transition")
            .And
            .HaveCount(1);
        }
        public void MustBeValidStatusTransition_FinalState_ReturnsError(
            #region params
            [Values(
                 SolutionStatus.Approved,
                 SolutionStatus.Failed)]
            SolutionStatus oldStatus,
            [Values(
                 SolutionStatus.Failed,
                 SolutionStatus.Draft,
                 SolutionStatus.Registered,
                 SolutionStatus.CapabilitiesAssessment,
                 SolutionStatus.StandardsCompliance,
                 SolutionStatus.SolutionPage,
                 SolutionStatus.FinalApproval,
                 SolutionStatus.Approved)]
            SolutionStatus newStatus,
            [Values(
                 Roles.Admin,
                 Roles.Buyer,
                 Roles.Supplier)]
            #endregion
            string role)
        {
            var solnId = Guid.NewGuid().ToString();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext(role: role));
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var oldSoln   = Creator.GetSolution(id: solnId, status: oldStatus);
            var newSoln   = Creator.GetSolution(id: solnId, status: newStatus);

            _solutionDatastore.Setup(x => x.ById(solnId)).Returns(oldSoln);

            validator.MustBeValidStatusTransition();
            var valres = validator.Validate(newSoln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Invalid Status transition")
            .And
            .HaveCount(1);
        }