blob: ef2a680fd537a0d922522363e655f330ee7b9f16 [file]
/**
* @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../../test/common-test-setup';
import './gr-change-table-editor';
import {GrChangeTableEditor} from './gr-change-table-editor';
import {queryAndAssert} from '../../../test/test-utils';
import {createServerInfo} from '../../../test/test-data-generators';
import {assert, fixture, html} from '@open-wc/testing';
import {ColumnNames} from '../../../constants/constants';
import {MdCheckbox} from '@material/web/checkbox/checkbox';
suite('gr-change-table-editor tests', () => {
let element: GrChangeTableEditor;
let columns: string[];
setup(async () => {
element = await fixture<GrChangeTableEditor>(
html`<gr-change-table-editor></gr-change-table-editor>`
);
columns = [
ColumnNames.SUBJECT,
ColumnNames.OWNER,
ColumnNames.REVIEWERS,
ColumnNames.REPO,
ColumnNames.BRANCH,
ColumnNames.UPDATED,
ColumnNames.SIZE,
// ColumnNames.STATUS omitted for testing
];
element.localChangeTableColumns = columns;
element.showNumber = false;
element.serverConfig = createServerInfo();
await element.updateComplete;
});
test('renders', () => {
assert.shadowDom.equal(
element,
/* HTML */ ` <div class="gr-form-styles">
<h2 class="edited heading-2" id="ChangeTableColumns">
Change Table Columns
</h2>
<fieldset id="changeTableColumns">
<table id="changeCols">
<thead>
<tr>
<th class="nameHeader">Column</th>
<th class="visibleHeader">Visible</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<label for="numberCheckbox"> Number </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="numberCheckbox" name="number"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Subject"> Subject </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Subject" name="Subject"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Owner"> Owner </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Owner" name="Owner"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Reviewers"> Reviewers </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Reviewers" name="Reviewers"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Repo"> Repo </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Repo" name="Repo"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Branch"> Branch </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Branch" name="Branch"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Updated"> Updated </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Updated" name="Updated"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Size"> Size </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Size" name="Size"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="Status"> Status </label>
</td>
<td class="checkboxContainer">
<md-checkbox id="Status" name="Status"> </md-checkbox>
</td>
</tr>
<tr>
<td>
<label for="labelsFilter"> Shown Labels </label>
</td>
<td class="labelsFilterCell">
<md-outlined-text-field
class="labelsFilterInput showBlueFocusBorder"
id="labelsFilter"
placeholder="CR,V (leave empty to see all labels)"
>
</md-outlined-text-field>
</td>
</tr>
</tbody>
</table>
<gr-button
aria-disabled="false"
id="saveChangeTable"
role="button"
tabindex="0"
>
Save Changes
</gr-button>
</fieldset>
</div>`
);
});
test('renders', () => {
const rows = queryAndAssert(element, 'tbody').querySelectorAll('tr');
let tds;
// The `+ 2` is for the number column and the labels column, which aren't
// included in the change table behavior's list.
assert.equal(rows.length, element.defaultColumns.length + 2);
for (let i = 0; i < element.defaultColumns.length; i++) {
tds = rows[i + 1].querySelectorAll('td');
assert.equal(tds[0].textContent, element.defaultColumns[i]);
}
});
test('hide item', async () => {
const checkbox = queryAndAssert<MdCheckbox>(
element,
'table tr:nth-child(2) md-checkbox'
);
const isChecked = checkbox.checked;
const displayedLength = element.localChangeTableColumns.length;
assert.isTrue(isChecked);
checkbox.click();
await element.updateComplete;
assert.equal(element.localChangeTableColumns.length, displayedLength - 1);
});
test('show and hide item', async () => {
element.localChangeTableColumns = [
ColumnNames.STATUS,
ColumnNames.OWNER,
ColumnNames.REPO,
ColumnNames.BRANCH,
ColumnNames.UPDATED,
];
// trigger computation of enabled displayed columns
element.serverConfig = createServerInfo();
await element.updateComplete;
const checkboxSubject = queryAndAssert<MdCheckbox>(
element,
'table tr:nth-child(2) md-checkbox'
);
assert.equal(checkboxSubject.name, 'Subject');
const checkboxOwner = queryAndAssert<MdCheckbox>(
element,
'table tr:nth-child(3) md-checkbox'
);
assert.equal(checkboxOwner.name, 'Owner');
assert.equal(element.localChangeTableColumns.length, 5);
assert.isFalse(checkboxSubject.checked);
assert.isTrue(checkboxOwner.checked);
checkboxSubject.click();
await element.updateComplete;
assert.equal(element.localChangeTableColumns.length, 6);
assert.isTrue(checkboxSubject.checked);
assert.isTrue(checkboxOwner.checked);
checkboxOwner.click();
await element.updateComplete;
assert.equal(element.localChangeTableColumns.length, 5);
assert.isTrue(checkboxSubject.checked);
assert.isFalse(checkboxOwner.checked);
});
test('handleNumberCheckboxClick', async () => {
const numberInput = queryAndAssert<MdCheckbox>(
element,
'.checkboxContainer md-checkbox[name=number]'
);
numberInput.click();
await element.updateComplete;
assert.isTrue(element.showNumber);
numberInput.click();
await element.updateComplete;
assert.isFalse(element.showNumber);
});
test('handleTargetClick', () => {
assert.include(element.localChangeTableColumns, 'Subject');
const subjectInput = queryAndAssert<MdCheckbox>(
element,
'.checkboxContainer md-checkbox[name=Subject]'
);
subjectInput.click();
assert.notInclude(element.localChangeTableColumns, 'Subject');
});
test('handleSaveChangeTable', async () => {
let newColumns = ['Owner', 'Project', 'Branch'];
element.localChangeTableColumns = newColumns.slice(0);
element.showNumber = false;
await element.handleSaveChangeTable();
assert.deepEqual(element.prefs.change_table, newColumns);
assert.isNotOk(element.prefs.legacycid_in_change_table);
newColumns = ['Size'];
element.localChangeTableColumns = newColumns;
element.showNumber = true;
await element.handleSaveChangeTable();
assert.deepEqual(element.prefs.change_table, newColumns);
assert.isTrue(element.prefs.legacycid_in_change_table);
});
});