コード例 #1
0
        public async void OnPost_PublishEmptyRevision_VerifyServiceMethodIsNotCalledAndErrorMessageIsSetCorrectly()
        {
            //Arrange
            var poem            = new PoemBuilder().Default().Build();
            var poemDTO         = PoemDTO.CreateDTOFromEntity(poem);
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.GetPoemRevisions(poemDTO.Id))
            .Returns(new RevisionList());
            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name))
            .Returns(false);

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit = poemDTO;
            testModel.PoemToEdit.PublishedRevisionId = EditPoemModel.PUBLISH_NEW_REVISION;
            testModel.NewRevision = new RevisionDTO();
            await testModel.OnPostAsync();

            //Assert
            mockWriteService.Verify(w => w.UpdatePoem(It.IsAny <PoemDTO>()), Times.Never);

            var inputFieldName = nameof(testModel.PoemToEdit) + "." + nameof(testModel.PoemToEdit.PublishedRevisionId);

            AssertKeyInErrorState(testModel, inputFieldName);
            AssertErrorMessage(testModel, EditPoemModel.NEW_REVISION_EMPTY_MESSAGE);
        }
コード例 #2
0
        public async void OnPost_ValidInputsWithTitleAndBody_ExpectSaveToRepositories()
        {
            //Arrange
            var client = _appFactory.CreateAuthorizedClient();
            var form   = await GetNewPoemForm(client);

            var newPoem = new PoemBuilder().Random().Build();

            var inputs = CreateFormInputs(newPoem);

            //Act
            var response = await PostRequestHelper.PostWithUpdateInputsAsync(client, form, inputs);

            var selectors = new SelectorHelper(response, PageElements.NewPoemPageSelectors);

            //Assert
            var queryPoem  = _appFactory.DbContext.GetQueryable <Poem>();
            var poemResult = queryPoem.FirstOrDefault(p => p.Name == newPoem.Name);

            Assert.NotNull(poemResult);
            Assert.Equal(newPoem.Notes, poemResult.Notes);
            Assert.Equal(newPoem.ConceivedDateUTC.ToString("yyyy-MM-dd HH:mm"),
                         poemResult.ConceivedDateUTC.ToString("yyyy-MM-dd HH:mm"));

            var queryRevision  = _appFactory.DbContext.GetQueryable <PoemRevision>();
            var revisionResult = queryRevision.FirstOrDefault(r => r.Title == inputs["NewRevision.Title"]);

            Assert.NotNull(revisionResult);
            Assert.Equal(inputs["NewRevision.Body"], revisionResult.Body);
        }
コード例 #3
0
        public async void OnGet_DefaultPage_ReturnsPublishedPoemFromRepository()
        {
            //Arrange
            var client = _appFactory.CreateClient();
            var poems  = new PoemBuilder().Default().BuildCollection(size: 2);

            var publishedPoem     = poems.Last();
            var publishedRevision = publishedPoem.PoemRevisions.FirstOrDefault();

            publishedPoem.PublishedRevision = publishedRevision;

            var nonPublishedPoem = poems.FirstOrDefault();

            nonPublishedPoem.PublishedRevision = null;

            _appFactory.DbContext.AddRange(poems);
            _appFactory.DbContext.SaveChanges();

            //Act
            var response = await client.GetAsync("/");

            var pageContent = await ResponseHelper.GetDocumentAsync(response);

            var selectors = new SelectorHelper(pageContent, PageElements.IndexPageSelectors);

            var title = selectors.Get <IHtmlElement>((int)PageElements.IndexPageElementEnum.PoemTitle);
            var body  = selectors.Get <IHtmlElement>((int)PageElements.IndexPageElementEnum.PoemBody);

            //Assert
            Assert.NotNull(title);
            Assert.NotNull(body);
            Assert.Equal(publishedRevision.Title, title.TextContent);
            Assert.Equal(publishedRevision.Body, body.TextContent);
        }
