From 78f58cd270f1e72de3836004d124a7ac7abe1a3e Mon Sep 17 00:00:00 2001 From: Kevin Pfefferle Date: Wed, 20 Jan 2021 16:42:40 -0500 Subject: [PATCH] Test both multiple and single selection modes --- .../integration/components/selection-test.js | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tests/integration/components/selection-test.js b/tests/integration/components/selection-test.js index 0b5bb1ad7..0ce367c9a 100644 --- a/tests/integration/components/selection-test.js +++ b/tests/integration/components/selection-test.js @@ -6,6 +6,7 @@ import TablePage from 'ember-table/test-support/pages/ember-table'; import { generateTable } from '../../helpers/generate-table'; import { generateRows } from 'dummy/utils/generators'; import { A as emberA } from '@ember/array'; +import EmberObject from '@ember/object'; import { run } from '@ember/runloop'; import { scrollTo } from 'ember-native-dom-helpers'; import { registerTestWarnHandler } from '../../helpers/warn-handlers'; @@ -245,6 +246,29 @@ module('Integration | selection', () => { assert.ok(table.validateSelected(0), 'Zoe is selected after external change'); }); + + test('Rows are selected when selection is changed externally with selectionMatchFunction', async function(assert) { + let selection = emberA(); + let selectionMatchFunction = function(a, b) { + if (!a || !b) { + return false; + } + return a.id === b.id; + }; + let rows = [ + { id: 1, name: 'Zoe', age: 34 }, + { id: 2, name: 'Alex', age: 43 }, + { id: 3, name: 'Liz', age: 25 }, + ]; + + await generateTable(this, { rows, selection, selectionMatchFunction }); + + assert.ok(table.validateSelected(), 'rows are not selected'); + + run(() => selection.pushObject({ id: rows[0].id })); + + assert.ok(table.validateSelected(0), 'Zoe is selected after external change'); + }); }); componentModule('single', function() { @@ -314,6 +338,46 @@ module('Integration | selection', () => { await table.selectRow(0); }); + + test('Row is selected when selection is changed externally', async function(assert) { + this.set('selection', null); + let rows = [{ name: 'Zoe', age: 34 }, { name: 'Alex', age: 43 }, { name: 'Liz', age: 25 }]; + + await generateTable(this, { rows, rowSelectionMode: 'single' }); + + assert.ok(table.validateSelected(), 'rows are not selected'); + + this.set('selection', rows[0]); + + assert.ok(table.validateSelected(0), 'Zoe is selected after external change'); + }); + + test('Rows are selected when selection is changed externally with selectionMatchFunction', async function(assert) { + this.set('selection', null); + let selectionMatchFunction = function(a, b) { + if (!a || !b) { + return false; + } + return a.id === b.id; + }; + let rows = [ + { id: 1, name: 'Zoe', age: 34 }, + { id: 2, name: 'Alex', age: 43 }, + { id: 3, name: 'Liz', age: 25 }, + ]; + + await generateTable(this, { + rows, + rowSelectionMode: 'single', + selectionMatchFunction, + }); + + assert.ok(table.validateSelected(), 'rows are not selected'); + + this.set('selection', { id: rows[0].id }); + + assert.ok(table.validateSelected(0), 'Zoe is selected after external change'); + }); }); componentModule('none', function() {