public void GivenACurrentReaRentalFileAndAnExistingListing_Parse_ReturnsTheUpdatedListing() { // Arrange. var existingListing = FakeListings.CreateAFakeRentalListing(); existingListing.Pricing.RentalPrice = 444; existingListing.Pricing.RentalPriceText = Guid.NewGuid().ToString(); existingListing.Title = Guid.NewGuid().ToString(); existingListing.Description = Guid.NewGuid().ToString(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Rental-Current.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); var newListing = reaXmlTransmorgrifier.Parse(reaXml) .Listings .First() .Listing as RentalListing; // Arrange. var result = reaXmlTransmorgrifier.Parse(reaXml, existingListing); // Assert. var listing = result.Listings.First().Listing as RentalListing; listing.StatusType.ShouldBe(existingListing.StatusType); listing.Pricing.RentalPrice.ShouldBe(newListing.Pricing.RentalPrice); listing.Pricing.RentalPriceText.ShouldBe(newListing.Pricing.RentalPriceText); listing.Title.ShouldBe(newListing.Title); listing.Description.ShouldBe(newListing.Description); }
protected IList <Listing> CreateListings(Type listingType, int numberOfFakeListings) { if (listingType == typeof(ResidentialListing)) { return(FakeListings.CreateFakeListings <ResidentialListing>(numberOfFakeListings) .Cast <Listing>() .ToList()); } if (listingType == typeof(RentalListing)) { return(FakeListings.CreateFakeListings <RentalListing>(numberOfFakeListings) .Cast <Listing>() .ToList()); } if (listingType == typeof(LandListing)) { return(FakeListings.CreateFakeListings <LandListing>(numberOfFakeListings) .Cast <Listing>() .ToList()); } if (listingType == typeof(RuralListing)) { return(FakeListings.CreateFakeListings <RuralListing>(numberOfFakeListings) .Cast <Listing>() .ToList()); } throw new Exception($"Failed to assert the suggested type: '{listingType}'."); }
[InlineData(50, 10, 3, 7)] // #50 is not included. public void GivenTheRequirementToCreateSomeFakeListings_CreateFakeListings_ReturnsSomeListings(int numberOfListings, int numberOfActive, int numberOfSold, int numberOfRemoved) { // Arrange const int defaultNumberOfFixedListings = 20; //Act. var listings = FakeListings.CreateFakeListings <ResidentialListing>(numberOfListings) .Take(defaultNumberOfFixedListings) .ToArray(); // Assert. if (numberOfListings > defaultNumberOfFixedListings) { listings.Length.ShouldBe(defaultNumberOfFixedListings); } else { listings.Length.ShouldBe(numberOfListings); } listings.Count(x => x.StatusType == StatusType.Available).ShouldBe(numberOfActive); listings.Count(x => x.StatusType == StatusType.Sold).ShouldBe(numberOfSold); listings.Count(x => x.StatusType == StatusType.Leased).ShouldBe(0); // Can never have a leased residential listing. listings.Count(x => x.StatusType == StatusType.Removed).ShouldBe(numberOfRemoved); }
GivenTheFileREAResidentialCurrent_ParseThenSerializeThenDeserialize_ReturnsAResidentialAvailableListing(string fileName, bool isFloorPlansCleared, StatusType statusType) { // Arrange. ResidentialListing expectedListing; if (statusType == StatusType.Available) { expectedListing = FakeListings.CreateAFakeResidentialListing(); } else { expectedListing = CreateAFakeEmptyResidentialListing("Residential-Sold-ABCD1234"); expectedListing.StatusType = StatusType.Sold; expectedListing.SourceStatus = "sold"; expectedListing.Pricing = new SalePricing { SoldOn = new DateTime(2009, 1, 10, 12, 30, 00), SoldPrice = 580000M, SoldPriceText = "$580,000" }; } if (isFloorPlansCleared) { expectedListing.FloorPlans = new List <Media>(); } var reaXml = File.ReadAllText(FakeDataFolder + fileName); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Parse the xml, once for the first time. var tempResult = reaXmlTransmorgrifier.Parse(reaXml); var source = tempResult.Listings.First().Listing; var json = source.SerializeObject(); // Act. var result = JsonConvertHelpers.DeserializeObject(json); // Assert. var listingResult = new ListingResult { Listing = result, SourceData = "blahblah" }; var parsedResult = new ParsedResult { Listings = new List <ListingResult> { listingResult }, UnhandledData = new List <string>(), Errors = new List <ParsedError>(), TransmorgrifierName = "REA" }; AssertResidentialListing(parsedResult, expectedListing); }
public void GivenASpecificListingWithAllUtcDates_CreateAFakeListing_HasAllUtcDates(Type type) { // Arrange & Act. var listing = type == typeof(ResidentialListing) ? FakeListings.CreateAFakeListing <ResidentialListing>() : type == typeof(RentalListing) ? FakeListings.CreateAFakeListing <RentalListing>() : type == typeof(LandListing) ? FakeListings.CreateAFakeListing <LandListing>() : (Listing)FakeListings.CreateAFakeListing <RuralListing>(); // Assert. listing.ShouldNotBeNull(); listing.CreatedOn.Kind.ShouldBe(DateTimeKind.Utc); listing.UpdatedOn.Kind.ShouldBe(DateTimeKind.Utc); foreach (var inspection in listing.Inspections) { inspection.OpensOn.Kind.ShouldBe(DateTimeKind.Utc); inspection.ClosesOn.Value.Kind.ShouldBe(DateTimeKind.Utc); } if (listing is RentalListing rentalListing) { rentalListing.AvailableOn.Value.Kind.ShouldBe(DateTimeKind.Utc); if (rentalListing.Pricing.RentedOn.HasValue) { rentalListing.Pricing.RentedOn.Value.Kind.ShouldBe(DateTimeKind.Utc); } } if ((listing is ISalePricing salePricing) && (salePricing.Pricing.SoldOn.HasValue)) { salePricing.Pricing.SoldOn.Value.Kind.ShouldBe(DateTimeKind.Utc); } if (listing is IAuctionOn auctionOn) { auctionOn.AuctionOn.Value.Kind.ShouldBe(DateTimeKind.Utc); } if (listing.Images.Any()) { listing.Images.ShouldAllBe(x => x.CreatedOn.Value.Kind == DateTimeKind.Utc); } if (listing.FloorPlans.Any()) { listing.FloorPlans.ShouldAllBe(x => x.CreatedOn.Value.Kind == DateTimeKind.Utc); } if (listing.Documents.Any()) { listing.Documents.ShouldAllBe(x => x.CreatedOn.Value.Kind == DateTimeKind.Utc); } }
public void GivenTheFileREAResidentialCurrentWithDuplicateAgents_Parse_ReturnsAResidentialAvailableListing() { // Arrange. var agents = new List <Agent> { new Agent { Name = "Princess Leia", Order = 1, Communications = new List <Communication> { new Communication { CommunicationType = CommunicationType.Email, Details = "*****@*****.**" }, new Communication { CommunicationType = CommunicationType.Mobile, Details = "1234 1234" } } }, new Agent { Name = "Han Solo", Order = 2, Communications = new List <Communication> { new Communication { CommunicationType = CommunicationType.Email, Details = "*****@*****.**" }, new Communication { CommunicationType = CommunicationType.Mobile, Details = "0987 0987" } } } }; var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Agents = agents; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithDuplicateAgents.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenSomeJsonOfAnArrayOfListings_DeserializeObject_ReturnsACollectionOfListings() { // Arrange. var listings = FakeListings.CreateFakeListings <ResidentialListing>(); var json = listings.SerializeObject(); // Act. var convertedListings = JsonConvertHelpers.DeserializeObjects(json); // Assert. convertedListings.Count().ShouldBe(listings.Count()); }
public void GivenSomeJsonOfASingleListing_DeserializeObjectToAbstractListing_ReturnsAListing() { // Arrange. var listing = FakeListings.CreateAFakeListing <ResidentialListing>(); var json = listing.SerializeObject(); // Act. var convertedListing = JsonConvertHelpers.DeserializeObject <Listing>(json); // Assert. convertedListing.Id.ShouldBe(listing.Id); }
public void GivenSomeListings_SerializeObject_ReturnsSomeJson() { // Arrange. var listings = FakeListings.CreateFakeListings <ResidentialListing>(); // Act. var json = listings.SerializeObject(); // Assert. json.ShouldStartWith("["); json.ShouldEndWith("]"); json.Length.ShouldBeGreaterThan(2); }
public void GivenTheFileREAResidentialCurrent_Parse_ReturnsAResidentialAvailableListing(string fileName) { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); var reaXml = File.ReadAllText(FakeDataFolder + fileName); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenTheFileREAResidentialCurrentWithASingleAgentName_Parse_ReturnsAResidentialAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Agents[0].Communications = new List <Communication>(); // Remove all communications for this agent. var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithASingleAgentName.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenThatWeNeedAListing_CreateAFakeListing_ReturnsAListing(Type type) { // Arrange & Act. var listing = type == typeof(ResidentialListing) ? FakeListings.CreateAFakeListing <ResidentialListing>() : type == typeof(RentalListing) ? FakeListings.CreateAFakeListing <RentalListing>() : type == typeof(LandListing) ? FakeListings.CreateAFakeListing <LandListing>() : (Listing)FakeListings.CreateAFakeListing <RuralListing>(); // Assert. listing.ShouldNotBeNull(); listing.GetType().ShouldBe(type); }
public void GivenTheFileREARentalCurrentWithNoBond_Parse_ReturnsARentalAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeRentalListing(); expectedListing.Pricing.Bond = null; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Rental-Current-WithNoBond.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertRentalListing(result, expectedListing); }
public void GivenTheFileREAResidentialCurrentWithPriceAndDisplayYesButNoPriceView_Parse_ReturnsAListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Pricing.SalePriceText = "$500,000"; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithPriceAndDisplayYesButNoPriceView.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenTheFileREAResidentialCurrentMinimumAndAnExistingListing_Parse_ReturnsAResidentialAvailableListing() { // Arrange. var source = FakeListings.CreateAFakeResidentialListing(); var destination = FakeListings.CreateAFakeResidentialListing(); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-Minimum.xml"); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml, source); // Assert. AssertResidentialListing(result, destination); }
public void GivenTheFileREAResidentialCurrentBedroomIsStudio_Parse_ReturnsAResidentialAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.PropertyType = PropertyType.Studio; expectedListing.Features.Bedrooms = 0; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-BedroomIsStudio.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
[InlineData("REA-Residential-Current-AddressDisplayIsNo.xml", "RICHMOND, Victoria 3121")] // Display == false/no. public void GivenTheFileREAResidentialWithSomeAddressDisplayValues_Parse_ReturnsAResidentialSoldListing(string fileName, string expectedDisplayAddress) { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Address.DisplayAddress = expectedDisplayAddress; var reaXml = File.ReadAllText(FakeDataFolder + fileName); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
GivenTheFileREAResidentialCurrentWithEmptyImagesAndFloorplans_Parse_ReturnsAResidentialAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Images = new List <Media>(); expectedListing.FloorPlans = new List <Media>(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithEmptyImagesAndFloorplans.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
GivenTheFileREAResidentialCurrentWithNoModTimeInImagesAndFloorPlans_Parse_ReturnsAResidentialAvailableListing () { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Images.ToList().ForEach(x => x.CreatedOn = null); expectedListing.FloorPlans.ToList().ForEach(x => x.CreatedOn = null); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithNoModTimeInImagesAndFloorPlans.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenTheFileREAResidentialCurrentWithEnsuiteIsTrue_Parse_ReturnsAResidentialAvailableListing( string filename, byte ensuiteCount) { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Features.Ensuites = ensuiteCount; var reaXml = File.ReadAllText(FakeDataFolder + filename); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenTheFileREALandCurrent_Parse_ReturnsALandAvailableListing(string fileName) { // Arrange. var expectedListing = FakeListings.CreateAFakeLandListing(); expectedListing.Address.StreetNumber = "LOT 12/39"; expectedListing.Address.DisplayAddress = expectedListing.Address.ToFormattedAddress(true, StateReplacementType.ReplaceToLongText, false, true); var reaXml = File.ReadAllText(FakeDataFolder + fileName); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertLandListing(result, expectedListing); }
public void GivenTheFileREALandCurrentMissingLandCategory_Parse_ReturnsALandAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeLandListing(); expectedListing.Address.StreetNumber = "LOT 12/39"; expectedListing.Address.DisplayAddress = expectedListing.Address.ToFormattedAddress(true, StateReplacementType.ReplaceToLongText, false, true); expectedListing.CategoryType = LandRuralCategoryType.Unknown; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Land-Current-MissingLandCategory.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertLandListing(result, expectedListing); }
public void GivenTheFileREALandCurrentIncompleteLandDetails_Parse_ReturnsALandAvailableListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeLandListing(); expectedListing.Address.StreetNumber = "LOT 12/39"; expectedListing.Address.DisplayAddress = expectedListing.Address.ToFormattedAddress(true, StateReplacementType.ReplaceToLongText, false, true); expectedListing.LandDetails.CrossOver = null; expectedListing.LandDetails.Depths = new List <Depth>(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Land-Current-IncompleteLandDetails.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertLandListing(result, expectedListing); }
GivenTheFileREAResidentialCurrentWithNoStreetNumberButASubNumber_Parse_ReturnsAResidentialAvailableListing () { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Address.StreetNumber = "2/77a"; expectedListing.Address.DisplayAddress = expectedListing.Address.ToString(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithNoStreetNumberButASubNumber.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenTheFileREAResidentialCurrentWithLocalFilesForImages_Parse_ReturnsAListing() { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Images[0].Url = "imageM.jpg"; expectedListing.Images[1].Url = "imageA.jpg"; expectedListing.FloorPlans[0].Url = "floorplan1.gif"; expectedListing.FloorPlans[1].Url = "floorplan2.gif"; var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithLocalFilesForImages.xml"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }
public void GivenAnExistingListingAndTheResultListingChangesSomething_Parse_ReturnsANewListingWithTheSourceListingWasntChanged() { // Arrange. var source = FakeListings.CreateAFakeResidentialListing(); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-Minimum.xml"); // Act. var result = reaXmlTransmorgrifier.Parse(reaXml, source); // Assert. // Change something on the result which shouldn't effect the original source. var newListing = result.Listings.First().Listing; newListing.Description.ShouldBe(source.Description); // Right now, both are the same. newListing.Description = DateTime.UtcNow.ToString(); // Change. newListing.Description.ShouldNotBe(source.Description); // Both should now be different. }
public void GivenANonCurrentReaRentalFileAndAnExistingListing_Parse_ReturnsTheUpdatedListing(string fileName, StatusType expectedStatusType) { // Arrange. var existingListing = FakeListings.CreateAFakeRentalListing(); var reaXml = File.ReadAllText(FakeDataFolder + fileName); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); // Arrange. var result = reaXmlTransmorgrifier.Parse(reaXml, existingListing); // Assert. var listing = result.Listings.First().Listing as RentalListing; listing.StatusType.ShouldBe(expectedStatusType); var validator = new RentalListingValidator(); var validationResult = validator.Validate(listing, ruleSet: RentalListingValidator.StrictRuleSet); validationResult.IsValid.ShouldBeTrue(); }
[InlineData("REA-Residential-Current-WithPriceAndDisplayNoAndNoPriceView.xml", false, null)] // Will use the default Sale price value. public void GivenTheFileREAResidentialCurrentSomeVariousDisplayPriceOptions_Parse_ReturnsAListing( string fileName, bool isDefaultSalePriceSet, string expectedSalePriceText) { // Arrange. var expectedListing = FakeListings.CreateAFakeResidentialListing(); expectedListing.Pricing.SalePriceText = expectedSalePriceText; var reaXml = File.ReadAllText($"{FakeDataFolder}{fileName}"); var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier(); if (isDefaultSalePriceSet) { reaXmlTransmorgrifier.DefaultSalePriceTextIfMissing = expectedSalePriceText; } // Act. var result = reaXmlTransmorgrifier.Parse(reaXml); // Assert. AssertResidentialListing(result, expectedListing); }