This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/acceptance/search-test.js
Robin Ward 3394d994e9 FIX: Tests were using jQuery selectors
For the most part `querySelectorAll` will work with jQuery selectors,
but the big exception is `:eq(0)` and similar. Those needed to be
replaced.
2020-11-23 11:36:07 -05:00

201 lines
6.2 KiB
JavaScript

import { queryAll } from "discourse/tests/helpers/qunit-helpers";
import { exists } from "discourse/tests/helpers/qunit-helpers";
import { click, triggerKeyEvent, fillIn, visit } from "@ember/test-helpers";
import { test } from "qunit";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import searchFixtures from "discourse/tests/fixtures/search-fixtures";
acceptance("Search - Anonymous", function (needs) {
let calledEmpty = false;
needs.pretender((server, helper) => {
server.get("/search/query", (request) => {
if (!request.queryParams["search_context[type]"]) {
calledEmpty = true;
}
return helper.response(searchFixtures["search/query"]);
});
});
test("search", async function (assert) {
await visit("/");
await click("#search-button");
assert.ok(exists("#search-term"), "it shows the search bar");
assert.ok(!exists(".search-menu .results ul li"), "no results by default");
await fillIn("#search-term", "dev");
await triggerKeyEvent("#search-term", "keyup", 16);
assert.ok(exists(".search-menu .results ul li"), "it shows results");
assert.ok(
exists(".search-menu .results ul li .topic-title[data-topic-id]"),
"topic has data-topic-id"
);
await click(".show-help");
assert.equal(
queryAll(".full-page-search").val(),
"dev",
"it shows the search term"
);
assert.ok(
exists(".search-advanced-options"),
"advanced search is expanded"
);
});
test("search for a tag", async function (assert) {
await visit("/");
await click("#search-button");
await fillIn("#search-term", "evil");
await triggerKeyEvent("#search-term", "keyup", 16);
assert.ok(exists(".search-menu .results ul li"), "it shows results");
});
test("search scope checkbox", async function (assert) {
await visit("/tag/important");
await click("#search-button");
assert.ok(
exists(".search-context input:checked"),
"scope to tag checkbox is checked"
);
await click("#search-button");
await visit("/c/bug");
await click("#search-button");
assert.ok(
exists(".search-context input:checked"),
"scope to category checkbox is checked"
);
await click("#search-button");
await visit("/t/internationalization-localization/280");
await click("#search-button");
assert.not(
exists(".search-context input:checked"),
"scope to topic checkbox is not checked"
);
await click("#search-button");
await visit("/u/eviltrout");
await click("#search-button");
assert.ok(
exists(".search-context input:checked"),
"scope to user checkbox is checked"
);
});
test("Search with context", async function (assert) {
await visit("/t/internationalization-localization/280/1");
await click("#search-button");
await fillIn("#search-term", "a proper");
await click(".search-context input[type='checkbox']");
await triggerKeyEvent("#search-term", "keyup", 16);
assert.ok(exists(".search-menu .results ul li"), "it shows results");
const highlighted = [];
queryAll("#post_7 span.highlighted").map((_, span) => {
highlighted.push(span.innerText);
});
assert.deepEqual(
highlighted,
["a proper"],
"it should highlight the post with the search terms correctly"
);
calledEmpty = false;
await visit("/");
await click("#search-button");
assert.ok(!exists(".search-context input[type='checkbox']"));
assert.ok(calledEmpty, "it triggers a new search");
await visit("/t/internationalization-localization/280/1");
await click("#search-button");
assert.ok(!$(".search-context input[type=checkbox]").is(":checked"));
});
test("Right filters are shown to anonymous users", async function (assert) {
const inSelector = selectKit(".select-kit#in");
await visit("/search?expanded=true");
await inSelector.expand();
assert.ok(inSelector.rowByValue("first").exists());
assert.ok(inSelector.rowByValue("pinned").exists());
assert.ok(inSelector.rowByValue("wiki").exists());
assert.ok(inSelector.rowByValue("images").exists());
assert.notOk(inSelector.rowByValue("unseen").exists());
assert.notOk(inSelector.rowByValue("posted").exists());
assert.notOk(inSelector.rowByValue("watching").exists());
assert.notOk(inSelector.rowByValue("tracking").exists());
assert.notOk(inSelector.rowByValue("bookmarks").exists());
assert.notOk(exists(".search-advanced-options .in-likes"));
assert.notOk(exists(".search-advanced-options .in-private"));
assert.notOk(exists(".search-advanced-options .in-seen"));
});
});
acceptance("Search - Authenticated", function (needs) {
needs.user();
test("Right filters are shown to logged-in users", async function (assert) {
const inSelector = selectKit(".select-kit#in");
await visit("/search?expanded=true");
await inSelector.expand();
assert.ok(inSelector.rowByValue("first").exists());
assert.ok(inSelector.rowByValue("pinned").exists());
assert.ok(inSelector.rowByValue("wiki").exists());
assert.ok(inSelector.rowByValue("images").exists());
assert.ok(inSelector.rowByValue("unseen").exists());
assert.ok(inSelector.rowByValue("posted").exists());
assert.ok(inSelector.rowByValue("watching").exists());
assert.ok(inSelector.rowByValue("tracking").exists());
assert.ok(inSelector.rowByValue("bookmarks").exists());
assert.ok(exists(".search-advanced-options .in-likes"));
assert.ok(exists(".search-advanced-options .in-private"));
assert.ok(exists(".search-advanced-options .in-seen"));
});
});
acceptance("Search - with tagging enabled", function (needs) {
needs.user();
needs.settings({ tagging_enabled: true });
test("displays tags", async function (assert) {
await visit("/");
await click("#search-button");
await fillIn("#search-term", "dev");
await triggerKeyEvent("#search-term", "keyup", 16);
const tags = queryAll(
".search-menu .results ul li:nth-of-type(1) .discourse-tags"
)
.text()
.trim();
assert.equal(tags, "dev slow");
});
});