public void MustBePending_Draft_Succeeds(SolutionStatus status)
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(status: status);

            validator.MustBePending();
            var valres = validator.Validate(soln);

            valres.Errors.Should().BeEmpty();
        }
        public void PreviousVersionMustBeFromSameOrganisation_NoPrevious_Succeeds()
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution();

            validator.PreviousVersionMustBeFromSameOrganisation();
            var valres = validator.Validate(soln);

            valres.Errors.Should().BeEmpty();
        }
        public void MustBePending_NonDraft_ReturnsError(SolutionStatus status)
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(status: status);

            validator.MustBePending();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Status must be Draft")
            .And
            .HaveCount(1);
        }
        public void Update_Calls_Modifier()
        {
            var logic = new SolutionsLogic(_modifier.Object, _datastore.Object, _contacts.Object, _context.Object, _validator.Object, _filter.Object, _evidenceBlobStoreLogic.Object);
            var soln  = Creator.GetSolution();

            var valres = new ValidationResult();

            _validator.Setup(x => x.Validate(It.IsAny <ValidationContext>())).Returns(valres);

            logic.Update(soln);

            _modifier.Verify(x => x.ForUpdate(soln), Times.Once);
        }
        public void MustBeValidOrganisationId_NotGuid_ReturnsError()
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(orgId: "some other Id");

            validator.MustBeValidOrganisationId();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Invalid OrganisationId")
            .And
            .HaveCount(1);
        }
        public void Create_Calls_Modifier()
        {
            var logic = Create();
            var soln  = Creator.GetSolution();

            var valres = new ValidationResult();

            _validator.Setup(x => x.Validate(It.IsAny <ValidationContext>())).Returns(valres);

            logic.Create(soln);

            _modifier.Verify(x => x.ForCreate(soln), Times.Once);
        }
        public void MustBeFromSameOrganisationOrAdmin_Same_Succeeds()
        {
            var orgId = Guid.NewGuid().ToString();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext(orgId: orgId, role: Roles.Supplier));
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(orgId: orgId);

            validator.MustBeFromSameOrganisationOrAdmin();
            var valres = validator.Validate(soln);

            valres.Errors.Should().BeEmpty();
        }
        public void MustBeDevelopment_Development_Succeeds(
            [ValueSource(nameof(DevelopmentEnvironments))] string environment)
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution();

            _env.Setup(x => x.EnvironmentName).Returns(environment);

            validator.MustBeDevelopment();
            var valres = validator.Validate(soln);

            valres.Errors.Should().BeEmpty();
        }
        public void SolutionMustBeInReview_Review_Succeeds(SolutionStatus status)
        {
            var validator = new StandardsApplicableEvidenceValidator(_evidenceDatastore.Object, _claimDatastore.Object, _solutionDatastore.Object, _context.Object, _logger.Object);
            var soln      = Creator.GetSolution(status: status);
            var claim     = Creator.GetStandardsApplicable(solnId: soln.Id);
            var evidence  = Creator.GetStandardsApplicableEvidence(claimId: claim.Id);

            _claimDatastore.As <IClaimsDatastore <ClaimsBase> >().Setup(x => x.ById(evidence.ClaimId)).Returns(claim);
            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(soln);

            validator.SolutionMustBeInReview();
            var valres = validator.Validate(evidence);

            valres.Errors.Should().BeEmpty();
        }
        public void PreviousVersionMustBeFromSameOrganisation_Different_ReturnsError()
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(previousId: Guid.NewGuid().ToString());

            _solutionDatastore.Setup(x => x.ById(soln.PreviousId)).Returns(Creator.GetSolution());

            validator.PreviousVersionMustBeFromSameOrganisation();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Previous version must be from same organisation")
            .And
            .HaveCount(1);
        }