コード例 #4
0
        public async void OnGet_ReturnsAllPublishedPoemTitleInAscOrder()
        {
            //Arrange
            var client = _appFactory.CreateClient();
            var poems  = new PoemBuilder().Random().BuildCollection(size: 2);

            poems.First().PublishedRevision = poems.First().PoemRevisions.FirstOrDefault();
            poems.Last().PublishedRevision  = poems.Last().PoemRevisions.FirstOrDefault();

            _appFactory.DbContext.AddRange(poems);
            _appFactory.DbContext.SaveChanges();

            //Act
            var response = await client.GetAsync("/ListPoemsByTitle");

            var pageContent = await ResponseHelper.GetDocumentAsync(response);

            var selectors = new SelectorHelper(pageContent, PageElements.ListPageSelectors);

            var links  = selectors.GetAll <IHtmlAnchorElement>((int)PageElements.ListPageElementEnum.PoemLink);
            var titles = selectors.GetAll <IHtmlElement>((int)PageElements.ListPageElementEnum.PoemTitle);

            //Assert
            var expectResults = poems.OrderBy(p => p.PublishedRevision.Title);

            Assert.Equal(expectResults.Count(), titles.Count());
            Assert.Equal(expectResults.Count(), links.Count());
            for (int n = 0; n < expectResults.Count(); n++)
            {
                Assert.Contains(expectResults.ElementAt(n).Id.ToString(),
                                links.ElementAt(n).Href);
                Assert.Equal(expectResults.ElementAt(n).PublishedRevision.Title,
                             titles.ElementAt(n).TextContent);
            }
        }
コード例 #5
0
        public async void OnPost_WithoutNewRevision_VerifyServiceMethodIsCalledAndConfirmationMessageIsSet()
        {
            //Arrange
            var poem            = new PoemBuilder().Default().Build();
            var poemDTO         = PoemDTO.CreateDTOFromEntity(poem);
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name))
            .Returns(false);

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            mockWriteService.Setup(w => w.SaveNewRevision(poemDTO.Id, It.IsAny <RevisionDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit  = poemDTO;
            testModel.NewRevision = new RevisionDTO();
            await testModel.OnPostAsync();

            //Assert
            mockWriteService.Verify(w => w.UpdatePoem(It.IsAny <PoemDTO>()), Times.Once);
            mockWriteService.Verify(w => w.SaveNewRevision(poemDTO.Id, It.IsAny <RevisionDTO>()), Times.Never);
            Assert.Equal(EditPoemModel.POEM_SAVED_MESSAGE, testModel.ConfirmationMessage);
        }
コード例 #6
0
        public async void OnGet_ExpectPoemDisplayed()
        {
            //Arrange
            var client = _appFactory.CreateClient();
            var poems  = new PoemBuilder().Default().BuildCollection(size: 2);

            var poemToGet         = poems.Last();
            var publishedRevision = poemToGet.PoemRevisions.FirstOrDefault();

            poemToGet.PublishedRevision = publishedRevision;

            _appFactory.DbContext.AddRange(poems);
            _appFactory.DbContext.SaveChanges();

            //Act
            var response = await client.GetAsync("/Poem?id=" + poemToGet.Id.ToString());

            var pageContent = await ResponseHelper.GetDocumentAsync(response);

            var selectors = new SelectorHelper(pageContent, PageElements.PoemPageSelectors);

            var title = selectors.Get <IHtmlElement>((int)PageElements.PoemPageElementEnum.PoemTitle);
            var body  = selectors.Get <IHtmlElement>((int)PageElements.PoemPageElementEnum.PoemBody);

            //Assert
            Assert.NotNull(title);
            Assert.NotNull(body);
            Assert.Equal(publishedRevision.Title, title.TextContent);
            Assert.Equal(publishedRevision.Body, body.TextContent);
        }
コード例 #7
0
        public async void OnPost_PublishNewRevision_NewRevisionNotSaved_VerifyServiceMethodIsNotCalledAndErrorMessageIsSetCorrectly()
        {
            //Arrange
            var poem        = new PoemBuilder().Default().Build();
            var poemDTO     = PoemDTO.CreateDTOFromEntity(poem);
            var revisionDTO = RevisionDTO.CreateDTOFromEntity(poem.PoemRevisions.FirstOrDefault());

            revisionDTO.Id = Guid.NewGuid();
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name))
            .Returns(false);
            mockReadService.Setup(r => r.GetLatestPoemRevision(poemDTO.Id))
            .Returns(new RevisionDTO());

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            mockWriteService.Setup(w => w.SaveNewRevision(poemDTO.Id, It.IsAny <RevisionDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit = poemDTO;
            testModel.PoemToEdit.PublishedRevisionId = EditPoemModel.PUBLISH_NEW_REVISION;
            testModel.NewRevision = revisionDTO;

            //Assert
            await Assert.ThrowsAsync <ApplicationException>(() => testModel.OnPostAsync());
        }
コード例 #8
0
        public void OnGet_WithRevision_ExpectCorrectValuesInProperties()
        {
            //Arrange
            var poem            = new PoemBuilder().Default().Build();
            var poemDTO         = PoemDTO.CreateDTOFromEntity(poem);
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.GetPoemById(poemDTO.Id))
            .Returns(poemDTO);

            var revisions = new RevisionBuilder(poem).Default().BuildCollection(size: 2);

            revisions.First().CreatedDateUTC = DateTime.UtcNow.AddDays(-2);
            revisions.Last().CreatedDateUTC  = DateTime.UtcNow.AddDays(-1);
            var revisionList = new RevisionList(revisions);

            mockReadService.Setup(r => r.GetPoemRevisions(poemDTO.Id))
            .Returns(revisionList);

            var mockWriteService = new Mock <IWritePoemService>();
            var testModel        = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.OnGet(poemDTO.Id);

            //Assert
            Assert.Equal(poemDTO, testModel.PoemToEdit);
            Assert.Equal(revisionList, testModel.PastRevisions);
            var latestRevision = revisionList.OrderByDescending(r => r.CreatedDateLocal).First();

            Assert.Equal(latestRevision, testModel.LatestRevision);
        }
