blob: c4b7913a319d04d8a298ea233d8d3497a729ab78 [file] [log] [blame]
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../../test/common-test-setup';
import './gr-edit-preferences-dialog';
import {GrEditPreferencesDialog} from './gr-edit-preferences-dialog';
import {createDefaultEditPrefs} from '../../../constants/constants';
import {
makePrefixedJSON,
queryAndAssert,
stubRestApi,
waitUntil,
} from '../../../test/test-utils';
import {GrButton} from '../../shared/gr-button/gr-button';
import {assert, fixture, html} from '@open-wc/testing';
import {EditPreferencesInfo} from '../../../types/common';
suite('gr-edit-preferences-dialog', () => {
let element: GrEditPreferencesDialog;
let originalEditPrefs: EditPreferencesInfo;
setup(async () => {
originalEditPrefs = {
...createDefaultEditPrefs(),
line_wrapping: true,
};
stubRestApi('getEditPreferences').returns(
Promise.resolve(originalEditPrefs)
);
element = await fixture<GrEditPreferencesDialog>(html`
<gr-edit-preferences-dialog></gr-edit-preferences-dialog>
`);
});
test('render', () => {
assert.shadowDom.equal(
element,
/* HTML */ `
<dialog id="editPrefsModal" tabindex="-1">
<div aria-labelledby="editPreferencesTitle" role="dialog">
<h3 class="editHeader heading-3" id="editPreferencesTitle">
Edit Preferences
</h3>
<gr-edit-preferences id="editPreferences"> </gr-edit-preferences>
<div class="editActions">
<gr-button
aria-disabled="false"
id="cancelButton"
link=""
role="button"
tabindex="0"
>
Cancel
</gr-button>
<gr-button
aria-disabled="true"
disabled=""
id="saveButton"
link=""
primary=""
role="button"
tabindex="-1"
>
Save
</gr-button>
</div>
</div>
</dialog>
`
);
});
test('changes applies only on save', async () => {
element.open();
await element.updateComplete;
assert.isUndefined(element.editPrefsChanged);
const editShowLineWrapping = queryAndAssert<HTMLInputElement>(
queryAndAssert(element, '#editPreferences'),
'#editShowLineWrapping'
);
assert.isTrue(editShowLineWrapping.checked);
editShowLineWrapping.click();
await element.updateComplete;
assert.isFalse(editShowLineWrapping.checked);
assert.isTrue(element.editPrefsChanged);
assert.isTrue(originalEditPrefs.line_wrapping);
stubRestApi('saveEditPreferences').resolves(
new Response(
makePrefixedJSON({
...originalEditPrefs,
line_wrapping: false,
})
)
);
queryAndAssert<GrButton>(element, '#saveButton').click();
await element.updateComplete;
// Original prefs must remains unchanged, dialog must expose a new object
assert.isTrue(originalEditPrefs.line_wrapping);
await waitUntil(() => element.editPrefsChanged === false);
});
});