public async Task ReturnsFailureWhenAnyFail() { DigitalOceanDomain domainOne = new DigitalOceanDomain(); DigitalOceanDomain domainTwo = new DigitalOceanDomain(); IDigitalOceanDomainProcessor domainProcessor = A.Fake <IDigitalOceanDomainProcessor>(); A.CallTo(() => domainProcessor.ProcessAsync(domainOne, A <ExternalAddress> .Ignored, A <string> .Ignored, A <CancellationToken> .Ignored)).Returns(Result.Ok()); A.CallTo(() => domainProcessor.ProcessAsync(domainTwo, A <ExternalAddress> .Ignored, A <string> .Ignored, A <CancellationToken> .Ignored)).Returns(Result.Fail("This failed")); DigitalOceanAccountProcessor processor = new DigitalOceanAccountProcessor(domainProcessor); DigitalOceanAccount account = new DigitalOceanAccount() { Domains = new List <DigitalOceanDomain>() { domainOne, domainTwo } }; ExternalAddress externalAddress = new ExternalAddress() { IPv4Address = IPAddress.Parse("100.100.100.100") }; Result result = await processor.ProcessAsync(account, externalAddress, new CancellationToken()); Assert.True(result.IsFailed); }
public async Task ReturnsFailureIfAnyAccountsReturnFailure() { ExternalAddress externalAddress = new ExternalAddress() { IPv4Address = IPAddress.Parse("100.100.100.100") }; DigitalOceanAccount accountOne = new DigitalOceanAccount(); DigitalOceanAccount accountTwo = new DigitalOceanAccount(); DigitalOceanConfiguration config = new DigitalOceanConfiguration() { Accounts = new List <DigitalOceanAccount>() { accountOne, accountTwo } }; IOptionsSnapshot <DigitalOceanConfiguration> optionsSnapshot = A.Fake <IOptionsSnapshot <DigitalOceanConfiguration> >(); IDigitalOceanAccountProcessor accountProcessor = A.Fake <IDigitalOceanAccountProcessor>(); A.CallTo(() => optionsSnapshot.Value).Returns(config); A.CallTo(() => accountProcessor.ProcessAsync(accountOne, externalAddress, A <CancellationToken> .Ignored)).Returns(Result.Ok()); A.CallTo(() => accountProcessor.ProcessAsync(accountTwo, externalAddress, A <CancellationToken> .Ignored)).Returns(Result.Fail("This failed")); DigitalOceanDDNSService DOService = new DigitalOceanDDNSService(optionsSnapshot, accountProcessor); Result actual = await DOService.ProcessAsync(externalAddress, new CancellationToken()); Assert.True(actual.IsFailed); }
public async Task <Result> ProcessAsync(DigitalOceanAccount account, ExternalAddress externalAddress, CancellationToken cancellation) { Result result = Result.Ok(); foreach (DigitalOceanDomain domain in account.Domains) { result = result.Merge(await _domainProcessor.ProcessAsync(domain, externalAddress, account.Token, cancellation)); } return(result); }
public void ValidDigitalOceanAccount() { DigitalOceanAccount account = new DigitalOceanAccount { Domains = new[] { ValidDigitalOceanDomain() }, Token = "QSA5VXQSWMH3L8MYX2XF" }; IValidator <DigitalOceanAccount> validator = new DigitalOceanAccountValidator(); ValidationResult validationResult = validator.Validate(account); Assert.True(validationResult.IsValid); }
public void InvalidDigitalOceanAccount() { DigitalOceanAccount account = new DigitalOceanAccount { Domains = new[] { ValidDigitalOceanDomain() }, Token = string.Empty }; IValidator <DigitalOceanAccount> validator = new DigitalOceanAccountValidator(); ValidationResult validationResult = validator.Validate(account); Assert.False(validationResult.IsValid); Assert.True(validationResult.Errors.All(m => m.ErrorMessage.Equals(DigitalOceanAccountValidator.TokenErrorMessage))); }
public async Task ReturnsSuccessfulResultWhenAllSucceed() { IDigitalOceanDomainProcessor domainProcessor = A.Fake <IDigitalOceanDomainProcessor>(); A.CallTo(() => domainProcessor.ProcessAsync(A <DigitalOceanDomain> .Ignored, A <ExternalAddress> .Ignored, A <string> .Ignored, A <CancellationToken> .Ignored)).Returns(Result.Ok()); DigitalOceanAccountProcessor processor = new DigitalOceanAccountProcessor(domainProcessor); DigitalOceanAccount account = new DigitalOceanAccount() { Domains = new List <DigitalOceanDomain>() { new DigitalOceanDomain(), new DigitalOceanDomain() } }; ExternalAddress externalAddress = new ExternalAddress() { IPv4Address = IPAddress.Parse("100.100.100.100") }; Result result = await processor.ProcessAsync(account, externalAddress, new CancellationToken()); Assert.True(result.IsSuccess); }