コード例 #9
0
        public async void OnPost_NameConflict_VerifyServiceMethodIsNotCalledAndErrorMessageIsSetCorrectly()
        {
            var newName = "new name";
            //Arrange
            var poem            = new PoemBuilder().Default().Build();
            var poemDTO         = PoemDTO.CreateDTOFromEntity(poem);
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.GetPoemRevisions(poemDTO.Id))
            .Returns(new RevisionList());
            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, newName))
            .Returns(true);

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit      = poemDTO;
            testModel.PoemToEdit.Name = newName;
            await testModel.OnPostAsync();

            //Assert
            mockWriteService.Verify(w => w.UpdatePoem(It.IsAny <PoemDTO>()), Times.Never);

            var inputFieldName = nameof(testModel.PoemToEdit) + "." + nameof(testModel.PoemToEdit.Name);

            AssertKeyInErrorState(testModel, inputFieldName);
            AssertErrorMessage(testModel, EditPoemModel.NAME_CONFLICT_MESSAGE);
        }
コード例 #10
0
        public async void OnPost_AllFieldsModified_ExpectChangesSavedToRepository()
        {
            //Arrange
            var poem = new PoemBuilder().Default().Build();

            poem.PublishedRevision = null;
            var client = CreateClientAndTestData(poem);
            var form   = await GetInputFormAsync(client, poem.Id);

            var modifiedPoemDTO = PoemDTO.CreateDTOFromEntity(poem);

            modifiedPoemDTO.Name  = "Updated " + poem.Name;
            modifiedPoemDTO.Notes = poem.Notes + " and more notes";
            modifiedPoemDTO.ConceivedDateLocal  = poem.ConceivedDateUTC.ToLocalTime().AddDays(-1);
            modifiedPoemDTO.PublishedRevisionId = poem.PoemRevisions.FirstOrDefault().Id;

            var newRevision    = new RevisionBuilder(poem).Random().Build();
            var newRevisionDTO = RevisionDTO.CreateDTOFromEntity(newRevision);
            var inputs         = CreateFormInputs(modifiedPoemDTO, newRevisionDTO);

            //Act
            var response = await PostRequestHelper.PostWithUpdateInputsAsync(client, form, inputs);

            //Assert
            var revisionList = new RevisionList(poem.PoemRevisions.Append(newRevision));

            AssertEditPoemPage(response, modifiedPoemDTO, revisionList);
        }
