public async Task <IActionResult> CreateTestScenario(string specificationId, [FromBody] ScenarioCreateViewModel vm) { Guard.ArgumentNotNull(specificationId, nameof(specificationId)); Guard.ArgumentNotNull(vm, nameof(vm)); if (!await _authorizationHelper.DoesUserHavePermission(User, specificationId, SpecificationActionTypes.CanCreateQaTests)) { return(new ForbidResult()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } CreateScenarioModel createScenario = _mapper.Map <CreateScenarioModel>(vm); createScenario.SpecificationId = specificationId; ApiResponse <TestScenario> result = await _scenariosClient.CreateTestScenario(createScenario); if (result.StatusCode == HttpStatusCode.OK) { return(Ok(result.Content)); } else { HttpStatusCode statusCode = result.StatusCode; _logger.Error("An error occurred while saving scenario. Status code from backend={statusCode} for specification {specificationId}", statusCode, specificationId); throw new InvalidOperationException($"An error occurred while saving scenario. Status code={result.StatusCode}"); } }
public async Task CreateTestScenario_WhenUserDoesHaveCreateQaTestPermission_ThenActionAllowed() { // Arrange string specificationId = "abc123"; IAuthorizationHelper authorizationHelper = Substitute.For <IAuthorizationHelper>(); authorizationHelper .DoesUserHavePermission(Arg.Any <ClaimsPrincipal>(), Arg.Is(specificationId), Arg.Is(SpecificationActionTypes.CanCreateQaTests)) .Returns(true); IScenariosApiClient scenariosClient = CreateScenariosClient(); scenariosClient .CreateTestScenario(Arg.Any <CreateScenarioModel>()) .Returns(new ApiResponse <TestScenario>(HttpStatusCode.OK, new TestScenario())); ScenarioController controller = CreateScenarioController(authorizationHelper: authorizationHelper, scenariosClient: scenariosClient); // Act IActionResult result = await controller.CreateTestScenario(specificationId, new ScenarioCreateViewModel()); // Assert result.Should().BeOfType <OkObjectResult>(); }