Exemplo n.º 11
0
        public void Filter_SupplierOther_ReturnsNull()
        {
            var filter = new DummyClaimsFilterBase(_context.Object, _solutionDatastore.Object);
            var orgId  = Guid.NewGuid().ToString();
            var soln   = Creator.GetSolution(orgId: orgId);
            var claim  = Creator.GetClaimsBase(solnId: soln.Id);
            var ctx    = Creator.GetContext();

            _context.Setup(c => c.HttpContext).Returns(ctx);
            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(soln);

            var res = filter.FilterForSupplier(claim);

            res.Should().BeNull();
        }
Exemplo n.º 12
0
        public void ForUpdate_Sets_ModifiedById()
        {
            var modifier = new SolutionsModifier(_context.Object, _contacts.Object);
            var soln     = Creator.GetSolution();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext());
            var contactId = Guid.NewGuid().ToString();
            var contact   = Creator.GetContact(id: contactId);

            _contacts.Setup(x => x.ByEmail(It.IsAny <string>())).Returns(contact);

            modifier.ForUpdate(soln);

            soln.ModifiedById.Should().Be(contactId);
        }
Exemplo n.º 13
0
        public void ForCreate_Sets_ModifiedByOn()
        {
            var modifier = new SolutionsModifier(_context.Object, _contacts.Object);
            var soln     = Creator.GetSolution();

            soln.ModifiedOn = new DateTime(2006, 2, 20);
            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext());
            var contact = Creator.GetContact();

            _contacts.Setup(x => x.ByEmail(It.IsAny <string>())).Returns(contact);

            modifier.ForCreate(soln);

            soln.ModifiedOn.Should().BeCloseTo(DateTime.UtcNow);
        }
Exemplo n.º 14
0
        public void MustBeSameOrganisation_Same_NewClaim_Succeeds()
        {
            var orgId = Guid.NewGuid().ToString();

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext(orgId: orgId));
            var validator = new DummyClaimsValidatorBase(_context.Object, _logger.Object, _claimDatastore.Object, _contactsDatastore.Object, _solutionsDatastore.Object);
            var claim     = Creator.GetClaimsBase();

            _solutionsDatastore.Setup(x => x.ById(claim.SolutionId)).Returns(Creator.GetSolution(orgId: orgId));

            validator.MustBeSameOrganisation();
            var valres = validator.Validate(claim);

            valres.Errors.Should().BeEmpty();
        }
        public void Filter_Supplier_Returns_Own([ValueSource(nameof(Statuses))] SolutionStatus status)
        {
            var orgId = Guid.NewGuid().ToString();
            var ctx   = Creator.GetContext(orgId: orgId, role: Roles.Supplier);

            _context.Setup(c => c.HttpContext).Returns(ctx);
            var filter = new SolutionsFilter(_context.Object);
            var soln1  = Creator.GetSolution(status: status, orgId: orgId);
            var soln2  = Creator.GetSolution(status: status);
            var soln3  = Creator.GetSolution(status: status);
            var solns  = new[] { soln1, soln2, soln3 };

            var res = filter.Filter(solns);

            res.Should().BeEquivalentTo(soln1);
        }
        public void MustBeCurrentVersion_PreviousVersion_ReturnsError()
        {
            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext());
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution();

            _solutionDatastore.Setup(x => x.ByOrganisation(soln.OrganisationId)).Returns(new[] { Creator.GetSolution(previousId: soln.Id) });

            validator.MustBeCurrentVersion();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Can only change current version")
            .And
            .HaveCount(1);
        }
        public void MustBeCurrentVersion_Current_Succeeds()
        {
            var solnId = Guid.NewGuid().ToString();

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

            _solutionDatastore.Setup(x => x.ByOrganisation(newSoln.OrganisationId)).Returns(new[] { oldSoln });

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

            valres.Errors.Should().BeEmpty();
        }
        public void Update_CallsPrepareForSolution_WhenRegistered(SolutionStatus status)
        {
            var logic = Create();
            var soln  = Creator.GetSolution(status: status);

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext());
            _contacts.Setup(x => x.ByEmail(It.IsAny <string>())).Returns(Creator.GetContact());

            var valres = new ValidationResult();

            _validator.Setup(x => x.Validate(It.IsAny <ValidationContext>())).Returns(valres);

            logic.Update(soln);

            _evidenceBlobStoreLogic.Verify(x => x.PrepareForSolution(soln.Id), Times.Once);
        }
        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 Update_DoesNotCallPrepareForSolution_WhenNotRegistered(SolutionStatus status)
        {
            var logic = new SolutionsLogic(_modifier.Object, _datastore.Object, _contacts.Object, _context.Object, _validator.Object, _filter.Object, _evidenceBlobStoreLogic.Object);
            var soln  = Creator.GetSolution(status: status);

            _context.Setup(x => x.HttpContext).Returns(Creator.GetContext());
            _contacts.Setup(x => x.ByEmail(It.IsAny <string>())).Returns(Creator.GetContact());

            var valres = new ValidationResult();

            _validator.Setup(x => x.Validate(It.IsAny <ValidationContext>())).Returns(valres);

            logic.Update(soln);

            _evidenceBlobStoreLogic.Verify(x => x.PrepareForSolution(soln.Id), Times.Never);
        }
        public void MustBePendingToChangeVersion_SameVersion_Succeeds(SolutionStatus status)
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(status: status);

            soln.Version = "Original version";
            var solnOld = Creator.GetSolution(status: status, id: soln.Id);

            solnOld.Version = "Original version";
            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(solnOld);

            validator.MustBePendingToChangeVersion();
            var valres = validator.Validate(soln);

            valres.Errors.Should().BeEmpty();
        }
