public async Task GetCalculationByName_GivenModelDoesNotContainAcalculationName_ReturnsBadRequest() { //Arrange CalculationGetModel model = new CalculationGetModel { SpecificationId = SpecificationId }; string json = JsonConvert.SerializeObject(model); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpRequest request = Substitute.For <HttpRequest>(); request .Body .Returns(stream); ILogger logger = CreateLogger(); SpecificationsService service = CreateService(logs: logger); //Act IActionResult result = await service.GetCalculationByName(request); //Assert result .Should() .BeOfType <BadRequestObjectResult>(); logger .Received(1) .Error(Arg.Is("No calculation name was provided to GetCalculationByName")); }
public async Task GetCalculationByName_GivenSpecificationExistsAndCalculationExists_ReturnsSuccess() { //Arrange CalculationVersion calculationVersion = new CalculationVersion { Name = CalculationName, Date = new DateTimeOffset(2013, 1, 2, 3, 4, 55, TimeSpan.Zero), }; Calculation calc = new Calculation { Current = calculationVersion }; CalculationGetModel model = new CalculationGetModel { SpecificationId = SpecificationId, Name = CalculationName }; ILogger logger = CreateLogger(); ICalculationsRepository calculationsRepository = CreateCalculationsRepository(); calculationsRepository .GetCalculationsBySpecificationIdAndCalculationName(Arg.Is(SpecificationId), Arg.Is(CalculationName)) .Returns(calc); CalculationService service = CreateCalculationService(calculationsRepository: calculationsRepository, logger: logger); //Act IActionResult result = await service.GetCalculationByName(model); //Assert result .Should() .BeOfType <OkObjectResult>() .Which .Value .Should() .BeEquivalentTo(new CalculationResponseModel() { Name = CalculationName, SourceCode = "Return 0", LastUpdated = new DateTimeOffset(2013, 1, 2, 3, 4, 55, TimeSpan.Zero), }); }
public async Task GetCalculationByName_GivenSpecificationExistsAndCalculationExists_ReturnsSuccess() { //Arrange Calculation calc = new Calculation { Name = CalculationName }; CalculationGetModel model = new CalculationGetModel { SpecificationId = SpecificationId, Name = CalculationName }; string json = JsonConvert.SerializeObject(model); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpRequest request = Substitute.For <HttpRequest>(); request .Body .Returns(stream); ILogger logger = CreateLogger(); ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); specificationsRepository .GetCalculationBySpecificationIdAndCalculationName(Arg.Is(SpecificationId), Arg.Is(CalculationName)) .Returns(calc); SpecificationsService service = CreateService(specificationsRepository: specificationsRepository, logs: logger); //Act IActionResult result = await service.GetCalculationByName(request); //Assert result .Should() .BeOfType <OkObjectResult>(); logger .Received(1) .Information(Arg.Is($"A calculation was found for specification id {SpecificationId} and name {CalculationName}")); }
public async Task GetCalculationByName_GivenModelDoesNotContainASpecificationId_ReturnsBadRequest() { //Arrange CalculationGetModel model = new CalculationGetModel(); ILogger logger = CreateLogger(); CalculationService service = CreateCalculationService(logger: logger); //Act IActionResult result = await service.GetCalculationByName(model); //Assert result .Should() .BeOfType <BadRequestObjectResult>(); logger .Received(1) .Error(Arg.Is("No specification id was provided to GetCalculationByName")); }
public async Task GetCalculationByName_GivenSpecificationExistsAndCalculationDoesNotExist_ReturnsNotFound() { //Arrange Calculation calc = new Calculation { Current = new CalculationVersion { Name = CalculationName } }; CalculationGetModel model = new CalculationGetModel { SpecificationId = SpecificationId, Name = CalculationName }; ILogger logger = CreateLogger(); ICalculationsRepository calculationsRepository = CreateCalculationsRepository(); calculationsRepository .GetCalculationsBySpecificationIdAndCalculationName(Arg.Is(SpecificationId), Arg.Is(CalculationName)) .Returns((Calculation)null); CalculationService service = CreateCalculationService(calculationsRepository: calculationsRepository, logger: logger); //Act IActionResult result = await service.GetCalculationByName(model); //Assert result .Should() .BeOfType <NotFoundResult>(); logger .Received(1) .Information(Arg.Is($"A calculation was not found for specification id {SpecificationId} and name {CalculationName}")); }
public async Task <IActionResult> GetCalculationByName([FromBody] CalculationGetModel model) => await _calcsService.GetCalculationByName(model);