import { module, test } from "qunit"; import { setupRenderingTest } from "discourse/tests/helpers/component-test"; import { render } from "@ember/test-helpers"; import { hbs } from "ember-cli-htmlbars"; import selectKit from "discourse/tests/helpers/select-kit-helper"; import { exists, paste, query } from "discourse/tests/helpers/qunit-helpers"; const DEFAULT_CONTENT = [ { id: 1, name: "foo" }, { id: 2, name: "bar" }, { id: 3, name: "baz" }, ]; const setDefaultState = (ctx, options) => { const properties = Object.assign( { content: DEFAULT_CONTENT, value: null, }, options || {} ); ctx.setProperties(properties); }; module("Integration | Component | select-kit/multi-select", function (hooks) { setupRenderingTest(hooks); hooks.beforeEach(function () { this.set("subject", selectKit()); }); test("content", async function (assert) { setDefaultState(this); await render(hbs` `); await this.subject.expand(); const content = this.subject.displayedContent(); assert.strictEqual(content.length, 3, "it shows rows"); assert.strictEqual( content[0].name, this.content.firstObject.name, "it has the correct name" ); assert.strictEqual( content[0].id, this.content.firstObject.id.toString(), "it has the correct value" ); assert.strictEqual( this.subject.header().value(), null, "it doesn't set a value from the content" ); }); test("maximum=1", async function (assert) { setDefaultState(this); await render(hbs` `); await this.subject.expand(); await this.subject.selectRowByValue(1); assert.notOk(this.subject.isExpanded(), "it closes the dropdown"); await this.subject.expand(); await this.subject.deselectItemByValue(1); assert.ok( this.subject.isExpanded(), "it doesn’t close the dropdown when no selection has been made" ); }); test("maximum=2", async function (assert) { setDefaultState(this); await render(hbs` `); await this.subject.expand(); await this.subject.selectRowByValue(1); assert.ok(this.subject.isExpanded(), "it doesn’t close the dropdown"); }); test("pasting", async function (assert) { setDefaultState(this); await render(hbs` `); await this.subject.expand(); await paste(query(".filter-input"), "foo|bar"); assert.equal(this.subject.header().value(), "1,2"); }); test("no value property with no content", async function (assert) { setDefaultState(this); await render(hbs` `); await this.subject.expand(); assert.notOk( exists(".selected-content"), "it doesn’t render an empty content div" ); }); });