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_uses_address_parser_if_formatted_address_present():
  address_parser_mock = MagicMock(spec=address_parser)
  builder = ListingBuilder(address_parser_mock, formatted_address='x')
  builder._build_formatted_address()
  address_parser_mock.parse_address.assert_called_with('x')