Exemplo n.º 22
0
        public void Filter_None_Returns_Approved(
            [ValueSource(typeof(Creator), nameof(Creator.SolutionStatuses))] SolutionStatus status)
        {
            var filter = new SolutionsFilter();
            var solns  = new[]
            {
                Creator.GetSolution(status: status),
                Creator.GetSolution(status: status),
                Creator.GetSolution(status: status)
            };
            var expSolns = solns.Where(x => x.Status == SolutionStatus.Approved);

            var res = filter.Filter(solns);

            res.Should().BeEquivalentTo(expSolns);
        }
        public void MustBeSameOrganisation_Different_ReturnsError()
        {
            var orgId     = Guid.NewGuid().ToString();
            var soln      = Creator.GetSolution(orgId: orgId);
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);

            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(Creator.GetSolution());

            validator.MustBeSameOrganisation();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Cannot transfer solutions between organisations")
            .And
            .HaveCount(1);
        }
        public void MustBeDevelopment_NonDevelopment_ReturnsError(
            [ValueSource(nameof(NonDevelopmentEnvironments))] string environment)
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution();

            _env.Setup(x => x.EnvironmentName).Returns(environment);

            validator.MustBeDevelopment();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .ContainSingle(x => x.ErrorMessage == "Only available in Development environment")
            .And
            .HaveCount(1);
        }
        public void Validate_Supplier_Other_ReturnsError(
            [ValueSource(nameof(Operations))] string operation)
        {
            var orgId = Guid.NewGuid().ToString();
            var ctx   = Creator.GetContext(orgId: orgId, role: Roles.Supplier);

            _context.Setup(c => c.HttpContext).Returns(ctx);
            var soln     = Creator.GetSolution();
            var techCont = Creator.GetTechnicalContact();

            _solutionDatastore.Setup(x => x.ById(techCont.SolutionId)).Returns(soln);
            var validator = new TechnicalContactValidator(_context.Object, _solutionDatastore.Object);

            var res = validator.Validate(techCont, ruleSet: operation);

            res.Errors.Count().Should().Be(1);
        }
        public void Filter_Admin_Returns_All([ValueSource(nameof(Statuses))] SolutionStatus status)
        {
            var ctx = Creator.GetContext(role: Roles.Admin);

            _context.Setup(c => c.HttpContext).Returns(ctx);
            var filter = new SolutionsFilter(_context.Object);
            var solns  = new[]
            {
                Creator.GetSolution(status: status),
                Creator.GetSolution(status: status),
                Creator.GetSolution(status: status)
            };

            var res = filter.Filter(solns);

            res.Should().BeEquivalentTo(solns);
        }
        public void MustBeValidOrganisationId_Null_ReturnsError()
        {
            var validator = new SolutionsValidator(_context.Object, _logger.Object, _solutionDatastore.Object, _organisationDatastore.Object, _env.Object);
            var soln      = Creator.GetSolution(orgId: null);

            soln.OrganisationId = null;

            validator.MustBeValidOrganisationId();
            var valres = validator.Validate(soln);

            valres.Errors.Should()
            .Contain(x => x.ErrorMessage == "Invalid OrganisationId")
            .And
            .Contain(x => x.ErrorMessage == "'Organisation Id' must not be empty.")
            .And
            .HaveCount(2);
        }
