コード例 #1
0
ファイル: DomainContoller.cs プロジェクト: progvp/mail-check
        public async Task <IActionResult> AddDomain([FromBody] DomainForCreation domain)
        {
            string email = User.GetEmail();

            ValidationResult validationResult = _domainForCreationValidator.Validate(domain);

            if (!validationResult.IsValid)
            {
                _log.LogWarning($"User {email} made bad request: {validationResult.GetErrorString()}");
                return(BadRequest(new ErrorResponse(validationResult.GetErrorString())));
            }

            if (!User.IsAdmin())
            {
                ValidationResult publicDomainValidationResult =
                    _publicDomainForCreationValidator.Validate(new PublicDomainForCreation {
                    Name = domain.Name
                });
                if (!publicDomainValidationResult.IsValid)
                {
                    _log.LogWarning($"User {email} made bad request: {publicDomainValidationResult.GetErrorString()}");
                    return(BadRequest(new ErrorResponse(publicDomainValidationResult.GetErrorString())));
                }
            }

            OrganisationalDomain organisationalDomain = await
                                                        _organisationalDomainProvider.GetOrganisationalDomain(domain.Name);

            int?userId = User.GetId();

            if (!userId.HasValue)
            {
                return(BadRequest(new ErrorResponse("Unable to retrieve user id")));
            }

            if (!organisationalDomain.IsOrgDomain && !organisationalDomain.IsTld)
            {
                _log.LogDebug(
                    $"{domain.Name} is not an organisational domain adding {organisationalDomain.OrgDomain}");
                Domain.Domain newOrgDomain =
                    await _domainDao.CreateDomain(organisationalDomain.OrgDomain, userId.Value);

                await _publisher.Publish(new DomainCreated(newOrgDomain.Name, email, DateTime.UtcNow),
                                         _config.PublisherConnectionString);
            }

            Domain.Domain newDomain = await _domainDao.CreateDomain(domain.Name, userId.Value);

            await _publisher.Publish(new DomainCreated(domain.Name, email, DateTime.UtcNow),
                                     _config.PublisherConnectionString);

            return(CreatedAtRoute(nameof(GetDomain), new { id = newDomain.Id }, newDomain));
        }
コード例 #2
0
        public async Task AdminUserAddingNonPublicDomain()
        {
            SetSid("1", "*****@*****.**", _domainContoller);

            DomainForCreation request = new DomainForCreation {
                Name = "abc.com"
            };

            A.CallTo(() => _domainForCreationValidator.Validate(request)).Returns(new ValidationResult());
            A.CallTo(() => _publicDomainForCreationValidator.Validate(A <PublicDomainForCreation> ._)).Returns(new ValidationResult());
            IActionResult result = await _domainContoller.AddDomain(request);

            Assert.That(result, Is.TypeOf <CreatedAtRouteResult>());
            A.CallTo(() => _domainDao.CreateDomain(A <string> ._, A <int> ._)).MustHaveHappened();
            A.CallTo(() => _publisherConfig.PublisherConnectionString).MustHaveHappened();
            A.CallTo(() => _publisher.Publish(A <DomainCreated> ._, A <string> ._)).MustHaveHappened();
        }
コード例 #3
0
        public async Task InvalidDomainBadRequestResponse()
        {
            SetSid("1", "*****@*****.**", _domainContoller);

            DomainForCreation request = new DomainForCreation {
                Name = "abcgovuk"
            };
            var validationResult = new ValidationResult(new List <ValidationFailure> {
                new ValidationFailure(string.Empty, string.Empty)
            });

            A.CallTo(() => _domainForCreationValidator.Validate(request)).Returns(validationResult);
            IActionResult result = await _domainContoller.AddDomain(request);

            Assert.That(result, Is.TypeOf <BadRequestObjectResult>());
            A.CallTo(() => _domainDao.CreateDomain(A <string> ._, A <int> ._)).MustNotHaveHappened();
            A.CallTo(() => _publisher.Publish(A <string> ._, A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _publisherConfig.PublisherConnectionString).MustNotHaveHappened();
        }
コード例 #4
0
        public async Task StandardUserAddingNonPublicDomainReturnsBadRequestResponse()
        {
            SetSid("1", "*****@*****.**", _domainContoller, "Standard");

            var errorValidationResult = new ValidationResult(new List <ValidationFailure> {
                new ValidationFailure(string.Empty, string.Empty)
            });

            DomainForCreation request = new DomainForCreation {
                Name = "abc.com"
            };

            A.CallTo(() => _domainForCreationValidator.Validate(request)).Returns(new ValidationResult());
            A.CallTo(() => _publicDomainForCreationValidator.Validate(request)).Returns(errorValidationResult);
            IActionResult result = await _domainContoller.AddDomain(request);

            Assert.That(result, Is.TypeOf <BadRequestObjectResult>());
            A.CallTo(() => _organisationalDomainProvider.GetOrganisationalDomain(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _domainDao.CreateDomain(A <string> ._, A <int> ._)).MustNotHaveHappened();
            A.CallTo(() => _publisher.Publish(A <string> ._, A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _publisherConfig.PublisherConnectionString).MustNotHaveHappened();
        }