def test_builder_assigns_address_components_if_formatted_address_present(): address_parser_mock = MagicMock(spec=address_parser) parsed_address_mock = MagicMock() address = 'fake_address' city = 'fake_city' state = 'fake_state' zip_code = 'fake_zip_code' formatted_address = 'fake_formatted_address ' parsed_address_mock.address1 = address parsed_address_mock.city = city parsed_address_mock.state = state parsed_address_mock.zip_code = zip_code parsed_address_mock.formatted_address = formatted_address address_parser_mock.parse_address = MagicMock(return_value=parsed_address_mock) builder = ListingBuilder(address_parser_mock, formatted_address='x') builder.listing_attrs_output = MagicMock() builder._build_formatted_address() call_list = [ call(listing_builder.ADDRESS, address), call(listing_builder.CITY, city), call(listing_builder.STATE, state), call(listing_builder.ZIP_CODE, zip_code), call(listing_builder.FORMATTED_ADDRESS, formatted_address), ] assert builder.listing_attrs_output.__setitem__.call_args_list == call_list
def test_builder_sets_makes_address_distinct(): address1 = '123 test st' address_parser_mock = MagicMock(spec=address_parser) address_parser_mock.is_street_address = MagicMock(return_value=True) builder = ListingBuilder(address_parser_mock, address=[address1, address1]) builder._build_address() address_attr = builder.listing_attrs_output[listing_builder.ADDRESS] assert isinstance(address_attr, basestring)
def test_builder_uses_firs_street_address_to_populate(): address1 = '123 test st' address_parser_mock = MagicMock(spec=address_parser) address_parser_mock.is_street_address = MagicMock(return_value=True) builder = ListingBuilder(address_parser_mock, address=address1) builder._build_address() address_attr = builder.listing_attrs_output[listing_builder.ADDRESS] assert address_attr is not None
def test_builder_joins_addresses_if_no_valid_address(): xstreet1 = 'Foo' xtreet2 = 'Bar' address_parser_mock = MagicMock(spec=address_parser) address_parser_mock.is_street_address = MagicMock(return_value=False) address_parser_mock.is_cross_street_address = MagicMock(return_value=False) builder = ListingBuilder(address_parser_mock, address=[xstreet1, xtreet2]) builder._build_address() address_parser_mock.join_cross_street.assert_called_with({'Foo', 'Bar'})
def test_builder_delegates_phone_parsing_to_contact_parser(): expected_phone_number = '555-555-5555' contact_parser_mock = MagicMock(spec=contact_parser) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_phone_number=[expected_phone_number]) builder._build_contact_phone_number() contact_parser_mock.get_contact_phone_number.assert_called_with(expected_phone_number)
def test_builder_delegates_email_parsing_to_contact_parser(): expected_email_address = '*****@*****.**' contact_parser_mock = MagicMock(spec=contact_parser) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_email_address=[expected_email_address]) builder._build_contact_email_address() contact_parser_mock.get_contact_email_address.assert_called_with(expected_email_address)
def test_builder_delegates_name_parsing_to_contact_parser(): expected_name = 'foo bar' contact_parser_mock = MagicMock(spec=contact_parser) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_name=[expected_name]) builder._build_contact_name() contact_parser_mock.get_contact_name.assert_called_with(expected_name)
def test_builder_gets_correct_city_from_list(): state = 'NY' builder = ListingBuilder(state=[state]) builder._build_state() address_attr = builder.listing_attrs_output[listing_builder.STATE] assert address_attr == state
def test_builder_gets_correct_city_from_list(): city = 'Brooklyn' builder = ListingBuilder(city=[city]) builder._build_city() address_attr = builder.listing_attrs_output[listing_builder.CITY] assert address_attr == city
def test_builder_gets_amenities_from_desc_if_not_in_list(): amenity_service_mock = MagicMock(spec=amenity_service) builder = ListingBuilder(amenity_service=amenity_service_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = 'IGNORE ME' builder._build_amenities() builder.listing_attrs_output.get.assert_called_with(listing_builder.DESCRIPTION)
def test_builder_gets_correct_bathroom_from_list(): bathroom_count = '2' builder = ListingBuilder(bathroom_count=[bathroom_count]) builder._build_bathroom_count() bedroom_count_attr = builder.listing_attrs_output[listing_builder.BATHROOM_COUNT] expected_bedroom_count = 2.0 assert bedroom_count_attr == expected_bedroom_count
def test_builder_gets_correct_sqfreet_from_list(): sqfeet = '100' builder = ListingBuilder(sqfeet=[sqfeet]) builder._build_sqfeet() sqfeet_attr = builder.listing_attrs_output[listing_builder.SQFEET] expected_sqfeet = 100.0 assert sqfeet_attr == expected_sqfeet
def test_builder_gets_correct_url_from_list(): url = 'http://newyork.craigslist.org/brk/abo/3981928312.html' builder = ListingBuilder(url=[url]) builder._build_url() url_attr = builder.listing_attrs_output[listing_builder.URL] expected_url = url assert url_attr == expected_url
def test_builder_gets_correct_broker_fee_from_list(): fee = 'True' builder = ListingBuilder(broker_fee=[fee]) builder._build_broker_fee() broker_fee_attr = builder.listing_attrs_output[listing_builder.BROKER_FEE] expected_fee = True assert broker_fee_attr == expected_fee
def test_builder_gets_correct_price_from_list(): price = '100' builder = ListingBuilder(price=[price]) builder._build_price() sqfeet_attr = builder.listing_attrs_output[listing_builder.PRICE] expected_price = 100.0 assert sqfeet_attr == expected_price
def test_builder_uses_phone_number_parser_when_in_name_provided(): expected_phone_number = '555-555-5555' contact_parser_mock = MagicMock(spec=contact_parser) contact_parser_mock.get_contact_phone_number = MagicMock(return_value=expected_phone_number) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_phone_number=[expected_phone_number]) builder._build_contact_phone_number() contact_phone_number = builder.listing_attrs_output[listing_builder.CONTACT_PHONE_NUMBER] assert contact_phone_number == expected_phone_number
def test_builder_delegates_address_sanitization(): geo_service_mock = MagicMock(spec=listing_geo_service) builder = ListingBuilder(listing_geo_service=geo_service_mock) listing_source_mock = MagicMock(trusted_geo_data=False) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = listing_source_mock builder._sanitize_address() geo_service_mock.get_sanitized_address.assert_called_with(ANY, ANY, ANY)
def test_builder_uses_name_parser_when_in_name_provided(): expected_name = 'foo bar' contact_parser_mock = MagicMock(spec=contact_parser) contact_parser_mock.get_contact_name = MagicMock(return_value=expected_name) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_name=[expected_name]) builder._build_contact_name() contact_name = builder.listing_attrs_output[listing_builder.CONTACT_NAME] assert contact_name == expected_name
def test_builder_uses_datetime_parser(): datetime_parser_mock = MagicMock(spec=datetime_parser) datetime_parser_mock.get_datetime = MagicMock( return_value=listing_test_data.cl_listing_3952467416_posted_date ) some_time = 'SOME TIME' builder = ListingBuilder(datetime_parser=datetime_parser_mock, posted_date=some_time) builder._build_posted_date() datetime_parser_mock.get_datetime.assert_called_with(some_time)
def test_builder_address_only_sanitized_if_untrustworthy(): geo_service_mock = MagicMock(spec=listing_geo_service) listing_source_mock = MagicMock(trusted_geo_data=True) builder = ListingBuilder(listing_geo_service=geo_service_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = listing_source_mock builder._sanitize_address() assert 0 == len(geo_service_mock.get_sanitized_address.call_args_list)
def test_builder_gets_correct_price_from_text(): home_parser_mock = MagicMock(spec=home_parser) expected_price = 5.0 home_parser_mock.get_price = MagicMock(return_value=expected_price) builder = ListingBuilder(home_parser=home_parser_mock, price='something') builder.listing_attrs_output = MagicMock() builder._build_price() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.PRICE, expected_price)
def test_builder_gets_correct_bathroom_from_text(): home_parser_mock = MagicMock(spec=home_parser) expected_bathroom_count = 2 home_parser_mock.get_bathroom_count = MagicMock(return_value=expected_bathroom_count) builder = ListingBuilder(home_parser=home_parser_mock, bathroom_count='something') builder.listing_attrs_output = MagicMock() builder._build_bathroom_count() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.BATHROOM_COUNT, expected_bathroom_count)
def test_builder_gets_correct_sqfeet_from_text(): home_parser_mock = MagicMock(spec=home_parser) expected_sqfeet = 2 home_parser_mock.get_sqfeet = MagicMock(return_value=expected_sqfeet) builder = ListingBuilder(home_parser=home_parser_mock, sqfeet='something') builder.listing_attrs_output = MagicMock() builder._build_sqfeet() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.SQFEET, expected_sqfeet)
def test_builder_sets_posted_date_to_correct_date(): datetime_parser_mock = MagicMock(spec=datetime_parser) datetime_parser_mock.get_datetime = MagicMock( return_value=listing_test_data.cl_listing_3952467416_expected_posted_date ) builder = ListingBuilder(datetime_parser=datetime_parser_mock, posted_date='IGNOREME') builder._build_posted_date() date = builder.listing_attrs_output[listing_builder.POSTED_DATE] assert date == listing_test_data.cl_listing_3952467416_expected_posted_date
def test_builder_uses_email_parser_when_in_name_provided(): expected_email = '*****@*****.**' contact_parser_mock = MagicMock(spec=contact_parser) contact_parser_mock.get_contact_email_address = MagicMock(return_value=expected_email) builder = ListingBuilder(contact_parser=contact_parser_mock, contact_email_address=[expected_email]) builder._build_contact_email_address() contact_phone_number = builder.listing_attrs_output[listing_builder.CONTACT_EMAIL_ADDRESS] assert contact_phone_number == expected_email
def test_builder_gets_correct_price_title_if_not_in_list(): home_parser_mock = MagicMock(spec=home_parser) expected_price = 100.0 home_parser_mock.get_price = MagicMock(return_value=expected_price) builder = ListingBuilder(home_parser=home_parser_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = True builder._build_price() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.PRICE, expected_price)
def test_builder_gets_correct_bathroom_from_title_if_not_in_list(): home_parser_mock = MagicMock(spec=home_parser) expected_sqfeet = 100.0 home_parser_mock.get_sqfeet = MagicMock(return_value=expected_sqfeet) builder = ListingBuilder(home_parser=home_parser_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = True builder._build_sqfeet() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.SQFEET, expected_sqfeet)
def test_builder_uses_description_for_email_if_not_available(): contact_parser_mock = MagicMock(spec=contact_parser) expected_email = '*****@*****.**' contact_parser_mock.get_contact_email_address = MagicMock(return_value=expected_email) builder = ListingBuilder(contact_parser=contact_parser_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = True builder._build_contact_email_address() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.CONTACT_EMAIL_ADDRESS, expected_email)
def test_builder_gets_correct_broker_fee_from_url_if_not_in_list(): home_parser_mock = MagicMock(spec=home_parser) expected_fee = True home_parser_mock.get_broker_fee_from_url = MagicMock(return_value=expected_fee) builder = ListingBuilder(home_parser=home_parser_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = True builder._build_broker_fee() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.BROKER_FEE, expected_fee)
def test_builder_uses_description_for_phone_if_not_available(): contact_parser_mock = MagicMock(spec=contact_parser) expected_phone = '(555) 555-5555' contact_parser_mock.get_contact_phone_number = MagicMock(return_value=expected_phone) builder = ListingBuilder(contact_parser=contact_parser_mock) builder.listing_attrs_output = MagicMock() builder.listing_attrs_output.get.return_value = True builder._build_contact_phone_number() assert builder.listing_attrs_output.__setitem__.call_args_list[0] == call(listing_builder.CONTACT_PHONE_NUMBER, expected_phone)