コード例 #11
0
        public async void OnPost_InvalidModelState_VerifyServiceMethodIsNotCalled()
        {
            //Arrange
            var poem            = new PoemBuilder().Default().Build();
            var poemDTO         = PoemDTO.CreateDTOFromEntity(poem);
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.GetPoemRevisions(poemDTO.Id))
            .Returns(new RevisionList());
            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name));

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit = poemDTO;
            testModel.ModelState.AddModelError("test", "invalid state");
            await testModel.OnPostAsync();

            //Assert
            mockReadService.Verify(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name), Times.Never);
            mockWriteService.Verify(w => w.UpdatePoem(It.IsAny <PoemDTO>()), Times.Never);
        }
コード例 #12
0
        public async void OnPost_PublishNewRevision_VerifyServiceMethodIsCalledAndConfirmationMessageIsSet()
        {
            //Arrange
            var poem        = new PoemBuilder().Default().Build();
            var poemDTO     = PoemDTO.CreateDTOFromEntity(poem);
            var revisionDTO = RevisionDTO.CreateDTOFromEntity(poem.PoemRevisions.FirstOrDefault());

            revisionDTO.Id = Guid.NewGuid();
            var mockReadService = new Mock <IReadPoemService>();

            mockReadService.Setup(r => r.IsNameUsedByOtherPoem(poemDTO.Id, poemDTO.Name))
            .Returns(false);
            mockReadService.Setup(r => r.GetLatestPoemRevision(poemDTO.Id))
            .Returns(revisionDTO);

            var mockWriteService = new Mock <IWritePoemService>();

            mockWriteService.Setup(w => w.UpdatePoem(It.IsAny <PoemDTO>()));
            mockWriteService.Setup(w => w.SaveNewRevision(poemDTO.Id, It.IsAny <RevisionDTO>()));
            var testModel = new EditPoemModel(mockReadService.Object, mockWriteService.Object);

            //Act
            testModel.PoemToEdit = poemDTO;
            testModel.PoemToEdit.PublishedRevisionId = EditPoemModel.PUBLISH_NEW_REVISION;
            testModel.NewRevision = revisionDTO;
            await testModel.OnPostAsync();

            //Assert
            mockReadService.Verify(r => r.GetLatestPoemRevision(poemDTO.Id), Times.Once);
            mockWriteService.Verify(w => w.UpdatePoem(testModel.PoemToEdit), Times.Once);
            mockWriteService.Verify(w => w.SaveNewRevision(poemDTO.Id, revisionDTO), Times.Once);
            Assert.Equal(EditPoemModel.POEM_SAVED_MESSAGE, testModel.ConfirmationMessage);
        }
コード例 #13
0
        public void NoMatch_ExpectNullReturned()
        {
            //Arrange
            var poems = new PoemBuilder().Default().BuildCollection(size: 3);

            //Act
            var spec       = new GetPoemAndPublishedRevisionByIdSpec(Guid.Empty);
            var testResult = poems.AsQueryable().FirstOrDefault(spec.Criteria);

            //Assert
            Assert.Null(testResult);
        }
コード例 #14
0
        public void NoMatch_ExpectNullReturned()
        {
            //Arrange
            var poems = new PoemBuilder().Default().BuildCollection(size: 3);

            //Act
            var spec       = new GetPoemByNameSpec("non exist poem");
            var testResult = poems.AsQueryable().FirstOrDefault(spec.Criteria);

            //Assert
            Assert.Null(testResult);
        }
コード例 #15
0
        public void MatchingId_ExpectAllRevisionsReturned()
        {
            //Arrange
            var poem          = new PoemBuilder().Default().Build();
            var poemRevisions = poem.PoemRevisions;

            //Act
            var spec       = new GetRevisionsSpec(poem.Id);
            var testResult = poemRevisions.AsQueryable().Where(spec.Criteria);

            //Assert
            Assert.Equal(poemRevisions, testResult);
        }
コード例 #16
0
        public void NoMatch_ExpectEmptyListReturned()
        {
            //Arrange
            var poem          = new PoemBuilder().Default().Build();
            var poemRevisions = poem.PoemRevisions;

            //Act
            var spec       = new GetRevisionsSpec(Guid.Empty);
            var testResult = poemRevisions.AsQueryable().Where(spec.Criteria);

            //Assert
            Assert.Equal(new List <PoemRevision>(), testResult);
        }
