diff --git a/addon/components/bs-accordion/item/title.hbs b/addon/components/bs-accordion/item/title.hbs
index e1cb6529f..dc9861660 100644
--- a/addon/components/bs-accordion/item/title.hbs
+++ b/addon/components/bs-accordion/item/title.hbs
@@ -1,21 +1,21 @@
{{!-- template-lint-disable no-nested-interactive --}}
{{!-- @todo fix this, see https://github.com/kaliber5/ember-bootstrap/issues/999 --}}
{{#if (macroCondition (macroGetOwnConfig "isNotBS3"))}}
-
{{/if}}
{{#if (macroCondition (macroGetOwnConfig "isBS3"))}}
diff --git a/tests/helpers/bootstrap.js b/tests/helpers/bootstrap.js
index f15b261a1..b1124f6f4 100644
--- a/tests/helpers/bootstrap.js
+++ b/tests/helpers/bootstrap.js
@@ -95,6 +95,14 @@ export function formHelpTextClass() {
return versionDependent('help-block', 'form-text');
}
+export function accordionClass() {
+ return versionDependent('panel-group', 'accordion');
+}
+
+export function accordionItemClass() {
+ return versionDependent('panel', 'card');
+}
+
export function accordionClassFor(type) {
type = type ? `-${type}` : '';
return versionDependent(`panel${type}`, type ? `bg${type}` : 'card');
diff --git a/tests/integration/components/bs-accordion-test.js b/tests/integration/components/bs-accordion-test.js
index 9051260e3..f0c5adc95 100644
--- a/tests/integration/components/bs-accordion-test.js
+++ b/tests/integration/components/bs-accordion-test.js
@@ -1,13 +1,13 @@
import { module } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
-import { render, click, settled } from '@ember/test-helpers';
+import { click, render, settled } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
import {
- accordionClassFor,
+ accordionClass,
+ accordionItemClass,
+ accordionItemClickableSelector,
accordionItemHeadClass,
test,
- testBS3,
- testNotBS3,
visibilityClass,
} from '../../helpers/bootstrap';
import setupNoDeprecations from '../../helpers/setup-no-deprecations';
@@ -23,34 +23,17 @@ module('Integration | Component | bs-accordion', function (hooks) {
this.send = (actionName, ...args) => this.actions[actionName].apply(this, args);
});
- testBS3('accordion has correct default markup', async function (assert) {
+ test('accordion has correct default markup', async function (assert) {
await render(hbs`
CONTENT1
CONTENT2
`);
- assert.dom('.panel-group').exists('accordion has panel-group class');
- });
-
- testNotBS3('accordion has correct default markup', async function (assert) {
- await render(hbs`
-
- CONTENT1
- CONTENT2
-
- `);
- assert.dom('.accordion .card').exists('accordion has card within accordion');
- });
-
- test('accordion yields items', async function (assert) {
- await render(hbs`
-
- CONTENT1
- CONTENT2
-
- `);
- assert.dom(`.${accordionClassFor()}`).exists({ count: 2 }, 'accordion yields item');
+ assert.dom(`.${accordionClass()}`).exists({ count: 1 }, 'accordion has correct class');
+ assert
+ .dom(`.${accordionClass()} .${accordionItemClass()}`)
+ .exists({ count: 2 }, 'accordion item has correct class');
});
test('accordion with preselected item has this item expanded', async function (assert) {
@@ -63,11 +46,11 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child .${accordionItemHeadClass()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
assert
- .dom(`.${accordionClassFor()}:first-child .collapse`)
+ .dom(`.${accordionItemClass()}:first-child .collapse`)
.hasClass(visibilityClass(), `tabpanel has ${visibilityClass()} class`);
});
@@ -84,10 +67,10 @@ module('Integration | Component | bs-accordion', function (hooks) {
// wait for transitions to complete
await settled();
assert
- .dom(`.${accordionClassFor()}:last-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:last-child .${accordionItemHeadClass()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:last-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:last-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:last-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:last-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
});
test('clicking collapsed item expands it', async function (assert) {
@@ -97,13 +80,13 @@ module('Integration | Component | bs-accordion', function (hooks) {
CONTENT2
`);
- await click(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`);
+ await click(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`);
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child .${accordionItemHeadClass()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
});
test('clicking expanded item collapses it', async function (assert) {
@@ -115,18 +98,18 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
- await click(`.${accordionItemHeadClass()}`);
+ await click(accordionItemClickableSelector());
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasClass('collapsed', `${accordionItemHeadClass()} has collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
});
test('calls onChange action when changing selection', async function (assert) {
@@ -139,7 +122,7 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
- await click(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`);
+ await click(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`);
assert.ok(action.calledWith(1), 'onClick action has been called.');
});
@@ -154,14 +137,14 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
- await click(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`);
+ await click(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`);
assert.ok(action.calledWith(1), 'onClick action has been called.');
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasClass('collapsed', `${accordionItemHeadClass()} has collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
});
test('supports undefined as value of onChange argument', async function (assert) {
@@ -173,7 +156,7 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
assert.dom(`[data-test-item="1"] .collapse`).hasNoClass(visibilityClass());
- await click(`[data-test-item="1"] .${accordionItemHeadClass()}`);
+ await click(`[data-test-item="1"] ${accordionItemClickableSelector()}`);
assert.dom(`[data-test-item="1"] .collapse`).hasClass(visibilityClass());
});
@@ -186,7 +169,7 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
- await click(`.${accordionClassFor()}:last-child .${accordionItemHeadClass()}`);
+ await click(`.${accordionItemClass()}:last-child ${accordionItemClickableSelector()}`);
assert.equal(this.selected, 1, 'Does not modify public selected property');
});
@@ -202,10 +185,10 @@ module('Integration | Component | bs-accordion', function (hooks) {
await click('#btn');
assert
- .dom(`.${accordionClassFor()}:last-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:last-child ${accordionItemClickableSelector()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:last-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:last-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:last-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:last-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
});
test('clicking collapsed item with contextual title expands it', async function (assert) {
@@ -219,13 +202,13 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
- await click(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`);
+ await click(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`);
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
});
test('clicking expanded item with contextual title collapses it', async function (assert) {
@@ -240,18 +223,18 @@ module('Integration | Component | bs-accordion', function (hooks) {
`);
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasNoClass('collapsed', `${accordionItemHeadClass()} has not collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass(visibilityClass(), 'tabpanel is visible');
- await click(`.${accordionItemHeadClass()}`);
+ await click(accordionItemClickableSelector());
assert
- .dom(`.${accordionClassFor()}:first-child .${accordionItemHeadClass()}`)
+ .dom(`.${accordionItemClass()}:first-child ${accordionItemClickableSelector()}`)
.hasClass('collapsed', `${accordionItemHeadClass()} has collapsed class`);
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
- assert.dom(`.${accordionClassFor()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasClass('collapse', 'tabpanel has collapse class');
+ assert.dom(`.${accordionItemClass()}:first-child .collapse`).hasNoClass(visibilityClass(), 'tabpanel is hidden');
});
test('it passes accessibility checks', async function (assert) {
diff --git a/tests/integration/components/bs-accordion/item-test.js b/tests/integration/components/bs-accordion/item-test.js
index bc5baa6ac..0f68aa622 100644
--- a/tests/integration/components/bs-accordion/item-test.js
+++ b/tests/integration/components/bs-accordion/item-test.js
@@ -10,6 +10,7 @@ import {
accordionItemClickableSelector,
test,
visibilityClass,
+ accordionItemClass,
} from '../../../helpers/bootstrap';
import setupNoDeprecations from '../../../helpers/setup-no-deprecations';
import sinon from 'sinon';
@@ -25,11 +26,12 @@ module('Integration | Component | bs-accordion-item', function (hooks) {
test('accordion item has correct default markup', async function (assert) {
await render(hbs`
CONTENT`);
- assert.dom(`.${accordionClassFor()}`).exists(`has ${accordionClassFor()} class`);
+ assert.dom(`.${accordionItemClass()}`).exists(`has ${accordionItemClass()} class`);
assert
- .dom(`.${accordionClassFor()}`)
+ .dom(`.${accordionItemClass()}`)
.hasClass(accordionClassFor('default'), `has ${accordionClassFor('default')} class`);
- assert.dom(`.${accordionItemHeadClass()}`).hasClass('collapsed', `has collapsed class`);
+ assert.dom(`.${accordionItemClass()} .${accordionItemHeadClass()}`).exists();
+ assert.dom(accordionItemClickableSelector()).hasClass('collapsed', `has collapsed class`);
assert.dom('.collapse').exists();
assert.dom('.collapse').hasNoClass(visibilityClass(), '.collapse is hidden');
assert.dom(accordionTitleSelector()).hasText('TITLE', `${accordionTitleSelector()} has correct title`);
@@ -43,7 +45,7 @@ module('Integration | Component | bs-accordion-item', function (hooks) {
hbs`
CONTENT`
);
- await click(`.${accordionItemHeadClass()}`);
+ await click(accordionItemClickableSelector());
assert.ok(action.calledWith(1), 'onClick action has been called.');
});
@@ -67,8 +69,9 @@ module('Integration | Component | bs-accordion-item', function (hooks) {
);
assert
.dom(accordionItemClickableSelector())
- .hasClass('disabled', 'Clickable accordion selector has `.disabled` class');
- assert.dom(`.${accordionClassFor()}`).hasClass('disabled', 'entire item has `.disabled` class');
+ .hasClass('disabled', 'Clickable accordion selector has `.disabled` class')
+ .hasAttribute('disabled');
+ assert.dom(`.${accordionItemClass()}`).hasClass('disabled', 'entire item has `.disabled` class');
try {
await click(accordionItemClickableSelector());
} catch (e) {