Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEV: Update tests #323

Merged
merged 1 commit into from
Aug 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion assets/javascripts/discourse/components/query-result.js
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ function randomIdShort() {

function transformedRelTable(table, modelClass) {
const result = {};
table.forEach((item) => {
table?.forEach((item) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is related to flaky tests (don't ask… 🥲)

if (modelClass) {
result[item.id] = modelClass.create(item);
} else {
Expand Down
69 changes: 27 additions & 42 deletions test/javascripts/acceptance/list-queries-test.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer";
import {
acceptance,
count,
exists,
query,
} from "discourse/tests/helpers/qunit-helpers";
import I18n from "I18n";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import I18n from "discourse-i18n";

acceptance("Data Explorer Plugin | List Queries", function (needs) {
needs.user();
needs.settings({ data_explorer_enabled: true });
needs.hooks.beforeEach(() => {
clearPopupMenuOptionsCallback();
});

needs.pretender((server, helper) => {
server.get("/admin/plugins/explorer/groups.json", () => {
Expand Down Expand Up @@ -142,44 +133,38 @@ acceptance("Data Explorer Plugin | List Queries", function (needs) {
});
});

test("it renders the page with the list of queries", async function (assert) {
test("renders the page with the list of queries", async function (assert) {
await visit("/admin/plugins/explorer");

assert.ok(
query("div.query-list input.ember-text-field").placeholder ===
assert
.dom("div.query-list input.ember-text-field")
.hasAttribute(
"placeholder",
I18n.t("explorer.search_placeholder"),
"the search box was rendered"
);
"the search box was rendered"
);

assert.ok(
exists("div.query-list button.btn-icon svg.d-icon-plus"),
"the add query button was rendered"
);
assert
.dom("div.query-list button.btn-icon svg.d-icon-plus")
.exists("the add query button was rendered");

assert.ok(
query("div.query-list button.btn-icon-text span.d-button-label")
.innerText === I18n.t("explorer.import.label"),
"the import button was rendered"
);
assert
.dom("div.query-list button.btn-icon-text span.d-button-label")
.hasText(
I18n.t("explorer.import.label"),
"the import button was rendered"
);

assert.equal(
count("div.container table.recent-queries tbody tr"),
2,
"the list of queries was rendered"
);
assert
.dom("div.container table.recent-queries tbody tr")
.exists({ count: 2 }, "the list of queries was rendered");

assert.ok(
query(
"div.container table.recent-queries tbody tr:nth-child(1) td a"
).innerText.startsWith("Top 100 Likers"),
"The first query was rendered"
);
assert
.dom("div.container table.recent-queries tbody tr:nth-child(1) td a")
.hasText(/^\s*Top 100 Likers/, "The first query was rendered");

assert.ok(
query(
"div.container table.recent-queries tbody tr:nth-child(2) td a"
).innerText.startsWith("Top 100 Active Topics"),
"The second query was rendered"
);
assert
.dom("div.container table.recent-queries tbody tr:nth-child(2) td a")
.hasText(/^\s*Top 100 Active Topics/, "The second query was rendered");
});
});
6 changes: 1 addition & 5 deletions test/javascripts/acceptance/new-query-test.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import { click, currentURL, fillIn, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";

acceptance("Data Explorer Plugin | New Query", function (needs) {
needs.user();
needs.settings({ data_explorer_enabled: true });
needs.hooks.beforeEach(() => {
clearPopupMenuOptionsCallback();
});

needs.pretender((server, helper) => {
server.get("/admin/plugins/explorer/groups.json", () => {
Expand Down Expand Up @@ -61,6 +57,6 @@ acceptance("Data Explorer Plugin | New Query", function (needs) {
// select create new query button
await click(".query-create button");

assert.equal(currentURL(), "/admin/plugins/explorer?id=-15");
assert.strictEqual(currentURL(), "/admin/plugins/explorer?id=-15");
});
});
37 changes: 17 additions & 20 deletions test/javascripts/acceptance/param-input-test.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { click, currentURL, fillIn, visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
exists,
query,
} from "discourse/tests/helpers/qunit-helpers";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";

acceptance("Data Explorer Plugin | Param Input", function (needs) {
needs.user();
Expand Down Expand Up @@ -327,6 +323,7 @@ acceptance("Data Explorer Plugin | Param Input", function (needs) {
},
});
});

server.put("/admin/plugins/explorer/queries/3", () => {
return helper.response({
query: {
Expand All @@ -353,58 +350,58 @@ acceptance("Data Explorer Plugin | Param Input", function (needs) {
});
});

test("it puts params for the query into the url", async function (assert) {
test("puts params for the query into the url", async function (assert) {
await visit("/admin/plugins/explorer?id=-6");
const monthsAgoValue = "2";
await fillIn(".query-params input", monthsAgoValue);
await click("form.query-run button");

const searchParams = new URLSearchParams(currentURL().split("?")[1]);
const monthsAgoParam = JSON.parse(searchParams.get("params")).months_ago;
assert.equal(monthsAgoParam, monthsAgoValue);
assert.strictEqual(monthsAgoParam, monthsAgoValue);
});

test("it puts params for the query into the url for group reports", async function (assert) {
test("puts params for the query into the url for group reports", async function (assert) {
await visit("/g/discourse/reports/-8");
const monthsAgoValue = "2";
await fillIn(".query-params input", monthsAgoValue);
await click("form.query-run button");

const searchParams = new URLSearchParams(currentURL().split("?")[1]);
const monthsAgoParam = JSON.parse(searchParams.get("params")).months_ago;
assert.equal(monthsAgoParam, monthsAgoValue);
assert.strictEqual(monthsAgoParam, monthsAgoValue);
});

test("it loads the page if one of the parameter is null", async function (assert) {
test("loads the page if one of the parameter is null", async function (assert) {
await visit('/admin/plugins/explorer?id=-7&params={"user":null}');
assert.ok(exists(".query-params .user-chooser"));
assert.ok(exists(".query-run .btn.btn-primary"));
assert.dom(".query-params .user-chooser").exists();
assert.dom(".query-run .btn.btn-primary").exists();
});

test("it loads the page if one of the parameter is null for group reports", async function (assert) {
test("loads the page if one of the parameter is null for group reports", async function (assert) {
await visit('/g/discourse/reports/-8?params={"months_ago":null}');
assert.ok(exists(".query-params input"));
assert.ok(exists(".query-run .btn.btn-primary"));
assert.dom(".query-params input").exists();
assert.dom(".query-run .btn.btn-primary").exists();
});

test("it applies params when running a report", async function (assert) {
test("applies params when running a report", async function (assert) {
await visit("/g/discourse/reports/-8");
const monthsAgoValue = "2";
await fillIn(".query-params input", monthsAgoValue);
await click("form.query-run button");
assert.equal(query(".query-params input").value, monthsAgoValue);
assert.dom(".query-params input").hasValue(monthsAgoValue);
});

test("it creates input boxes if has parameters when save", async function (assert) {
test("creates input boxes if has parameters when save", async function (assert) {
await visit("/admin/plugins/explorer?id=3");
assert.notOk(exists(".query-params input"));
assert.dom(".query-params input").doesNotExist();
await click(".query-edit .btn-edit-query");
await click(".query-editor .ace_text-input");
await fillIn(
".query-editor .ace_text-input",
"-- [params]\n-- int :months_ago = 1\n\nSELECT 1"
);
await click(".query-edit .btn-save-query");
assert.ok(exists(".query-params input"));
assert.dom(".query-params input").exists();
});
});
93 changes: 35 additions & 58 deletions test/javascripts/acceptance/run-query-test.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer";
import {
acceptance,
exists,
query,
queryAll,
} from "discourse/tests/helpers/qunit-helpers";
import I18n from "I18n";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import I18n from "discourse-i18n";

acceptance("Data Explorer Plugin | Run Query", function (needs) {
needs.user();
needs.settings({ data_explorer_enabled: true });
needs.hooks.beforeEach(() => {
clearPopupMenuOptionsCallback();
});

needs.pretender((server, helper) => {
server.get("/admin/plugins/explorer/groups.json", () => {
Expand Down Expand Up @@ -185,71 +176,57 @@ acceptance("Data Explorer Plugin | Run Query", function (needs) {
});
});

test("it runs query and renders data and a chart", async function (assert) {
test("runs query and renders data and a chart", async function (assert) {
await visit("/admin/plugins/explorer?id=-6");

assert.ok(
query("div.name h1").innerText.trim() === "Top 100 Likers",
"the query name was rendered"
);
assert
.dom("div.name h1")
.hasText("Top 100 Likers", "the query name was rendered");

assert.ok(exists("div.query-edit"), "the query code was rendered");
assert.dom("div.query-edit").exists("the query code was rendered");

assert.ok(
query("form.query-run button span").innerText.trim() ===
I18n.t("explorer.run"),
"the run button was rendered"
);
assert
.dom("form.query-run button span")
.hasText(I18n.t("explorer.run"), "the run button was rendered");

await click("form.query-run button");

assert.ok(
queryAll("div.query-results table tbody tr").length === 2,
"the table with query results was rendered"
);
assert
.dom("div.query-results table tbody tr")
.exists({ count: 2 }, "the table with query results was rendered");

assert.ok(
query("div.result-info button:nth-child(3) span").innerText.trim() ===
I18n.t("explorer.show_graph"),
"the chart button was rendered"
);
assert
.dom("div.result-info button:nth-child(3) span")
.hasText(I18n.t("explorer.show_graph"), "the chart button was rendered");

await click("div.result-info button:nth-child(3)");

assert.ok(exists("canvas"), "the chart was rendered");
assert.dom("canvas").exists("the chart was rendered");
});

test("it runs query and renders 0, false, and NULL values correctly", async function (assert) {
test("runs query and renders 0, false, and NULL values correctly", async function (assert) {
await visit("/admin/plugins/explorer?id=2");

assert.ok(
query("div.name h1").innerText.trim() === "What about 0?",
"the query name was rendered"
);
assert
.dom("div.name h1")
.hasText("What about 0?", "the query name was rendered");

assert.ok(
query("form.query-run button span").innerText.trim() ===
I18n.t("explorer.run"),
"the run button was rendered"
);
assert
.dom("form.query-run button span")
.hasText(I18n.t("explorer.run"), "the run button was rendered");

await click("form.query-run button");

assert.ok(
query("div.query-results tbody td:nth-child(1)").innerText.trim() === "0",
"renders '0' values"
);

assert.ok(
query("div.query-results tbody td:nth-child(2)").innerText.trim() ===
"NULL",
"renders 'NULL' values"
);

assert.ok(
query("div.query-results tbody td:nth-child(3)").innerText.trim() ===
"false",
"renders 'false' values"
);
assert
.dom("div.query-results tbody td:nth-child(1)")
.hasText("0", "renders '0' values");

assert
.dom("div.query-results tbody td:nth-child(2)")
.hasText("NULL", "renders 'NULL' values");

assert
.dom("div.query-results tbody td:nth-child(3)")
.hasText("false", "renders 'false' values");
});
});
2 changes: 1 addition & 1 deletion test/javascripts/components/param-input-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ module("Data Explorer Plugin | Component | param-input", function (hooks) {
assert.rejects(this.submit());
});

test("async normalizion", async function (assert) {
test("async normalization", async function (assert) {
this.setProperties({
param_info: [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { array } from "@ember/helper";
import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import DataExplorerBarChart from "../../discourse/components/data-explorer-bar-chart";

module(
"Data Explorer Plugin | Integration | Component | data-explorer-bar-chart",
function (hooks) {
setupRenderingTest(hooks);

test("renders a chart", async function (assert) {
await render(<template>
<DataExplorerBarChart
@labels={{array "label_1" "label_2"}}
@values={{array 115 1000}}
@datasetName="data"
/>
</template>);

assert.dom("canvas").exists("renders a canvas");
});
}
);
Loading