コード例 #17
0
        public void NoMatchingPublishedPoem_ExpectNullReturned()
        {
            //Arrange
            var poemList = new PoemBuilder().Default().BuildCollection(size: 2);

            poemList.FirstOrDefault().PublishedRevision = poemList.FirstOrDefault().PoemRevisions.FirstOrDefault();
            poemList.Last().PublishedRevision           = poemList.Last().PoemRevisions.FirstOrDefault();

            //Act
            var testResult = ApplySpecificationToList(poemList, Guid.Empty);

            //Assert
            Assert.Null(testResult);
        }
コード例 #18
0
        public void NoPublishedPoem_ExpectEmptyListReturned()
        {
            //Arrange
            var poemList = new PoemBuilder().Default().BuildCollection(size: 2);

            poemList.FirstOrDefault().PublishedRevision = null;
            poemList.Last().PublishedRevision           = null;

            //Act
            var testResult = ApplySpecificationToList(poemList);

            //Assert
            Assert.Empty(testResult);
        }
コード例 #19
0
        public void NonCaseSensitiveMatch_ExpectPoemReturned()
        {
            //Arrange
            var poems        = new PoemBuilder().Default().BuildCollection(size: 3).ToList();
            var expectResult = poems[1];

            //Act
            var spec       = new GetPoemByNameSpec(expectResult.Name.ToUpper());
            var testResult = poems.AsQueryable().FirstOrDefault(spec.Criteria);

            //Assert
            Assert.NotNull(testResult);
            Assert.Equal(expectResult.Id, testResult.Id);
        }
コード例 #20
0
        public void ExactMatch_ExpectPoemReturned()
        {
            //Arrange
            var poems        = new PoemBuilder().Default().BuildCollection(size: 3).ToList();
            var expectResult = poems[1];

            //Act
            var spec       = new GetPoemAndPublishedRevisionByIdSpec(expectResult.Id);
            var testResult = poems.AsQueryable().FirstOrDefault(spec.Criteria);

            //Assert
            Assert.NotNull(testResult);
            Assert.Equal(expectResult.Id, testResult.Id);
        }
コード例 #21
0
        public void HasMultiplePublishedPoems_ExpectAllReturnedAndTitleInAscOrder()
        {
            //Arrange
            var poemList = new PoemBuilder().Random().BuildCollection(size: 2);

            poemList.First().PublishedRevision = poemList.First().PoemRevisions.FirstOrDefault();
            poemList.Last().PublishedRevision  = poemList.Last().PoemRevisions.FirstOrDefault();

            //Act
            var testResult = ApplySpecificationToList(poemList);

            //Assert
            var expectResult = poemList.OrderBy(p => p.PublishedRevision.Title);

            Assert.Equal(expectResult, testResult);
        }
コード例 #22
0
        public void SinglePoem_ExpectListWithSamePoem()
        {
            //Arrange
            var poems        = new PoemBuilder().Default().BuildCollection(size: 1).ToList();
            var queryable    = poems.AsQueryable();
            var expectResult = poems;

            //Act
            var spec       = ListPoemsByLastModifiedDateSpec.CreateSpecification();
            var testResult = queryable.OrderByDescending(spec.OrderByDesc);

            //Assert
            Assert.Null(spec.Criteria);
            Assert.Null(spec.OrderBy);
            Assert.Equal(expectResult, testResult);
        }
コード例 #23
0
        public void MatchingPoemIsNotPublished_ExpectNullReturned()
        {
            //Arrange
            var poemList = new PoemBuilder().Default().BuildCollection(size: 2);

            poemList.FirstOrDefault().PublishedRevision = poemList.FirstOrDefault().PoemRevisions.FirstOrDefault();
            var poemToGet = poemList.Last();

            poemToGet.PublishedRevision = null;

            //Act
            var testResult = ApplySpecificationToList(poemList, poemToGet.Id);

            //Assert
            Assert.Null(testResult);
        }
