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 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 GivenSomeValidJson_Parse_ReturnsAListing(Type listingType, int listingCount) { // Arrange. var existingListing = CreateListings(listingType, listingCount); var json = JsonConvertHelpers.SerializeObject(existingListing); var transmorgrifier = new JsonTransmorgrifier(); // Act. var result = transmorgrifier.Parse(json); // Assert. result.Listings.Count.ShouldBe(listingCount); result.UnhandledData.Count.ShouldBe(0); result.Errors.Count.ShouldBe(0); for (var i = 0; i < result.Listings.Count; i++) { if (listingType == typeof(ResidentialListing)) { ResidentialListingAssertHelpers.AssertResidentialListing( (ResidentialListing)result.Listings[i].Listing, (ResidentialListing)existingListing[i]); } else if (listingType == typeof(RentalListing)) { RentalListingAssertHelpers.AssertRuralListing( (RentalListing)result.Listings[i].Listing, (RentalListing)existingListing[i]); } else if (listingType == typeof(LandListing)) { LandListingAssertHelpers.AssertLandListing( (LandListing)result.Listings[i].Listing, (LandListing)existingListing[i]); } else if (listingType == typeof(RuralListing)) { RuralListingAssertHelpers.AssertRuralListing( (RuralListing)result.Listings[i].Listing, (RuralListing)existingListing[i]); } else { throw new Exception($"Failed to assert the suggested type: '{listingType}'."); } } }
public void GivenAnOlderStatusType_DeserializeObject_ReturnsAListingWithTheCorrectlyConvertedStatusType(string oldStatusType, StatusType expectedStatusType) { // Arrange. var listing = FakeData.FakeListings.CreateAFakeResidentialListing(); var originalJson = JsonConvertHelpers.SerializeObject(listing); var json = originalJson.Replace("Available", oldStatusType); json.ShouldContain($"\"StatusType\": \"{oldStatusType}\""); // Act. var newListing = JsonConvertHelpers.DeserializeObject(json); // Assert. newListing.StatusType.ShouldBe(expectedStatusType); }
public void GivenSomeJsonWithAnMissingListingType_Parse_ReturnsAnError() { // Arrange. var existingListing = CreateListings(typeof(ResidentialListing), 1); var json = JsonConvertHelpers.SerializeObject(existingListing).Replace("\"Residential\",", "\"blah\","); var transmorgrifier = new JsonTransmorgrifier(); // Act. var result = transmorgrifier.Parse(json); // Assert. result.Listings.Count.ShouldBe(0); result.UnhandledData.Count.ShouldBe(0); result.Errors.Count.ShouldBe(1); result.Errors.First() .ExceptionMessage.ShouldBe( "Invalid value found in the expected json-property 'listingType'. Only the following values (ie. listing types) as supported: residential, rental, land or rural."); result.Errors.First().InvalidData.ShouldNotBeNullOrWhiteSpace(); }