mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-24 07:53:09 +00:00
fix(places): follow-ups from the review of the schemeless website fix
create_place_accommodation refused the whole booking again once its website went through the place contract, for '' and free text as well, which it always took. It keeps its old input schema now and leaves a website off when the contract refuses it, so a bare host still gains https and a script link is still not stored. normalizePlaceWebsite keeps an http or https value whenever a browser opens it, the way the write contract does, so a plugin or source answering with an intranet host, an IPv6 literal or a trailing dot keeps its website. The dot check only tells a bare host from a word. A details row cached before the fix (a week for Google and Amap, until a refresh for an expanded one) hands its website out through the same helper. Tests: SHARED-WEBSITE-007 adjusted, SHARED-WEBSITE-013 and 014, MCP-ACCOM-2483-01 narrowed, MCP-ACCOM-2483-02, MAPS-2483-06 and 07, AMAP-079, PLUGIN-SEARCH-2483-02.
This commit is contained in:
@@ -165,6 +165,17 @@ describe('PluginSearchController', () => {
|
||||
expect(places.map((p) => p.website)).toEqual(['https://www.ristorante.example/menu', 'https://ristorante.example', null]);
|
||||
});
|
||||
|
||||
// A plugin on the same network may answer with an intranet address. The old
|
||||
// check kept every http(s) url a browser opens, and so does the helper.
|
||||
it('PLUGIN-SEARCH-2483-02: an http(s) website keeps its host whatever it looks like', async () => {
|
||||
const urls = ['http://localhost:8080/poi/1', 'http://intranet/poi/2', 'https://[2001:db8::1]/poi/3'];
|
||||
const { c } = controller({
|
||||
searchPlaces: vi.fn(async () => urls.map((website, i) => hit({ id: `h${i}`, website }))) as unknown as PluginHooks['searchPlaces'],
|
||||
});
|
||||
const { places } = await c.search('poi', undefined, undefined, undefined, undefined, req(5));
|
||||
expect(places.map((p) => p.website)).toEqual(urls);
|
||||
});
|
||||
|
||||
it('caps one provider at 20 hits', async () => {
|
||||
const { c } = controller({
|
||||
searchPlaces: vi.fn(async () =>
|
||||
|
||||
Reference in New Issue
Block a user