mirror of
https://github.com/bitwarden/browser
synced 2025-12-18 09:13:33 +00:00
[PM-5189] Implementing jest tests for the AutofillOverlayContentService
This commit is contained in:
@@ -3,10 +3,11 @@ import { mock } from "jest-mock-extended";
|
|||||||
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
||||||
import { EVENTS, AutofillOverlayVisibility } from "@bitwarden/common/autofill/constants";
|
import { EVENTS, AutofillOverlayVisibility } from "@bitwarden/common/autofill/constants";
|
||||||
|
|
||||||
|
import AutofillInit from "../content/autofill-init";
|
||||||
import { AutofillOverlayElement, RedirectFocusDirection } from "../enums/autofill-overlay.enum";
|
import { AutofillOverlayElement, RedirectFocusDirection } from "../enums/autofill-overlay.enum";
|
||||||
import AutofillField from "../models/autofill-field";
|
import AutofillField from "../models/autofill-field";
|
||||||
import { createAutofillFieldMock } from "../spec/autofill-mocks";
|
import { createAutofillFieldMock } from "../spec/autofill-mocks";
|
||||||
import { flushPromises } from "../spec/testing-utils";
|
import { flushPromises, sendMockExtensionMessage } from "../spec/testing-utils";
|
||||||
import { ElementWithOpId, FormFieldElement } from "../types";
|
import { ElementWithOpId, FormFieldElement } from "../types";
|
||||||
|
|
||||||
import { AutoFillConstants } from "./autofill-constants";
|
import { AutoFillConstants } from "./autofill-constants";
|
||||||
@@ -15,11 +16,14 @@ import { AutofillOverlayContentService } from "./autofill-overlay-content.servic
|
|||||||
const defaultWindowReadyState = document.readyState;
|
const defaultWindowReadyState = document.readyState;
|
||||||
const defaultDocumentVisibilityState = document.visibilityState;
|
const defaultDocumentVisibilityState = document.visibilityState;
|
||||||
describe("AutofillOverlayContentService", () => {
|
describe("AutofillOverlayContentService", () => {
|
||||||
|
let autofillInit: AutofillInit;
|
||||||
let autofillOverlayContentService: AutofillOverlayContentService;
|
let autofillOverlayContentService: AutofillOverlayContentService;
|
||||||
let sendExtensionMessageSpy: jest.SpyInstance;
|
let sendExtensionMessageSpy: jest.SpyInstance;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
autofillOverlayContentService = new AutofillOverlayContentService();
|
autofillOverlayContentService = new AutofillOverlayContentService();
|
||||||
|
autofillInit = new AutofillInit(autofillOverlayContentService);
|
||||||
|
autofillInit.init();
|
||||||
sendExtensionMessageSpy = jest
|
sendExtensionMessageSpy = jest
|
||||||
.spyOn(autofillOverlayContentService as any, "sendExtensionMessage")
|
.spyOn(autofillOverlayContentService as any, "sendExtensionMessage")
|
||||||
.mockResolvedValue(undefined);
|
.mockResolvedValue(undefined);
|
||||||
@@ -1312,4 +1316,46 @@ describe("AutofillOverlayContentService", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("extension onMessage handlers", () => {
|
||||||
|
describe("openAutofillInlineMenu message handler", () => {
|
||||||
|
it("sends a message to the background to trigger an update in the inline menu's position", async () => {
|
||||||
|
autofillOverlayContentService["mostRecentlyFocusedField"] =
|
||||||
|
mock<ElementWithOpId<FormFieldElement>>();
|
||||||
|
|
||||||
|
sendMockExtensionMessage({
|
||||||
|
command: "openAutofillInlineMenu",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("updateAutofillInlineMenuPosition", {
|
||||||
|
overlayElement: AutofillOverlayElement.Button,
|
||||||
|
});
|
||||||
|
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("updateAutofillInlineMenuPosition", {
|
||||||
|
overlayElement: AutofillOverlayElement.List,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("addNewVaultItemFromOverlay message handler", () => {
|
||||||
|
it("sends an extension message with the cipher login details to add to the user's vault", async () => {
|
||||||
|
jest
|
||||||
|
.spyOn(autofillOverlayContentService as any, "isInlineMenuListVisible")
|
||||||
|
.mockResolvedValue(true);
|
||||||
|
|
||||||
|
sendMockExtensionMessage({
|
||||||
|
command: "addNewVaultItemFromOverlay",
|
||||||
|
});
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("autofillOverlayAddNewVaultItem", {
|
||||||
|
login: {
|
||||||
|
username: "",
|
||||||
|
password: "",
|
||||||
|
uri: "http://localhost/",
|
||||||
|
hostname: "localhost",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
|
|||||||
*/
|
*/
|
||||||
openAutofillInlineMenu(options: OpenAutofillInlineMenuOptions = {}) {
|
openAutofillInlineMenu(options: OpenAutofillInlineMenuOptions = {}) {
|
||||||
const { isFocusingFieldElement, isOpeningFullAutofillInlineMenu, authStatus } = options;
|
const { isFocusingFieldElement, isOpeningFullAutofillInlineMenu, authStatus } = options;
|
||||||
|
// TODO: It's likely that this method functions more cleanly from the scope of the background. Will address this in a future PR when time allows.
|
||||||
if (!this.mostRecentlyFocusedField) {
|
if (!this.mostRecentlyFocusedField) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user