blob: f8adeede6208f276afbf09da5a48ba027c11af47 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import type * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {setupLocaleHooks} from '../../testing/LocaleHelpers.js';
import {MockIssuesModel} from '../../testing/MockIssuesModel.js';
import * as IssuesManager from '../issues_manager/issues_manager.js';
describe('GenericIssue', () => {
setupLocaleHooks();
const mockModel = new MockIssuesModel([]) as unknown as SDK.IssuesModel.IssuesModel;
function createProtocolIssueWithoutDetails(): Protocol.Audits.InspectorIssue {
return {
code: Protocol.Audits.InspectorIssueCode.GenericIssue,
details: {},
};
}
function createProtocolIssueWithDetails(genericIssueDetails: Protocol.Audits.GenericIssueDetails):
Protocol.Audits.InspectorIssue {
return {
code: Protocol.Audits.InspectorIssueCode.GenericIssue,
details: {genericIssueDetails},
};
}
it('adds an incorrect form label use issue with valid details', () => {
const issueDetails = {
errorType: Protocol.Audits.GenericIssueErrorType.FormLabelForNameError,
frameId: 'main' as Protocol.Page.FrameId,
violatingNodeId: 1 as Protocol.DOM.BackendNodeId,
violatingNodeAttribute: 'attribute',
};
const issue = createProtocolIssueWithDetails(issueDetails);
const genericIssues = IssuesManager.GenericIssue.GenericIssue.fromInspectorIssue(mockModel, issue);
assert.lengthOf(genericIssues, 1);
const genericIssue = genericIssues[0];
assert.strictEqual(genericIssue.getCategory(), IssuesManager.Issue.IssueCategory.GENERIC);
assert.strictEqual(
genericIssue.primaryKey(),
`GenericIssue::FormLabelForNameError-(${'main' as Protocol.Page.FrameId})-(1)-(attribute)-(no-request)`);
assert.strictEqual(genericIssue.getKind(), IssuesManager.Issue.IssueKind.PAGE_ERROR);
assert.isNotNull(genericIssue.getDescription());
});
it('adds an incorrect form label use issue without details', () => {
const inspectorIssueWithoutGenericDetails = createProtocolIssueWithoutDetails();
const genericIssues =
IssuesManager.GenericIssue.GenericIssue.fromInspectorIssue(mockModel, inspectorIssueWithoutGenericDetails);
assert.isEmpty(genericIssues);
});
it('adds a CORB/ORB issue with valid details', () => {
const issueDetails = {
errorType: Protocol.Audits.GenericIssueErrorType.ResponseWasBlockedByORB,
request: {requestId: 'blabla'} as Protocol.Audits.AffectedRequest,
};
const issue = createProtocolIssueWithDetails(issueDetails);
const genericIssues = IssuesManager.GenericIssue.GenericIssue.fromInspectorIssue(mockModel, issue);
assert.lengthOf(genericIssues, 1);
const genericIssue = genericIssues[0];
assert.strictEqual(genericIssue.getCategory(), IssuesManager.Issue.IssueCategory.GENERIC);
assert.strictEqual(
genericIssue.primaryKey(),
'GenericIssue::ResponseWasBlockedByORB-(undefined)-(undefined)-(undefined)-(blabla)');
assert.strictEqual(genericIssue.getKind(), IssuesManager.Issue.IssueKind.IMPROVEMENT);
assert.isNotNull(genericIssue.getDescription());
});
it('adds a skippable navigation entry issue with valid details', () => {
const issueDetails = {
errorType: Protocol.Audits.GenericIssueErrorType.NavigationEntryMarkedSkippable,
request: {requestId: 'blabla', url: 'https://skippablePage.com'} as Protocol.Audits.AffectedRequest,
};
const issue = createProtocolIssueWithDetails(issueDetails);
const genericIssues = IssuesManager.GenericIssue.GenericIssue.fromInspectorIssue(mockModel, issue);
assert.lengthOf(genericIssues, 1);
const genericIssue = genericIssues[0];
assert.strictEqual(genericIssue.getCategory(), IssuesManager.Issue.IssueCategory.GENERIC);
assert.strictEqual(
genericIssue.primaryKey(),
'GenericIssue::NavigationEntryMarkedSkippable-(undefined)-(undefined)-(undefined)-(blabla)');
assert.strictEqual(genericIssue.getKind(), IssuesManager.Issue.IssueKind.IMPROVEMENT);
assert.isNotNull(genericIssue.getDescription());
const requests = Array.from(genericIssue.requests());
assert.strictEqual(requests[0].url, 'https://skippablePage.com');
});
});