blob: da0220c68067d6736e92e140132bc45ca8ea646b [file]
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../../../test/common-test-setup';
import './gr-suggestion-diff-preview';
import {assert, fixture, html} from '@open-wc/testing';
import {
CommentModel,
commentModelToken,
} from '../gr-comment-model/gr-comment-model';
import {wrapInProvider} from '../../../models/di-provider-element';
import {
createComment,
createFixSuggestionInfo,
} from '../../../test/test-data-generators';
import {getAppContext} from '../../../services/app-context';
import {GrSuggestionDiffPreview} from './gr-suggestion-diff-preview';
import * as sinon from 'sinon';
import {navigationToken} from '../../core/gr-navigation/gr-navigation';
import {stubFlags, stubRestApi} from '../../../test/test-utils';
import {
NumericChangeId,
RepoName,
RevisionPatchSetNum,
} from '../../../api/rest-api';
import {changeViewModelToken} from '../../../models/views/change';
import {
createChangeViewState,
createDiffViewState,
createRange,
} from '../../../test/test-data-generators';
import {testResolver} from '../../../test/common-test-setup';
suite('gr-suggestion-diff-preview tests', () => {
let element: GrSuggestionDiffPreview;
setup(async () => {
const commentModel = new CommentModel(getAppContext().restApiService);
commentModel.updateState({
comment: createComment(),
});
element = (
await fixture<GrSuggestionDiffPreview>(
wrapInProvider(
html`
<gr-suggestion-diff-preview
.codeText=${'Hello World'}
.fixSuggestionInfo=${createFixSuggestionInfo()}
></gr-suggestion-diff-preview>
`,
commentModelToken,
commentModel
)
)
).querySelector<GrSuggestionDiffPreview>('gr-suggestion-diff-preview')!;
await element.updateComplete;
});
test('render', async () => {
await element.updateComplete;
assert.shadowDom.equal(element, /* HTML */ '<code>Hello World</code>');
});
test('render diff', async () => {
stubFlags('isEnabled').returns(true);
element.previewLoadedFor = {
fixSuggestionInfo: createFixSuggestionInfo(),
changeNum: 42 as NumericChangeId,
patchSet: 1 as RevisionPatchSetNum,
};
element.codeText =
' private handleClick(e: MouseEvent) {\ne.stopPropagation();\ne.preventDefault();';
element.preview = {
filepath:
'polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip_test.ts',
preview: {
meta_a: {
name: 'polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip_test.ts',
content_type: 'application/typescript',
lines: 6,
},
meta_b: {
name: 'polygerrit-ui/app/elements/change/gr-change-summary/gr-summary-chip_test.ts',
content_type: 'application/typescript',
lines: 6,
},
intraline_status: 'OK',
change_type: 'MODIFIED',
content: [
{
ab: ['export class SummaryChip {'],
},
{
a: [
' private handleClick(event: MouseEvent) {',
' event.stopPropagation();',
' event.preventDefault();',
' }',
],
b: [
' private handleClick(evt: MouseEvent) {',
' evt.stopPropagation();',
' evt.preventDefault();',
' }',
],
edit_a: [
[24, 2],
[23, 2],
[27, 2],
],
edit_b: [],
},
{
ab: ['}'],
},
],
},
};
await element.updateComplete;
assert.shadowDom.equal(
element,
/* HTML */ `
<div class="diff-container">
<gr-diff
class="disable-context-control-buttons hide-line-length-indicator"
>
</gr-diff>
</div>
`,
{ignoreAttributes: ['style']}
);
});
suite('applyFix navigation', () => {
let setUrlStub: sinon.SinonStub;
setup(() => {
setUrlStub = sinon.stub(testResolver(navigationToken), 'setUrl');
stubRestApi('applyFixSuggestion').returns(
Promise.resolve(new Response(null, {status: 200}))
);
element.changeNum = 42 as NumericChangeId;
element.repo = 'test-project' as RepoName;
element.patchSet = 1 as RevisionPatchSetNum;
element.fixSuggestionInfo = {
...createFixSuggestionInfo(),
replacements: [
{
path: 'foo/bar.ts',
replacement: 'new content',
range: createRange(),
},
],
};
});
test('navigates to createDiffUrl when in Diff View', async () => {
testResolver(changeViewModelToken).setState(createDiffViewState());
await element.applyFix();
assert.isTrue(setUrlStub.calledOnce);
assert.equal(
setUrlStub.lastCall.firstArg,
'/c/test-project/+/42/1..edit/foo/bar.ts?forceReload=true'
);
});
test('navigates to createChangeUrl when in Change View', async () => {
testResolver(changeViewModelToken).setState(createChangeViewState());
await element.applyFix();
assert.isTrue(setUrlStub.calledOnce);
assert.equal(
setUrlStub.lastCall.firstArg,
'/c/test-project/+/42/1..edit?forceReload=true'
);
});
});
});