public async Task HandleShouldReturnOk() { // Arrange var id = Guid.NewGuid(); var sourceReadRepositoryMock = new Mock <ISourceReadRepository>(); sourceReadRepositoryMock.Setup(x => x.GetAsync(id)).Returns(Task.FromResult(new Source(id, "name", "description"))); var sourceReadRepository = sourceReadRepositoryMock.Object; var mapperMock = new Mock <IMapper>(); mapperMock.Setup(x => x.Map <SourceModel>(It.IsAny <object>())).Returns(new SourceModel()); var mapper = mapperMock.Object; var query = new GetSourceQuery(id); var handler = new GetSourceQueryHandler(mapper, sourceReadRepository); // Act var result = await handler.Handle(query, CancellationToken.None); // Assert result.IsFailure.Should().BeFalse(); result.Should().BeOfType(typeof(Result <SourceModel>)); }
public async Task HandleShouldReturnFailWhenDatabaseSpecificErrorOccurs() { // Arrange var id = Guid.NewGuid(); var sourceReadRepositoryMock = new Mock <ISourceReadRepository>(); sourceReadRepositoryMock.Setup(x => x.GetAsync(id)).Throws <SomeDatabaseSpecificException>(); var sourceReadRepository = sourceReadRepositoryMock.Object; var mapperMock = new Mock <IMapper>(); mapperMock.Setup(x => x.Map <SourceModel>(It.IsAny <object>())).Returns(new SourceModel()); var mapper = mapperMock.Object; var query = new GetSourceQuery(id); var handler = new GetSourceQueryHandler(mapper, sourceReadRepository); // Act var result = await handler.Handle(query, CancellationToken.None); // Assert result.IsFailure.Should().BeTrue(); result.Failures.Should().OnlyContain(x => x.Message == CustomFailures.GetSourceFailure); }
public async Task HandleShouldReturnFailWhenNotFound() { // Arrange var id = Guid.NewGuid(); var sourceReadRepositoryMock = new Mock <ISourceReadRepository>(); sourceReadRepositoryMock.Setup(x => x.GetAsync(id)).Throws <EntityNotFoundDbException>(); var sourceReadRepository = sourceReadRepositoryMock.Object; var mapperMock = new Mock <IMapper>(); mapperMock.Setup(x => x.Map <SourceModel>(It.IsAny <object>())).Returns(new SourceModel()); var mapper = mapperMock.Object; var query = new GetSourceQuery(id); var handler = new GetSourceQueryHandler(mapper, sourceReadRepository); // Act var result = await handler.Handle(query, CancellationToken.None); // Assert result.IsFailure.Should().BeTrue(); result.Failures.Should().OnlyContain(x => x.Code == HandlerFaultCode.NotFound.Name); }
public GetSourceQuery Map(GetSourceRequest request) { var id = new Guid(request.RouteId); var result = new GetSourceQuery(id); return(result); }
public void ShouldReturnNotFound_WhenPathIdNotFound() { var query = new GetSourceQuery() { PathId = 99999, ModuleId = 1, ThemeId = 1, Id = 1 }; FluentActions.Invoking(() => SendAsync(query)).Should().ThrowAsync <NotFoundException>(); }
public void ShouldContainNoErrors() { // Arrange var query = new GetSourceQuery(id: Guid.NewGuid()); // Act var validationResult = _validator.Validate(query); var exists = validationResult.Errors.Count > 0; // Assert exists.Should().BeFalse(); }
public async Task GetOne_ShouldReturnSource() { var path = await AddAsync( new Path { Title = "Some Path", Key = "some-path", Description = "Some Path Description" }); var module = await SendAsync(new CreateModule { Key = "module-key", Title = "New Module Module", Description = "New Module Description", Necessity = Necessity.MustKnow }); var theme = await AddAsync(new Theme { Title = "New Theme", ModuleId = module.Id, Description = "New Theme Description", Necessity = Necessity.MustKnow, Complexity = Complexity.Beginner, Order = 2 }); var source = await AddAsync(new Source { ThemeId = theme.Id, Title = "Source 1", Description = "Some description", Url = "https://source1.com", Order = 0, Type = SourceType.Documentation, Availability = Availability.Free, Relevance = Relevance.Relevant, Tags = new List <string> { "Tag1", "Tag2", "Tag3" } }); var query = new GetSourceQuery() { PathId = path.Id, ModuleId = module.Id, ThemeId = theme.Id, Id = source.Id }; var createdSource = await SendAsync(query); createdSource.Id.Should().Be(source.Id); createdSource.Title.Should().Be("Source 1"); createdSource.Description.Should().Be("Some description"); createdSource.Url.Should().Be("https://source1.com"); createdSource.Type.Should().Be(SourceType.Documentation); createdSource.ThemeId.Should().Be(theme.Id); createdSource.Tags.Should().HaveCount(3); }
public void ShouldHaveSourceNotFoundCustomFailureWhenIdIsGuidEmpty() { // Arrange var query = new GetSourceQuery(id: Guid.Empty); // Act var validationResult = _validator.Validate(query); var exists = validationResult.Errors.Any( a => a.PropertyName.Equals("Id") && a.ErrorMessage.Contains(CustomFailures.SourceNotFound)); // Assert exists.Should().BeTrue(); }
public void GetOne_ShouldThrow_WhenCanceled() { var cts = new CancellationTokenSource(); cts.Cancel(); var query = new GetSourceQuery() { PathId = 1, ModuleId = 1, ThemeId = 1, Id = 1 }; FluentActions.Invoking(() => SendAsync(query, cts.Token)).Should().ThrowAsync <TaskCanceledException>(); }