コード例 #24
0
        public void NoMatch_ExpectNullReturned()
        {
            //Arrange
            var poem          = new PoemBuilder().Default().Build();
            var poemRevisions = poem.PoemRevisions;

            //Act
            var spec       = new GetLatestRevisionSpec(Guid.Empty);
            var testResult = poemRevisions.AsQueryable()
                             .Where(spec.Criteria)
                             .OrderByDescending(spec.OrderByDesc)
                             .FirstOrDefault();

            //Assert
            Assert.Null(testResult);
        }
コード例 #25
0
        public void CreateDTOFromEntity_ValidInput()
        {
            //Arrange
            var poemEntity = new PoemBuilder().Default().Build();

            poemEntity.PublishedRevision = poemEntity.PoemRevisions.FirstOrDefault();

            //Act
            var poemDTO = PoemDTO.CreateDTOFromEntity(poemEntity);

            //Assert
            Assert.NotNull(poemDTO);
            Assert.Equal(poemEntity.Id, poemDTO.Id);
            Assert.Equal(poemEntity.PublishedRevision.Title, poemDTO.Title);
            Assert.Equal(poemEntity.PublishedRevision.Body, poemDTO.Body);
        }
コード例 #26
0
        public async void OnGet_WithPublishedRevision_VerifyHtmlElements()
        {
            //Arrange
            var poem = new PoemBuilder().Default().Build();

            poem.PoemRevisions     = new RevisionBuilder(poem).Random().BuildCollection(size: 3);
            poem.PublishedRevision = poem.PoemRevisions.FirstOrDefault();
            var client = CreateClientAndTestData(poem);

            //Act
            var response = await client.GetAsync("/EditPoem?Id=" + poem.Id.ToString());

            var pageContent = await ResponseHelper.GetDocumentAsync(response);

            var selectors = new SelectorHelper(pageContent, PageElements.EditPoemPageSelectors);

            //Assert
            var publishRevisionSelectList = selectors.Get <IHtmlSelectElement>
                                                ((int)PageElements.EditPoemElementEnum.PublishRevisionSelectList);
            var publishRevisionValidationMsg = selectors.Get <IHtmlElement>
                                                   ((int)PageElements.EditPoemElementEnum.PublishRevisionValidationMsg);
            var titleInput = selectors.Get <IHtmlInputElement>
                                 ((int)PageElements.EditPoemElementEnum.TitleInputField);
            var bodyInput = selectors.Get <IHtmlTextAreaElement>
                                ((int)PageElements.EditPoemElementEnum.BodyInputField);
            var pastRevisionSelectList = selectors.Get <IHtmlSelectElement>
                                             ((int)PageElements.EditPoemElementEnum.PastRevisionSelectList);

            Assert.NotNull(publishRevisionSelectList);
            Assert.NotNull(publishRevisionValidationMsg);
            Assert.NotNull(titleInput);
            Assert.NotNull(bodyInput);
            Assert.NotNull(pastRevisionSelectList);

            Assert.NotEmpty(publishRevisionSelectList.SelectedOptions);
            var selectedOption = publishRevisionSelectList.SelectedOptions.FirstOrDefault();

            Assert.Equal(poem.PublishedRevision.Id.ToString(), selectedOption.Value);

            var revisionList      = new RevisionList(poem.PoemRevisions);
            var publishedRevision = revisionList.Where(r => r.Id == poem.PublishedRevision.Id).FirstOrDefault();

            Assert.Equal(publishedRevision.DisplayName, selectedOption.Text);

            Assert.Equal(revisionList.Count + 2, publishRevisionSelectList.Length);
            Assert.Equal(revisionList.Count, pastRevisionSelectList.Length);
        }
