protected async Task <SearchResponse <EmailTemplate> > GetItemsAsync(EmailTemplateIndexRequest request, Expression <Func <EmailTemplate, bool> > whereClause)
        {
            var orderBy = GetOrderBy(request.SortColumn, request.IsDescending);
            var result  = await repository.GetPagedListAsync(request.Page, whereClause, orderBy);

            var response = new SearchResponse <EmailTemplate>(result.ToList(), result.TotalItemCount, result.PageSize);

            return(response);
        }
        protected override async Task <EmailTemplateIndexResponse> GetItemsAsync(EmailTemplateIndexRequest request)
        {
            var search = request.Search;

            Expression <Func <EmailTemplate, bool> > whereClause = r => search == null ||
                                                                   search == "" ||
                                                                   r.EmailLabel.Contains(search);

            var items = await GetItemsAsync(request, whereClause);

            return(new EmailTemplateIndexResponse(items.Items, items.RecordCount, items.RowsPerPage));
        }
        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);
        }
 public override async Task <ActionResult <EmailTemplateIndexResponse> > IndexWithParent([FromRoute] Guid parentId, EmailTemplateIndexRequest request)
 {
     return(await DoIndexAsync(parentId, request));
 }
 public override async Task <ActionResult <EmailTemplateIndexResponse> > Index([FromQuery] EmailTemplateIndexRequest request)
 {
     return(await DoIndexAsync(request));
 }