public async Task Validate() { var invalidWidget = new WidgetDto(); var validWidget = new WidgetDto { Id = 1, Name = "one" }; var createdWidget = invalidWidget; var api = new DelegatingConformanceApi(async(_, _, _) => ServiceResult.Success <ServiceDto>(new CreateWidgetResponseDto { Widget = createdWidget })); (await api.CreateWidgetAsync(new CreateWidgetRequestDto { Widget = invalidWidget })).Should().BeSuccess(); var validatingApi = new DelegatingConformanceApi(ServiceDelegators.Validate(api)); (await validatingApi.CreateWidgetAsync(new CreateWidgetRequestDto { Widget = invalidWidget })).Should().BeFailure(ServiceErrors.InvalidRequest); (await validatingApi.CreateWidgetAsync(new CreateWidgetRequestDto { Widget = validWidget })).Should().BeFailure(ServiceErrors.InvalidResponse); createdWidget = validWidget; (await validatingApi.CreateWidgetAsync(new CreateWidgetRequestDto { Widget = invalidWidget })).Should().BeFailure(ServiceErrors.InvalidRequest); (await validatingApi.CreateWidgetAsync(new CreateWidgetRequestDto { Widget = validWidget })).Should().BeSuccess(); }
public async Task CreateWidget_Test() { // Act var pageDto = new PageDto { Title = "Lorem Ipsum is simply dummy text of the printing and typesetting", CreationTime = Clock.Now, PageType = Domain.PageType.Page }; var resultPage = await CreatePage(pageDto); var widgetDto = new WidgetDto { Content = "Hello", WidgetType = WidgetType.Paragraph, PageId = resultPage.Id, ParentId = null, Position = Position.Center, SizeType = SizeType._100, Order = 1 }; var widgetId = await _widgetAppService.Save(widgetDto); var widget = await _widgetAppService.Get(widgetId); // Assert widget.ShouldNotBeNull(); widget.Content.ShouldBe("Hello"); widget.PageId.ShouldBe(resultPage.Id); }
public async Task <WidgetDto> CreateWidget(WidgetDto dto) { var entity = new Domain.Widget() { Text = dto.Text, Width = dto.Width, Height = dto.Height }; // user initiated transaction with retry strategy set needs to execute in new strategy var strategy = db.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { // need a transaction and 2 savechanges so that I have the id for the widget in the event using (var tx = await db.Database.BeginTransactionAsync().ConfigureAwait(false)) { try { db.Widgets.Add(entity); await db.SaveChangesAsync().ConfigureAwait(false); var @event = new WidgetStageChangedEvent() { WidgetId = entity.WidgetId, Text = entity.Text, Width = entity.Width, Height = entity.Height, Timestamp = DateTime.UtcNow }; await publisher.PublishAsync(@event).ConfigureAwait(false); await db.SaveChangesAsync().ConfigureAwait(false); await tx.CommitAsync().ConfigureAwait(false); } catch (Exception ex) { logger.LogError(ex, "unhandled exception"); await tx.RollbackAsync().ConfigureAwait(false); throw; } } }); return(ToWidgetDto(entity)); }
public async Task Create_Home_Page_Test() { // Act var page = new PageDto { Title = "Lorem Ipsum is simply dummy text of the printing and typesetting", CreationTime = Clock.Now, PageType = PageType.Page, IsDeleted = false, IsHomePage = true }; page = await CreatePage(page); var widget = new WidgetDto { Content = "Welcome!", PageId = page.Id, Order = 0, Position = Domain.Enum.Position.Left, SizeType = Domain.Enum.SizeType._100, WidgetType = Domain.Enum.WidgetType.Paragraph }; await _widgetAppService.Save(widget); var result = await _sitePageAppService.GetHomePage(); // Assert result.ShouldNotBeNull(); result.Widgets.Count.ShouldBe(1); result.Widgets.First().Content.ShouldBe("Welcome!"); }
public async Task DeleteWidget_Test() { // Act var pageDto = new PageDto { Title = "Lorem Ipsum is simply dummy text of the printing and typesetting", CreationTime = Clock.Now, PageType = Domain.PageType.Page, IsDeleted = false, IsHomePage = true }; var resultPage = await CreatePage(pageDto); var widgetDto = new WidgetDto { Content = "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s", WidgetType = WidgetType.Paragraph, PageId = resultPage.Id, ParentId = null, Position = Position.Center, SizeType = SizeType._100, Order = 1 }; var widgetId = await _widgetAppService.Save(widgetDto); await _widgetAppService.Delete(widgetId); // Asseert (await _widgetAppService.GetAll()).Count().ShouldBe(0); }
public async Task UpdateWidget_Test() { // Act await CreateWidget_Test(); var widgets = await _widgetAppService.GetAll(); var widgetDto = widgets.First(); var widgetSaveDto = new WidgetDto { Id = widgetDto.Id, PageId = widgetDto.PageId, SizeType = SizeType._66 }; var resultId = await _widgetAppService.Save(widgetSaveDto); var widgetUpdated = await _widgetAppService.Get(resultId); // Assert widgetUpdated.SizeType.ShouldBe(SizeType._66); }
public async Task CreateParentChildWidgets_Test() { // Act var pageDto = new PageDto { Title = "Lorem Ipsum is simply dummy text of the printing and typesetting", CreationTime = Clock.Now, PageType = Domain.PageType.Page, IsDeleted = false, IsHomePage = true }; var resultPage = await CreatePage(pageDto); var parentWidget = new WidgetDto { WidgetType = WidgetType.Container, PageId = resultPage.Id, ParentId = null, Position = Position.Right, SizeType = SizeType._50 }; var parentWidgetId = await _widgetAppService.Save(parentWidget); parentWidget = await _widgetAppService.Get(parentWidgetId); var widgets = new List <WidgetDto> { parentWidget, new WidgetDto { Content = "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s", WidgetType = WidgetType.Paragraph, PageId = resultPage.Id, ParentId = parentWidget.Id, Position = Position.Center, SizeType = SizeType._25 }, new WidgetDto { Content = "<p>MRP</p>", WidgetType = WidgetType.Html, PageId = resultPage.Id, ParentId = parentWidget.Id, Position = Position.Right, SizeType = SizeType._50 } }; await _widgetAppService.SaveList(resultPage.Id, widgets); var result = await _widgetAppService.GetAll(); // Assert result.Count().ShouldBeGreaterThan(1); result.Count(x => x.ParentId != null).ShouldBe(2); }
public async Task CreateWidget_Uses201() { var httpClient = TestUtility.CreateTestHttpClient(); var widget = new WidgetDto(); var response = await httpClient.PostAsync("http://local.example.com/v1/widgets", JsonHttpContentSerializer.Instance.CreateHttpContent(widget)); response.StatusCode.Should().Be(HttpStatusCode.Created); (await JsonHttpContentSerializer.Instance.ReadHttpContentAsync <WidgetDto>(response.Content)).Value.Id.Should().NotBeNull(); }
public void ValidateWidgetNameLength() { var dto = new WidgetDto { Id = 1, Name = "ExcessivelyLongName" }; dto.Validate(out var errorMessage).Should().BeFalse(); errorMessage.Should().Be(ServiceDataUtility.GetInvalidFieldErrorMessage("name", "Length must be at most 10.")); }
public void ValidateWidgetNameMatchesPattern() { var dto = new WidgetDto { Id = 1, Name = "%%widget%%" }; dto.Validate(out var errorMessage).Should().BeFalse(); errorMessage.Should().Be(ServiceDataUtility.GetInvalidFieldErrorMessage("name", "Must match regular expression: ^[_a-zA-Z0-9]+$")); }
public async Task EmptyWidget_Success() { var service = TestUtility.CreateService(m_category); var widget = new WidgetDto(); var newWidget = (await service.CreateWidgetAsync(widget)).Value.Widget; newWidget.Id.Should().NotBeNull(); widget = new WidgetDto(id: newWidget.Id, name: widget.Name); newWidget.Should().BeDto(widget); }
public async Task <WidgetDto> CreateWidgetAsync(WidgetDto widget, CancellationToken cancellationToken) { var newWidget = widget != null?ServiceDataUtility.Clone(widget) : new WidgetDto(); newWidget.Id = Guid.NewGuid().ToString("N"); lock (m_lock) m_widgets.Add(newWidget.Id, newWidget); return(newWidget); }
public async Task <IActionResult> CreateWidget([FromBody] WidgetRequest input) { var dto = new WidgetDto() { Text = input.Text, Width = input.Width, Height = input.Height }; var widget = await service.CreateWidget(dto).ConfigureAwait(false); return(CreatedAtAction(nameof(GetWidget), new { id = widget.WidgetId }, widget)); }
public async Task <IActionResult> UpdateWidget(int id, WidgetRequest input) { var dto = new WidgetDto() { WidgetId = id, Text = input.Text, Width = input.Width, Height = input.Height }; var widget = await service.UpdateWidget(dto).ConfigureAwait(false); return(StatusCode((int)HttpStatusCode.NoContent, widget)); }
public async Task <GetWidgetsResponseDto> GetWidgetsAsync(GetWidgetsRequestDto request, CancellationToken cancellationToken) { IEnumerable <WidgetDto> widgets; if (request.Query == null) { lock (m_lock) widgets = m_widgets.Values.ToList(); } else if (request.Query.Length == 0) { widgets = new WidgetDto[0]; } else { lock (m_lock) widgets = m_widgets.Values.Where(x => x.Name.Contains(request.Query)).ToList(); } if (request.MinPrice != null) { widgets = m_widgets.Values.Where(x => x.Price >= request.MinPrice); } int total = widgets.Count(); Func <WidgetDto, string> keySelector; if (request.Sort == WidgetField.Name) { keySelector = x => x.Name; } else { keySelector = x => x.Id; } widgets = request.Desc.GetValueOrDefault() ? widgets.OrderByDescending(keySelector) : widgets.OrderBy(keySelector); if (request.Limit != null) { widgets = widgets.Take(Math.Max(0, request.Limit ?? 10)); } return(new GetWidgetsResponseDto { Widgets = widgets.ToList(), Total = total }); }
public async Task <WidgetDto> UpdateWidget(WidgetDto dto) { var entity = await db.Widgets.FirstOrDefaultAsync(w => w.WidgetId == dto.WidgetId).ConfigureAwait(false); entity.Text = dto.Text; entity.Width = dto.Width; entity.Height = dto.Height; var @event = new WidgetStageChangedEvent() { WidgetId = entity.WidgetId, Text = entity.Text, Width = entity.Width, Height = entity.Height, Timestamp = DateTime.UtcNow }; await publisher.PublishAsync(@event).ConfigureAwait(false); await db.SaveChangesAsync().ConfigureAwait(false); return(ToWidgetDto(entity)); }
public async Task Get_Page_By_URL_Test() { // Act var page = new PageDto { Title = "About us", CreationTime = Clock.Now, PageType = PageType.Page }; page = await CreatePage(page); var widget = new WidgetDto { Content = "Welcome!", PageId = page.Id, Order = 0, Position = Domain.Enum.Position.Left, SizeType = Domain.Enum.SizeType._100, WidgetType = Domain.Enum.WidgetType.Paragraph }; await _widgetAppService.Save(widget); var menu = new MenuDto { PageId = page.Id, Title = "About us", IsExternal = false, Url = "about-us" }; await _menuAppService.CreateAsync(menu); var result = await _sitePageAppService.GetPageByUrl("about-us"); // Assert result.Title.ShouldBe("About us"); result.Widgets.ShouldNotBeNull(); result.Widgets.First().Content.ShouldBe("Welcome!"); }