TLDR: The MEC Hotels directory lists crew hotels grouped by airport. One search field, pinned above the list, filters as you type on an airport's code, an airport's name, or a hotel's name. Tapping a hotel opens its detail page (address with a map link, phone, email, website, shuttle, amenities), and hotels can be favorited. Placeholder rows that aren't a bookable hotel (a lounge note, "No ALPA approved hotels") show status text and have no heart. Which hotels you see depends on your MEC — the backend trims the list.
Steps: Open the directory from the path above. Scroll the list.
Screenshot to add: screen-assets/mh1-directory.png — search field on top, first
airport section below it.
What you should see: A search field ("Search airport or hotel…") directly under the title bar, then airport sections in alphabetical order of airport code. Each section has a header — a navy bar reading CODE · Airport Name (for example ABQ · Albuquerque International Sunport) — followed by that airport's hotels, each showing the hotel name and a one-line address. The search field stays put while you scroll the list; only the rows move.
Steps: Tap the search field and type ORD (any case).
Screenshot to add: screen-assets/mh2-search-code.png
What you should see: The list narrows as you type, and once the three letters are an exact airport code, Chicago O'Hare's section jumps to the top and shows in full — every hotel under it. Below it you will still see any other airport whose name, or any hotel whose name, contains those letters: for example GRR · Gerald R Ford International (its name contains "ord") and the Hartford Marriott Downtown hotel under BDL. Those keep their normal alphabetical order underneath. That is the rule working, not a leak.
The same "exact match goes first" rule applies to an exact airport name and to an exact hotel name (its airport moves to the top). A partial match — say or — does not reorder anything.
Steps: Clear the field, then type albuq.
Screenshot to add: screen-assets/mh3-search-airport-name.png
What you should see: The ABQ section only, with all of its rows — including the lounge placeholder row — because the airport itself matched. A partial name works; you don't need the full name.
Steps: Clear the field, then type sheraton.
Screenshot to add: screen-assets/mh4-search-hotel-name.png
What you should see: Only hotels with "sheraton" in the name, each still under its own airport header. Airports with no matching hotel disappear entirely, and a sibling hotel at the same airport that doesn't match is hidden.
Steps: Type zzzz. Then tap the ✕ at the right end of the field.
Screenshot to add: screen-assets/mh5-no-matches.png
What you should see: With zzzz, every section and row disappears and a line under the field reads No airports or hotels match "zzzz". The field itself stays on screen. Tapping ✕ empties the field and the whole list comes back in its original alphabetical order — including after a search such as ORD that had moved an airport to the top. (The ✕ only shows while there is text.)
Steps: Clear the search. Open a hotel with a full record — for example Hyatt Regency Airport (SFO), then go back and open Padre Hotel (BFL).
Screenshot to add: screen-assets/mh6-detail.png
What you should see: The hotel's name in the title bar and its address as a tappable link. Below it, action chips for each contact method the record has:
https://) and should still open.Then sections for Shuttle Service and Amenities when the record has them. Tapping the address opens your maps app on the hotel — by its coordinates when the record has them, otherwise by an address search.
Steps: Tap the heart on a hotel row. Open Favorites from the app's favorites entry, find the hotel, then remove it there. Back in the directory, look at the LOUNGE — NO SUITABLE LOUNGE FACILITY row at any airport, and the General Notices (AAA) row at the top.
Screenshot to add: screen-assets/mh7-favorites.png
What you should see: A real hotel's heart fills when tapped and the hotel appears in Favorites (removing it there clears the heart in the directory). Placeholder rows — lounge notes, "No ALPA approved hotels", "14 hour exception city" markers — show their text as a small status pill and have no heart. The General Notices (AAA) row is the exception: it is MEC-wide reference content, so it does have a heart.
Steps: In the directory, type ADL. Sign out, then sign in as a member of a different MEC and open the directory again.
What you should see: The search field is empty and the full list is showing for the new member. The first member's typed text must never hide rows for the second (this is the bug the reset exists to prevent — before it, a filter left by one member could leave the next member with an empty list).
These are unit tests (they run with dotnet test UnitTest/UnitTest.csproj), so a regression in the
rules should be caught before it reaches you. There is no UI-suite (Appium) test for the hotel directory
yet — everything on screen is checked by hand:
HotelDirectorySearchTests).HotelDirectorySearchStateTests).DynamicFeedOrchestratorPageHotelSearchTests).MecHotelDetailPageTests). What it does not cover is the page's
markup — which buttons and sections show for a given hotel.MecHotelDirectoryFactoryTests, HotelDisplayExtensionsTests).HotelDisplayExtensionsTests,
CmsHtmlTests).That a UAL member can find a hotel by airport code, airport name or hotel name; that the field stays pinned and clears cleanly; that every contact method on a hotel's detail page works; that only real hotels can be favorited; and that one member's search can't leak to the next.