public async Task CanCreateAndPersistListing()
        {
            var listingFixture = new ListingFixture
            {
                Address        = "test street",
                AskingPrice    = 123,
                Description    = "A House",
                Expired        = false,
                NumberBedrooms = 2,
                PostCode       = "AA1 1AA"
            };
            var request = listingFixture.AsRequest();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Add(It.IsAny <Listing>())).Verifiable();
            mockContext.Setup(m => m.SaveChanges()).Verifiable();

            var mockValidator = new Mock <IListingValidatorHelper>();

            mockValidator.Setup(v => v.HasValidFields(It.IsAny <Listing>())).Returns(true).Verifiable();

            var coordinator = new CreateListingCoordinator(mockContext.Object, mockValidator.Object);

            var result = await coordinator.Create(request);

            mockContext.VerifyAll();
            mockValidator.VerifyAll();
            Assert.Equal(request.Address, result.Address);
            Assert.Equal(request.AskingPrice, result.AskingPrice);
            Assert.Equal(request.Description, result.Description);
            Assert.Equal(request.Expired, result.Expired);
            Assert.Equal(request.NumberBedrooms, result.NumberBedrooms);
            Assert.Equal(request.PostCode, result.PostCode);
        }
        public async Task CanUploadImageAndPersistAsExpected()
        {
            var bytes          = new byte[] { 1, 2, 3 };
            var imageMediaType = "image/jpg";
            var mockReturnUrl  = "someUrl";

            var listing1 = new ListingFixture().Build();
            var mockFindListingCoordinator = new Mock <IFindListingCoordinator>();

            mockFindListingCoordinator.Setup(m => m.Find(listing1.Id)).ReturnsAsync(listing1).Verifiable();

            var imageStoreMock = new Mock <IImageStore>();

            imageStoreMock.Setup(m => m.PersistArticleEntryMedia(It.IsAny <string>(), bytes, imageMediaType)).ReturnsAsync(mockReturnUrl).Verifiable();

            var mockDbContext = new Mock <IPortalDbContext>();

            mockDbContext.Setup(m => m.Add(It.IsAny <ListingImage>())).Verifiable();
            mockDbContext.Setup(m => m.SaveChanges()).Verifiable();

            var coordinator = new AddImagesCoordinator(imageStoreMock.Object, mockDbContext.Object, mockFindListingCoordinator.Object);

            var result = await coordinator.AddImage(listing1.Id, bytes, imageMediaType);

            mockFindListingCoordinator.VerifyAll();
            imageStoreMock.VerifyAll();
            mockDbContext.VerifyAll();

            Assert.Equal(result.ListingId, listing1.Id);
            Assert.Equal(result.Listing, listing1);
            Assert.Equal(result.Url, mockReturnUrl);
        }
Beispiel #3
0
        public async Task DoesNotSaveExistingListingIfFieldsAreDeemedInvalid()
        {
            var existingListing = new ListingFixture().Build();
            var editRequest     = new EditListingRequest
            {
                Address        = existingListing + "edit",
                AskingPrice    = existingListing.AskingPrice + 10m,
                Description    = existingListing.Description + "edit",
                Expired        = true,
                NumberBedrooms = existingListing.NumberBedrooms + 1,
                PostCode       = existingListing.PostCode + "edit"
            };

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Attach(existingListing)).Verifiable();

            var mockValidatorThatAlwaysFails = new Mock <IListingValidatorHelper>();

            mockValidatorThatAlwaysFails.Setup(v => v.HasValidFields(It.IsAny <Listing>())).Returns(false).Verifiable();

            var coordinator = new EditListingCoordinator(mockContext.Object, mockValidatorThatAlwaysFails.Object);
            var result      = await coordinator.Edit(existingListing.Id, existingListing, editRequest);

            mockValidatorThatAlwaysFails.VerifyAll();
            mockContext.VerifyAll();
            mockContext.Verify(m => m.SaveChanges(), Times.Never);
            Assert.Null(result);
        }
Beispiel #4
0
        public async Task AppliesEditsAndSavesExistingListing()
        {
            var existingListing = new ListingFixture().Build();
            var editRequest     = new EditListingRequest
            {
                Address        = existingListing + "edit",
                AskingPrice    = existingListing.AskingPrice + 10m,
                Description    = existingListing.Description + "edit",
                Expired        = true,
                NumberBedrooms = existingListing.NumberBedrooms + 1,
                PostCode       = existingListing.PostCode + "edit"
            };

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Attach(existingListing)).Verifiable();
            mockContext.Setup(m => m.SaveChanges()).Verifiable();

            var mockValidator = new Mock <IListingValidatorHelper>();

            mockValidator.Setup(v => v.HasValidFields(It.IsAny <Listing>())).Returns(true).Verifiable();

            var coordinator = new EditListingCoordinator(mockContext.Object, mockValidator.Object);
            var result      = await coordinator.Edit(existingListing.Id, existingListing, editRequest);

            mockContext.VerifyAll();
            mockValidator.VerifyAll();
            Assert.Equal(editRequest.Address, existingListing.Address);
            Assert.Equal(editRequest.AskingPrice, existingListing.AskingPrice);
            Assert.Equal(editRequest.Description, existingListing.Description);
            Assert.Equal(editRequest.Expired, existingListing.Expired);
            Assert.Equal(editRequest.NumberBedrooms, existingListing.NumberBedrooms);
            Assert.Equal(editRequest.PostCode, existingListing.PostCode);
        }