コード例 #27
0
        public async void OnGet_WithoutRevision_VerifyHtmlElements()
        {
            //Arrange
            var poem = new PoemBuilder().Default().Build();

            poem.PublishedRevision = null;
            poem.PoemRevisions     = null;
            var client = CreateClientAndTestData(poem);

            //Act
            var response = await client.GetAsync("/EditPoem?Id=" + poem.Id.ToString());

            var pageContent = await ResponseHelper.GetDocumentAsync(response);

            var selectors = new SelectorHelper(pageContent, PageElements.EditPoemPageSelectors);

            //Assert
            var idInput = selectors.Get <IHtmlInputElement>
                              ((int)PageElements.EditPoemElementEnum.IdHiddenField);
            var nameInput = selectors.Get <IHtmlInputElement>
                                ((int)PageElements.EditPoemElementEnum.NameInputField);
            var nameValidationMsg = selectors.Get <IHtmlElement>
                                        ((int)PageElements.EditPoemElementEnum.NameValidationMsg);
            var notesInput = selectors.Get <IHtmlTextAreaElement>
                                 ((int)PageElements.EditPoemElementEnum.NotesInputField);
            var conceivedDateInput = selectors.Get <IHtmlInputElement>
                                         ((int)PageElements.EditPoemElementEnum.ConceivedDateInputField);
            var conceivedDateValidationMsg = selectors.Get <IHtmlElement>
                                                 ((int)PageElements.EditPoemElementEnum.ConceivedDateValidationMsg);
            var publishRevisionSelectList = selectors.Get <IHtmlSelectElement>
                                                ((int)PageElements.EditPoemElementEnum.PublishRevisionSelectList);

            Assert.NotNull(idInput);
            Assert.NotNull(nameInput);
            Assert.NotNull(nameValidationMsg);
            Assert.NotNull(notesInput);
            Assert.NotNull(conceivedDateInput);
            Assert.NotNull(nameValidationMsg);
            Assert.NotNull(publishRevisionSelectList);

            Assert.Equal(poem.Id.ToString(), idInput.Value);
            Assert.Equal(poem.Name, nameInput.Value);
            Assert.Equal(poem.Notes, notesInput.Value);
            Assert.Equal(poem.ConceivedDateUTC.ToLocalTime().ToString("yyyy-MM-dd"),
                         conceivedDateInput.Value);
            Assert.Empty(publishRevisionSelectList.SelectedOptions);
        }
コード例 #28
0
        public void HasPublishedPoem_ExpectPoemReturned()
        {
            //Arrange
            var poemList = new PoemBuilder().Default().BuildCollection(size: 2);

            poemList.FirstOrDefault().PublishedRevision = null;
            var publishedPoem = poemList.Last();

            publishedPoem.PublishedRevision = publishedPoem.PoemRevisions.FirstOrDefault();

            //Act
            var testResult   = ApplySpecificationToList(poemList);
            var returnedPoem = testResult.Single();

            //Assert
            Assert.Equal(publishedPoem.Id, returnedPoem.Id);
            Assert.Equal(publishedPoem.PublishedRevision.Title, returnedPoem.PublishedRevision.Title);
        }
コード例 #29
0
        public void HasMultiplePublishedPoems_ExpectAllReturnedAndModifiedDateInDescOrder()
        {
            //Arrange
            var poemList = new PoemBuilder().Random().BuildCollection(size: 2);

            poemList.First().PublishedRevision   = poemList.First().PoemRevisions.FirstOrDefault();
            poemList.First().LastModifiedDateUTC = DateTime.UtcNow.AddDays(-2);
            poemList.Last().PublishedRevision    = poemList.Last().PoemRevisions.FirstOrDefault();
            poemList.Last().LastModifiedDateUTC  = DateTime.UtcNow.AddDays(-1);

            //Act
            var testResult = ApplySpecificationToList(poemList);

            //Assert
            var expectResult = poemList.OrderByDescending(p => p.LastModifiedDateUTC);

            Assert.Equal(expectResult, testResult);
        }
コード例 #30
0
        public void PoemsWithDescModifiedDate_ExpectListOrderedDesc()
        {
            //Arrange
            var poems = new PoemBuilder().Default().BuildCollection(size: 3).ToList();

            poems[0].LastModifiedDateUTC = DateTime.UtcNow.AddDays(-1);
            poems[1].LastModifiedDateUTC = DateTime.UtcNow.AddDays(-2);
            poems[2].LastModifiedDateUTC = DateTime.UtcNow.AddDays(-3);
            var queryable    = poems.AsQueryable();
            var expectResult = poems;

            //Act
            var spec       = ListPoemsByLastModifiedDateSpec.CreateSpecification();
            var testResult = queryable.OrderByDescending(spec.OrderByDesc);

            //Assert
            Assert.Equal(expectResult, testResult);
        }