public static EmailTemplate ToEntity(this EmailTemplateEditCreateRequest dto)
 {
     return(new EmailTemplate
     {
         Id = dto.Id,
         EmailLabel = dto.Name
     });
 }
        public async Task EmailTemplateController_ShouldPerformCrudOperations()
        {
            const string EMAIL_LABEL         = "IntegrationTest Name";
            const string EMAIL_LABEL_UPDATED = "IntegrationTest Name Updated";
            Guid         defaultId           = default;

            //ensure no remnants of failed tests
            await EnsureNoCrudRemnants(EMAIL_LABEL);
            await EnsureNoCrudRemnants(EMAIL_LABEL_UPDATED);

            //CREATE
            var createEmailTemplateRequest = new EmailTemplateEditCreateRequest {
                Name = EMAIL_LABEL
            };
            var controller = classFactory.GetExport <EmailTemplateController>();

            var sutDetailsCreate = await controller.Create(createEmailTemplateRequest);

            sutDetailsCreate.GetStatusCode().ShouldBe(StatusCodes.Status201Created);

            var insertedItem   = sutDetailsCreate.GetValue();
            var insertedItemId = insertedItem.Id; //store id for future use

            insertedItemId.ShouldNotBe(defaultId);

            //DETAILS
            sutDetailsCreate = await controller.Details(insertedItemId);

            sutDetailsCreate.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            insertedItem = sutDetailsCreate.GetValue();
            insertedItem.ShouldNotBeNull();
            insertedItem.EmailLabel.ShouldBe(EMAIL_LABEL);

            //EDIT
            var updateEmailTemplateRequest = new EmailTemplateEditCreateRequest
            {
                Id   = insertedItemId,
                Name = EMAIL_LABEL_UPDATED,
            };

            sutDetailsCreate = await controller.Edit(updateEmailTemplateRequest);

            sutDetailsCreate.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            //SUGGESTIONS
            var sutSuggestions = await controller.Suggestions(string.Empty);

            sutSuggestions.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            var suggestions = sutSuggestions.GetValue();

            suggestions.ShouldNotBeNull();
            suggestions.Count.ShouldBeGreaterThan(0);

            //INDEX
            var sutIndex = await controller.Index(null);

            sutIndex.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            var pagedRows = sutIndex.GetValue();

            pagedRows.ShouldNotBeNull();
            pagedRows.Items.Count.ShouldBeGreaterThan(0);

            //DELETE
            var sutDelete = await controller.Delete(insertedItemId, "Integration Test");

            sutDelete.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            //Retest after Delete
            //INDEX search deleted row
            var indexRequest = new EmailTemplateIndexRequest {
                Search = EMAIL_LABEL_UPDATED
            };

            sutIndex = await controller.Index(indexRequest);

            sutIndex.GetStatusCode().ShouldBe(StatusCodes.Status200OK);

            pagedRows = sutIndex.GetValue();

            pagedRows.ShouldNotBeNull();

            var rowCountAfterDelete = pagedRows.Items.Count;

            rowCountAfterDelete.ShouldBe(0);

            // Validate the the row has been deleted
            sutDetailsCreate = await controller.Details(insertedItemId);

            sutDetailsCreate.GetStatusCode().ShouldBe(StatusCodes.Status404NotFound);

            var deletedItem = sutDetailsCreate.GetValue();

            deletedItem.ShouldBeNull();

            await EnsureNoCrudRemnants(EMAIL_LABEL);
            await EnsureNoCrudRemnants(EMAIL_LABEL_UPDATED);
        }
        protected override async Task <EmailTemplateDetailsCreateResponse> AddItemAsync(EmailTemplateEditCreateRequest request)
        {
            var entity = request.ToEntity();

            entity.Id = Guid.NewGuid();

            var newEntity = await repository.AddAsync(entity);

            return(newEntity.ToDto());
        }
        protected override async Task <EmailTemplateDetailsCreateResponse> EditItemAsync(EmailTemplateEditCreateRequest request)
        {
            var entity = request.ToEntity();

            await repository.UpdateAsync(entity);

            return(entity.ToDto());
        }
 public override async Task <ActionResult> Edit([FromBody] EmailTemplateEditCreateRequest request)
 {
     return(await DoEditAsync(request));
 }
 public override async Task <ActionResult <EmailTemplateDetailsCreateResponse> > Create([FromBody] EmailTemplateEditCreateRequest request)
 {
     return(await DoCreateAsync(request));
 }