Exemplo n.º 28
0
        public void SolutionMustBeInReview_Review_Succeeds(SolutionStatus status)
        {
            var validator = new CapabilitiesImplementedReviewsValidator(_reviewsDatastore.Object, _evidenceDatastore.Object, _claimDatastore.Object, _solutionDatastore.Object, _context.Object, _logger.Object);
            var soln      = Creator.GetSolution(status: status);
            var review    = GetCapabilitiesImplementedReview();
            var claim     = Creator.GetCapabilitiesImplemented(solnId: soln.Id);
            var evidence  = Creator.GetCapabilitiesImplementedEvidence(claimId: claim.Id);

            _evidenceDatastore.As <IEvidenceDatastore <EvidenceBase> >().Setup(x => x.ById(review.EvidenceId)).Returns(evidence);
            _claimDatastore.As <IClaimsDatastore <ClaimsBase> >().Setup(x => x.ById(evidence.ClaimId)).Returns(claim);
            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(soln);

            validator.SolutionMustBeInReview();
            var valres = validator.Validate(review);

            valres.Errors.Should().BeEmpty();
        }
Exemplo n.º 29
0
        public void SupplierOwn_Other_ReturnsError()
        {
            var orgId = Guid.NewGuid().ToString();
            var ctx   = Creator.GetContext(orgId: orgId, role: Roles.Supplier);

            _context.Setup(c => c.HttpContext).Returns(ctx);
            var soln     = Creator.GetSolution();
            var techCont = Creator.GetTechnicalContact();

            _solutionDatastore.Setup(x => x.ById(techCont.SolutionId)).Returns(soln);
            var validator = new TechnicalContactsValidator(_context.Object, _logger.Object, _solutionDatastore.Object);

            validator.SupplierOwn();
            var res = validator.Validate(techCont);

            res.Errors.Count().Should().Be(1);
        }
        public void Filter_SupplierOwn_ReturnsOwn()
        {
            var filter   = new DummyEvidenceFilterBase(_claimDatastore.Object, _solutionDatastore.Object, _context.Object);
            var orgId    = Guid.NewGuid().ToString();
            var soln     = Creator.GetSolution(orgId: orgId);
            var claim    = Creator.GetClaimsBase(solnId: soln.Id);
            var evidence = Creator.GetEvidenceBase(claimId: claim.Id);
            var ctx      = Creator.GetContext(orgId: orgId);

            _context.Setup(c => c.HttpContext).Returns(ctx);
            _claimDatastore.Setup(x => x.ById(evidence.ClaimId)).Returns(claim);
            _solutionDatastore.Setup(x => x.ById(soln.Id)).Returns(soln);

            var res = filter.FilterForSupplier(new[] { evidence });

            res.Should().BeEquivalentTo(evidence);
        }