Пример #1
0
    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();
    }
Пример #2
0
        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));
        }
Пример #4
0
        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!");
        }
Пример #5
0
        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);
        }
Пример #6
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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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]+$"));
    }
Пример #11
0
        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));
        }
Пример #17
0
        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!");
        }