[InlineData(false, null)]   // Will use the default Sale price value.
        public void GivenTheFileREAResidentialSoldWithDisplayPriceIsNo_Parse_ReturnsAResidentialSoldListingWithNoSoldPriceText(bool isDefaultSalePriceSet,
                                                                                                                               string expectedSoldPriceText)
        {
            // Arrange.
            var 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 = expectedSoldPriceText
            };

            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Sold-DisplayPriceIsNo.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            if (isDefaultSalePriceSet)
            {
                reaXmlTransmorgrifier.DefaultSoldPriceTextIfMissing = expectedSoldPriceText;
            }

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            AssertResidentialListing(result, expectedListing);
        }
        public void GivenAnREALandSoldFile_Parse_ReturnsARemovedListing(string fileName,
                                                                        string expectedSoldPriceText)
        {
            // Arrange.
            var expectedListing = CreateAFakeEmptyLandListing("Land-Sold-ABCD1234");

            expectedListing.StatusType   = StatusType.Sold;
            expectedListing.SourceStatus = "Sold";
            expectedListing.Pricing      = new SalePricing
            {
                SoldPrice     = 85000,
                SoldPriceText = expectedSoldPriceText,
                SoldOn        = new DateTime(2009, 1, 10, 12, 30, 00)
            };
            var reaXml = File.ReadAllText(FakeDataFolder + fileName);

            // NOTE: Lets use the expected text as the default to make sure this value will be used in the logic.
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier
            {
                DefaultSoldPriceTextIfMissing = expectedSoldPriceText
            };

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            AssertLandListing(result, expectedListing);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public void GivenTheFileREAResidentialSoldWithMissingDisplayPrice_Parse_ReturnsAResidentialSoldListing(string fileName,
                                                                                                               SalePricing salePricing,
                                                                                                               string defaultSoldPriceTextIfMissing)
        {
            // Arrange.
            var expectedListing = CreateAFakeEmptyResidentialListing("Residential-Sold-ABCD1234");

            expectedListing.StatusType   = StatusType.Sold;
            expectedListing.SourceStatus = "sold";
            expectedListing.Pricing      = salePricing;

            var reaXml = File.ReadAllText($"{FakeDataFolder}{fileName}");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            if (!string.IsNullOrWhiteSpace(defaultSoldPriceTextIfMissing))
            {
                reaXmlTransmorgrifier.DefaultSoldPriceTextIfMissing = defaultSoldPriceTextIfMissing;
            }

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            AssertResidentialListing(result, expectedListing);
        }
        public void GivenTheFileREAResidentialCurrentMinimum_Parse_ReturnsAResidentialAvailableListing()
        {
            // Arrange.
            var expectedListing = CreateAFakeEmptyResidentialListing("Residential-Current-ABCD1234");

            expectedListing.StatusType   = StatusType.Available;
            expectedListing.SourceStatus = "current";
            expectedListing.Address      = new Address
            {
                StreetNumber   = "2/39",
                Street         = "Main Road",
                Suburb         = "RICHMOND",
                State          = "Victoria",
                Postcode       = "3121",
                CountryIsoCode = "AU"
            };
            expectedListing.Address.DisplayAddress = expectedListing.Address.ToString();
            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-Minimum.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            AssertResidentialListing(result, expectedListing);
        }
Ejemplo n.º 6
0
            private static Listing GetListing(Type listingType)
            {
                string fileName = null;

                if (listingType == typeof(ResidentialListing))
                {
                    fileName = "Sample Data\\Transmorgrifiers\\REA\\Residential\\REA-Residential-Current.xml";
                }
                else if (listingType == typeof(RentalListing))
                {
                    fileName = "Sample Data\\Transmorgrifiers\\REA\\Rental\\REA-Rental-Current.xml";
                }
                else if (listingType == typeof(RuralListing))
                {
                    fileName = "Sample Data\\Transmorgrifiers\\REA\\Rural\\REA-Rural-Current.xml";
                }
                else if (listingType == typeof(LandListing))
                {
                    fileName = "Sample Data\\Transmorgrifiers\\REA\\Land\\REA-Land-Current.xml";
                }

                if (string.IsNullOrWhiteSpace(fileName))
                {
                    throw new Exception("No valid type provided. Must be a 'Listing' type.");
                }

                var reaXml = File.ReadAllText(fileName);
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                return(reaXmlTransmorgrifier.ConvertTo(reaXml).Listings.First().Listing);
            }
Ejemplo n.º 7
0
            private static RentalListing CreateListing(string fileName = null)
            {
                var xml = File.ReadAllText(fileName
                                           ?? "Sample Data\\Transmorgrifiers\\REA\\Rental\\REA-Rental-Current.xml");
                var transmogrifier = new ReaXmlTransmorgrifier();

                return(transmogrifier.ConvertTo(xml).Listings.First().Listing as RentalListing);
            }
        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);
        }
            private static Listing GetListing(string fileName)
            {
                fileName.ShouldNotBeNullOrEmpty();

                var reaXml = File.ReadAllText(fileName);
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                return(reaXmlTransmorgrifier.ConvertTo(reaXml).Listings.First().Listing);
            }
        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 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);
        }
Ejemplo n.º 12
0
            public void GivenTheFileREABadContent_Convert_ThrowsAnException()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\REA-BadContent.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var exception = Should.Throw <Exception>(() => reaXmlTransmorgrifier.ConvertTo(reaXml));

                // Assert.
                exception.ShouldNotBe(null);
                exception.Message.ShouldBe("Unable to parse the xml data provided. Currently, only a <propertyList/> or listing segments <residential/> / <rental/> / <land/> / <rural/>. Root node found: 'badContent'.");
            }