Beispiel #5
0
        public void ValidatesPostCodesAsExpected(string postCodeToValidate, bool expectedValid)
        {
            var listing = new ListingFixture {
                PostCode = postCodeToValidate
            }.Build();
            var result = new ListingValidatorHelper().HasValidFields(listing);

            Assert.Equal(expectedValid, result);
        }
        public async Task DoesNotPersistListingIfFieldsAreDeemedInvalid()
        {
            var invalidListing = new ListingFixture();
            var request        = invalidListing.AsRequest();
            var mockContext    = new Mock <IPortalDbContext>();
            var mockValidatorThatAlwaysReturnsFalse = new Mock <IListingValidatorHelper>();

            mockValidatorThatAlwaysReturnsFalse.Setup(v => v.HasValidFields(It.IsAny <Listing>())).Returns(false).Verifiable();

            var coordinator = new CreateListingCoordinator(mockContext.Object, mockValidatorThatAlwaysReturnsFalse.Object);

            var result = await coordinator.Create(request);

            mockValidatorThatAlwaysReturnsFalse.VerifyAll();
            mockContext.Verify(m => m.Add(It.IsAny <Listing>()), Times.Never);
            mockContext.Verify(m => m.SaveChanges(), Times.Never);
            Assert.Null(result);
        }
        public void QueriesContextToRetrieveAllListings()
        {
            var listing1 = new ListingFixture().Build();
            var listing2 = new ListingFixture().Build();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Query <Listing>())
            .Returns(() => new[] { listing1, listing2 }.AsQueryable())
            .Verifiable();

            var coordinator = new GetAllListingsCoordinator(mockContext.Object);

            var result = coordinator.GetAllListings().ToArray();

            mockContext.VerifyAll();
            Assert.Contains(listing1, result);
            Assert.Contains(listing2, result);
        }
Beispiel #8
0
        public void ReturnsEmptyIfListingHasNoImages()
        {
            var listing1 = new ListingFixture().Build();
            var image1   = new ListingImageFixture().Build();
            var image2   = new ListingImageFixture().Build();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Query <ListingImage>())
            .Returns(() => new[] { image1, image2 }.AsQueryable())
            .Verifiable();

            var coordinator = new GetAllImagesCoordinator(mockContext.Object);

            var result = coordinator.GetAllImages(listing1.Id);

            mockContext.VerifyAll();
            Assert.Empty(result);
        }
Beispiel #9
0
        public async Task ReturnsNullWhenListingNotFound()
        {
            var listing1 = new ListingFixture().Build();

            var mockContextThatReturnsNoListings = new Mock <IPortalDbContext>();

            mockContextThatReturnsNoListings.Setup(m => m.Find <Listing>(It.IsAny <Guid>()))
            .Returns(async() =>
            {
                await Task.CompletedTask;
                return(null);
            })
            .Verifiable();

            var coordinator = new FindListingCoordinator(mockContextThatReturnsNoListings.Object);

            var result = await coordinator.Find(listing1.Id);

            mockContextThatReturnsNoListings.VerifyAll();
            Assert.Null(result);
        }
Beispiel #10
0
        public void FindsAllImagesThatBelongToAListing()
        {
            var listing1 = new ListingFixture().Build();
            var listing2 = new ListingFixture().Build();
            var image1   = new ListingImageFixture().ForListing(listing1).Build();
            var image2   = new ListingImageFixture().ForListing(listing2).Build();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Query <ListingImage>())
            .Returns(() => new[] { image1, image2 }.AsQueryable())
            .Verifiable();

            var coordinator = new GetAllImagesCoordinator(mockContext.Object);

            var result = coordinator.GetAllImages(listing1.Id);

            mockContext.VerifyAll();
            Assert.Contains(image1, result);
            Assert.DoesNotContain(image2, result);
        }
        public void DoesNotReturnExpiredListings()
        {
            var listing1       = new ListingFixture().Build();
            var expiredListing = new ListingFixture
            {
                Expired = true
            }.Build();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Query <Listing>())
            .Returns(() => new[] { listing1, expiredListing }.AsQueryable())
            .Verifiable();

            var coordinator = new GetAllListingsCoordinator(mockContext.Object);

            var result = coordinator.GetAllListings().ToArray();

            mockContext.VerifyAll();
            Assert.Contains(listing1, result);
            Assert.DoesNotContain(expiredListing, result);
        }
Beispiel #12
0
        public async Task CanRetrieveListingById()
        {
            var listing1 = new ListingFixture().Build();
            var listing2 = new ListingFixture().Build();

            var mockContext = new Mock <IPortalDbContext>();

            mockContext.Setup(m => m.Find <Listing>(listing1.Id))
            .Returns(async() =>
            {
                await Task.CompletedTask;
                return(listing1);
            })
            .Verifiable();

            var coordinator = new FindListingCoordinator(mockContext.Object);

            var result = await coordinator.Find(listing1.Id);

            mockContext.VerifyAll();
            Assert.Equal(listing1, result);
        }