mirror of
https://github.com/discourse/discourse.git
synced 2026-08-14 13:58:53 +08:00
Currently, most of the JS test modules follow this
convention:
```
module("Integration | Component | topic-dismiss-buttons"
```
Which is a legacy from when ember components etc were
rendered in templates like this:
```
{{d-button title="foo"}}
```
Instead, this commit updates all of them to follow this
PascalCase convention:
```
module("Integration | Component | TopicDismissButtons", function (hooks) {
```
No linting is added to enforce this, we suspect that it's
mostly a result of cargo culting, and people will add new
tests following PascalCase convention.
Also adds an initial AI skill for writing JS tests.
122 lines
3.4 KiB
Text
Vendored
122 lines
3.4 KiB
Text
Vendored
import { render } from "@ember/test-helpers";
|
|
import { module, test } from "qunit";
|
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
import { i18n } from "discourse-i18n";
|
|
import PollInfo from "discourse/plugins/poll/discourse/components/poll-info";
|
|
|
|
const OPTIONS = [
|
|
{ id: "1ddc47be0d2315b9711ee8526ca9d83f", html: "This", votes: 2, rank: 0 },
|
|
{ id: "70e743697dac09483d7b824eaadb91e1", html: "That", votes: 3, rank: 0 },
|
|
{ id: "6c986ebcde3d5822a6e91a695c388094", html: "Other", votes: 5, rank: 0 },
|
|
];
|
|
|
|
module("Component | PollInfo", function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("public multiple poll with results anytime", async function (assert) {
|
|
this.setProperties({
|
|
isMultiple: true,
|
|
min: 1,
|
|
max: 2,
|
|
options: OPTIONS,
|
|
close: null,
|
|
closed: false,
|
|
results: [],
|
|
showResults: false,
|
|
postUserId: 59,
|
|
isPublic: true,
|
|
hasVoted: true,
|
|
voters: [],
|
|
});
|
|
|
|
await render(
|
|
<template>
|
|
<PollInfo
|
|
@options={{this.options}}
|
|
@min={{this.min}}
|
|
@max={{this.max}}
|
|
@isMultiple={{this.isMultiple}}
|
|
@close={{this.close}}
|
|
@closed={{this.closed}}
|
|
@results={{this.results}}
|
|
@showResults={{this.showResults}}
|
|
@postUserId={{this.postUserId}}
|
|
@isPublic={{this.isPublic}}
|
|
@hasVoted={{this.hasVoted}}
|
|
@voters={{this.voters}}
|
|
/>
|
|
</template>
|
|
);
|
|
|
|
assert.dom(".poll-info_instructions li.multiple-help-text").hasText(
|
|
i18n("poll.multiple.help.up_to_max_options", {
|
|
count: this.max,
|
|
}).replace(/<\/?[^>]+(>|$)/g, ""),
|
|
"displays the multiple help text"
|
|
);
|
|
|
|
assert
|
|
.dom(".poll-info_instructions li.is-public")
|
|
.hasText(
|
|
i18n("poll.public.title").replace(/<\/?[^>]+(>|$)/g, ""),
|
|
"displays the public label"
|
|
);
|
|
});
|
|
|
|
test("public multiple poll with results only shown on vote", async function (assert) {
|
|
this.setProperties({
|
|
isMultiple: true,
|
|
min: 1,
|
|
max: 2,
|
|
options: OPTIONS,
|
|
close: null,
|
|
closed: false,
|
|
results: "on_vote",
|
|
showResults: false,
|
|
postUserId: 59,
|
|
isPublic: true,
|
|
hasVoted: false,
|
|
voters: [],
|
|
});
|
|
|
|
await render(
|
|
<template>
|
|
<PollInfo
|
|
@options={{this.options}}
|
|
@min={{this.min}}
|
|
@max={{this.max}}
|
|
@isMultiple={{this.isMultiple}}
|
|
@close={{this.close}}
|
|
@closed={{this.closed}}
|
|
@results={{this.results}}
|
|
@showResults={{this.showResults}}
|
|
@postUserId={{this.postUserId}}
|
|
@isPublic={{this.isPublic}}
|
|
@hasVoted={{this.hasVoted}}
|
|
@voters={{this.voters}}
|
|
/>
|
|
</template>
|
|
);
|
|
|
|
assert.dom(".poll-info_instructions li.multiple-help-text").hasText(
|
|
i18n("poll.multiple.help.up_to_max_options", {
|
|
count: this.max,
|
|
}).replace(/<\/?[^>]+(>|$)/g, ""),
|
|
"displays the multiple help text"
|
|
);
|
|
|
|
assert
|
|
.dom(".poll-info_instructions li.results-on-vote span")
|
|
.hasText(
|
|
i18n("poll.results.vote.title").replace(/<\/?[^>]+(>|$)/g, ""),
|
|
"displays the results on vote label"
|
|
);
|
|
|
|
assert
|
|
.dom(".poll-info_instructions li.is-public")
|
|
.hasText(
|
|
i18n("poll.public.title").replace(/<\/?[^>]+(>|$)/g, ""),
|
|
"displays the public label"
|
|
);
|
|
});
|
|
});
|