Ejemplo n.º 1
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);
        }
        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);
        }
        [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 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.º 5
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);
        }
        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 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 GivenAnExistingFileWithAMinimumDate_Parse_ReturnsAResidentialAvailableListingWithDatesRemoved(bool useAnExistingListing)
        {
            // Arrange.
            var file = FakeDataFolder + "REA-Residential-Current-WithAuctionDateTimePlaceholder.xml";
            var reaXmlTransmorgrifier          = new ReaXmlTransmorgrifier();
            ResidentialListing existingListing = null;

            if (useAnExistingListing)
            {
                var existingListingXml = File.ReadAllText(file);
                existingListingXml = existingListingXml.Replace("REPLACE-THIS-VALUE", DateTime.UtcNow.ToString("s"));
                existingListing    = reaXmlTransmorgrifier
                                     .Parse(existingListingXml)
                                     .Listings
                                     .First()
                                     .Listing as ResidentialListing;
            }

            var reaXml     = File.ReadAllText(file);
            var updatedXml = reaXml.Replace("REPLACE-THIS-VALUE", "0000-00-00");

            // Act.
            var result = reaXmlTransmorgrifier.Parse(updatedXml, existingListing);

            // Assert.
            result.Listings.ShouldNotBeEmpty();
            result.Listings.Count.ShouldBe(1);
            result.Errors.ShouldBeEmpty();

            var listing = result
                          .Listings
                          .First()
                          .Listing as ResidentialListing;

            listing.AuctionOn.ShouldBeNull();

            if (useAnExistingListing)
            {
                listing.AuctionOn.ShouldNotBe(existingListing.AuctionOn); // Existing had a value. Now it's been removed.
            }
        }
Ejemplo n.º 9
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);
        }
        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 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 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 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);
            }
        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 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);
        }
Ejemplo n.º 16
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 GivenAFileWithMinimumDates_Parse_ReturnsAResidentialAvailableListingWithDatesRemoved(string minimumDateTime)
        {
            // Arrange.
            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current-WithAuctionDateTimePlaceholder.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            var updatedXml = reaXml.Replace("REPLACE-THIS-VALUE", minimumDateTime);

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

            // Assert.
            var listing = result.Listings.First().Listing as ResidentialListing;

            listing.AuctionOn.ShouldBeNull();
        }
        public void GivenAFileWithAModTimeMinimumDate_Parse_RetrunsSomeInvalidData()
        {
            // Arrange.
            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Residential-Current.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

            var updatedXml = reaXml.Replace("modTime=\"2009-01-01-12:30:00\"", "modTime=\"0000-00-00\"");

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

            // Assert.
            result.Listings.ShouldBeEmpty();
            result.Errors.ShouldNotBeNull();
            result.Errors.Count.ShouldBe(1);
        }
        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);
        }
Ejemplo n.º 20
0
        public void GivenTheFileREARentalLeased_Parse_ReturnsALeasedListing()
        {
            // Arrange.
            var expectedListing = CreateAFakeEmptyRentalListing("Rental-Leased-ABCD1234");

            expectedListing.StatusType   = StatusType.Leased;
            expectedListing.SourceStatus = "Leased";
            var reaXml = File.ReadAllText(FakeDataFolder + "REA-Rental-Leased.xml");
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

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

            // Assert.
            AssertRentalListing(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);
        }
        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);
        }
Ejemplo n.º 24
0
        public void GivenAFileWithAnInvalidDocument_Convert_ReturnsAnErrorResult(string fileName, string expectedWarning, int expectedValidDocuments)
        {
            // Arramge.
            var reaXml = File.ReadAllText(FakeDataFolder + fileName);
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

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

            // Assert.
            result.Errors.ShouldBeEmpty();
            result.Listings.First().Listing.Documents.Count.ShouldBe(expectedValidDocuments);
            var warnings = result.Listings.First().Warnings;

            warnings.ShouldNotBeEmpty();
            warnings.First().ShouldBe(expectedWarning);
        }
        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 GivenTheFileREAInvalidCharacterAndNoBadCharacterCleaning_Parse_ThrowsAnException()
            {
                // Arrange.
                var reaXml = File.ReadAllText("Sample Data\\REA-InvalidCharacter.xml");
                var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

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

                // Assert.
                result.Listings.Count.ShouldBe(0);
                result.UnhandledData.Count.ShouldBe(0);
                result.Errors.Count.ShouldBe(1);
                result.Errors.First()
                .ExceptionMessage.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.)");
                result.Errors.First().InvalidData.ShouldBe("The entire data source.");
            }
Ejemplo n.º 28
0
        public void GivenAnReaRentalFileThatRepresentsARemovedListing_Parse_ReturnsARemovedListing(string fileName,
                                                                                                   string sourceStatus,
                                                                                                   string id)
        {
            // Arrange.
            var expectedListing = CreateAFakeEmptyRentalListing(id);

            expectedListing.StatusType   = StatusType.Removed;
            expectedListing.SourceStatus = sourceStatus;
            var reaXml = File.ReadAllText(FakeDataFolder + fileName);
            var reaXmlTransmorgrifier = new ReaXmlTransmorgrifier();

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

            // Assert.
            AssertRentalListing(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);
        }