- journal.routes.search (off by default) registers journal-search, the results page for ?q= in the API's relevance order (no sort is sent), server-rendered with a Polish-aware result count. - JournalSearchBox: an icon button and a WAI-ARIA combobox with debounced ?fields=suggest suggestions, stale answers dropped, query words marked ignoring diacritics; a plain GET form without JS. - The module keeps the search path out of the route cache and the sitemap and marks it noindex, follow. - Client: suggestPosts and the fields option; useJournalLinks.searchLink.
69 lines
2.9 KiB
Plaintext
69 lines
2.9 KiB
Plaintext
# SSR expectations against the acme fixtures (testing/fixtures/acme).
|
|
# Grammar: STATUS PATH [contains=TEXT] [notcontains=TEXT] [type=PREFIX]
|
|
# The consumer enables en (default, no prefix) and pl (/pl prefix), and sets
|
|
# site.url to https://acme.test.
|
|
|
|
# Single post
|
|
200 /blog/hello-acme contains=Hello Acme
|
|
200 /blog/hello-acme contains=https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
|
|
404 /blog/missing-post
|
|
200 /blog/unsafe-sample contains=<p>Before</p><p>After</p> notcontains=alert(
|
|
404 /blog/draft-note
|
|
|
|
# Post index and pagination (9 per page, 13 published posts: 2 pages)
|
|
200 /blog contains=Hello Acme
|
|
200 /blog?page=2
|
|
404 /blog?page=3
|
|
404 /blog?page=abc
|
|
404 /blog?page=0
|
|
200 /pl/blog contains=Najnowsze wpisy
|
|
|
|
# Categories (include_empty=1; content renders above the list)
|
|
200 /blog/category/news contains=Acme news marker
|
|
200 /blog/category/quiet contains=There are no posts in this category yet.
|
|
404 /blog/category/nope
|
|
|
|
# Related posts fall back to the latest posts for a post without a category
|
|
200 /blog/uncategorised-note contains=Hello Acme
|
|
|
|
# Author (slug and login resolve) and tag pages
|
|
200 /blog/author/jane-doe contains=Jane Doe
|
|
200 /blog/author/jdoe contains=<link rel="canonical" href="https://acme.test/blog/author/jane-doe"
|
|
404 /blog/author/nobody
|
|
200 /blog/tag/release contains=Hello Acme
|
|
404 /blog/tag/nope
|
|
|
|
# RSS, sitemap, canonical and meta
|
|
200 /rss.xml type=application/rss+xml
|
|
200 /blog contains=href="/rss.xml"
|
|
200 /sitemap.xml contains=/blog/hello-acme
|
|
200 /sitemap.xml contains=/blog/category/quiet
|
|
200 /sitemap.xml notcontains=/blog/draft-note
|
|
200 /blog?page=2 contains=?page=2
|
|
200 /blog?page=2 contains=<link rel="canonical" href="https://acme.test/blog?page=2">
|
|
200 /blog/hello-acme contains=og:title
|
|
200 /blog/hello-acme contains=Acme says hello and introduces its blog.
|
|
|
|
# Search (the playground sets journal.routes.search: '/search'). 11 posts
|
|
# match "acme": 2 pages of 9. Not route-cached (the playground caches /**),
|
|
# noindex, follow, and left out of the sitemap.
|
|
200 /search?q=acme contains=Hello Acme
|
|
200 /search?q=acme contains=11 results
|
|
200 /search?q=acme contains=noindex, follow
|
|
200 /search?q=acme&page=2 contains=Acme Note 12
|
|
404 /search?q=acme&page=3
|
|
404 /search?q=acme&page=abc
|
|
200 /search?q=unsafe contains=Unsafe Sample notcontains=Hello Acme
|
|
200 /search?q=unsafe contains=1 result
|
|
200 /search?q=zzzzzz contains=Nothing found for “zzzzzz”.
|
|
200 /search?q=ac contains=Type at least 3 characters.
|
|
200 /search contains=Type what you are looking for.
|
|
# The term is text everywhere it is rendered (attributes may keep a bare <).
|
|
200 /search?q=%3Cscript%3Ealert(1)%3C%2Fscript%3E contains=Search results: <script>alert(1) notcontains=>Search results: <script>
|
|
200 /pl/search?q=acme contains=11 wyników
|
|
200 /pl/search?q=unsafe contains=1 wynik
|
|
200 /sitemap.xml notcontains=/search
|
|
# The header box renders its no-JS form to the search route on every page.
|
|
200 /blog contains=action="/search"
|
|
200 /pl/blog contains=action="/pl/search"
|