Ejemplo n.º 13
0
        public void GivenTheFileREARentalWithBadStatus_Parse_ReturnsAParsedResultWithAnError()
        {
            // Arrange.
            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Rental-WithBadStatus.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            result.Listings.Count.ShouldBe(0);
            result.Errors.Count.ShouldBe(1);
        }
Ejemplo n.º 14
0
            public void GivenTheFileReaResidentialCurrentBadSalePrice_Convert_ThrowsAnException()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Residential\\REA-Residential-Current-BadSalePrice.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = Should.Throw <AggregateException>(() => reaXmlTransmorgrifier.ConvertTo(reaXml));

                // Assert.
                result.ShouldNotBe(null);
                result.Message.ShouldBe("One or more errors occurred.");
                result.InnerException.Message.ShouldBe("Failed to parse the value '550000600000550000600000550000600000' into a decimal.");
            }
Ejemplo n.º 15
0
            public void GivenTheFileREAResidentialSoldWithDisplayPriceIsNo_Convert_ReturnsAResidentialSoldListing()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Residential\\REA-Residential-Sold-DisplayPriceIsNo.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = reaXmlTransmorgrifier.ConvertTo(reaXml);

                // Assert.
                result.Listings.Count.ShouldBe(1);
                result.UnhandledData.ShouldBe(null);
                AssertResidentialSoldListing(result.Listings.First().Listing as ResidentialListing, false);
            }
Ejemplo n.º 16
0
            public void GivenTheFileREARuralSold_Convert_ReturnsARuralSoldListing()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Rural\\REA-Rural-Sold.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = reaXmlTransmorgrifier.ConvertTo(reaXml);

                // Assert.
                result.Listings.Count.ShouldBe(1);
                result.UnhandledData.ShouldBe(null);
                AssertRuralSoldListing(result.Listings.First().Listing as RuralListing);
            }
Ejemplo n.º 17
0
            public void GivenTheFileReaLandCurrentMissingLandCategory_Convert_ReturnsALandCurrentListing()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Land\\REA-Land-Current-MissingLandCategory.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = reaXmlTransmorgrifier.ConvertTo(reaXml);

                // Assert.
                result.Listings.Count.ShouldBe(1);
                result.UnhandledData.ShouldBe(null);
                AssertLandCurrentListing(result.Listings.First().Listing as LandListing, LandCategoryType.Unknown);
            }
Ejemplo n.º 18
0
            public void GivenTheFileREASegmentResidentialCurrent_Convert_ReturnsAResidentialCurrentListing()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Residential\\REA-Segment-Residential-Current.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = reaXmlTransmorgrifier.ConvertTo(reaXml);

                // Assert.
                result.Listings.Count.ShouldBe(1);
                result.UnhandledData.ShouldBe(null);
                AssertResidentialCurrentListing(result.Listings.First().Listing as ResidentialListing);
            }
Ejemplo n.º 19
0
            public void GivenTheFileREAResidentialCurrentBadInspectionTime_Convert_ThrowsAnException()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\Residential\\REA-Residential-CurrentBadInspectionTime.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = Should.Throw <AggregateException>(() => reaXmlTransmorgrifier.ConvertTo(reaXml));

                // Assert.
                result.ShouldNotBe(null);
                result.Message.ShouldBe("One or more errors occurred.");
                result.InnerException.Message.ShouldBe("Inspection element has an invald Date/Time value. Element: <inspection> 12:00AM to 12:00AM</inspection>");
            }
Ejemplo n.º 20
0
            public void GivenTheFileREAInvalidCharacterAndNoBadCharacterCleaning_Convert_ThrowsAnException()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\REA-InvalidCharacter.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var exception = Should.Throw <Exception>(() => reaXmlTransmorgrifier.ConvertTo(reaXml));

                // Assert.
                exception.ShouldNotBe(null);
                exception.Message.ShouldBe(
                    "The REA Xml data provided contains some invalid characters. Line: 0, Position: 1661. Error: '\x16', hexadecimal value 0x16, is an invalid character. Suggested Solution: Either set the 'areBadCharactersRemoved' parameter to 'true' so invalid characters are removed automatically OR manually remove the errors from the file OR manually handle the error (eg. notify the people who sent you this data, that it contains bad data and they should clean it up.)");
            }
Ejemplo n.º 21
0
        public void GivenTheFileREAMixedContent_Parse_ReturnsAParsedResultWithListingsAndUnhandedData()
        {
            // Arrange.
            var reaXml = File.ReadAllText("Sample Data/REA-MixedContent.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            result.Listings.Count.ShouldBe(2);
            result.UnhandledData.Count.ShouldBe(3);
            result.UnhandledData[0].StartsWith("<pewPew1").ShouldBe(true);
            result.Errors.Count.ShouldBe(0);
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 24
0
            public void GivenTheFileREAMixedContent_Convert_ReturnsAConvertResultWithListingsAndUnhandedData()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\Transmorgrifiers\\REA\\REA-MixedContent.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

                // Act.
                var result = reaXmlTransmorgrifier.ConvertTo(reaXml);

                // Assert.
                result.ShouldNotBe(null);
                result.Listings.Count.ShouldBe(2);
                result.UnhandledData.Count.ShouldBe(3);
                result.UnhandledData[0].StartsWith("<pewPew1").ShouldBe(true);
            }
        public void GivenAnReaFileWithSomeTypeOfBadData_Parse_ReturnsAParsedError(string fileName,
                                                                                  string errorMessage)
        {
            // Arrange.
            var reaXml = File.ReadAllText(FakeDataFolder + fileName);
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            // Act.
            var result = reaXmlTransmorgrifier.Parse(reaXml);

            // Assert.
            var error = new ParsedError(errorMessage, reaXml);

            AssertParsingError(result, error);
        }
        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 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);
        }
        [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);
        }
        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);
        }