1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-06-27 10:46:02 +02:00
bitwarden-browser/apps/browser/src/autofill/jest/testing-utils.ts
Cesar Gonzalez 6ca303f4ae
[PM-4032] Detect LastPass export page and suppress download prompt (#6398)
* Import libs/importer and instantiate ImportService

* Create ImportApi and ImportService factories

* Add libs/importer to desktop

* [PM-4075] Setup Feature Flag for Browser Fileless Import

* [PM-4032] Detect Lastpass Export Page and Supress Download Prompt

* [PM-4032] Implementing jest tests for the FilelessImporterBackground class

* [PM-4075] Setup Feature Flag for Browser Fileless Import (#6391)

* [PM-4032] Implementing jest tests for the FilelessImporterBackground class

* [PM-4032] Implementing jest tests for the LpFilelessImporter class

* [PM-4032] Modifying variable name

* [PM-4032] Modifying verbiage on jest tests to feature present tense actions and updating behavior within FilelessImporterBackground to ensure logic is triggered on expected port names only

* [PM-4032] Modifying documentation present above handlePortOnConnect method

* [PM-4032] Modifying documentation present above handlePortOnConnect method

* [PM-4032] Applying early return if the user has a policy that removes the individual vault

* [PM-4032] Reverting change made to notification bar

* [PM-4032] Applying a static declaration to the filelessImporterPortNames property

* [PM-4032] Modifying test for handlPortOnConnect method to follow provided feedback

* [PM-4032] Applying feedback to jest test messages

* [PM-4032] Reworking LpFilelessImporter to simplify testing structure and leverage public facing methods rather than testing private methods

* [PM-4032] Reworking FilelessImporterBackground class

* [PM-4032] Adding implementation details that facilitate triggering onMessage listeners within a chrome.runtime.connection port

* [PM-4032] Implementing reworked jest tests for FilelessImporterBackground

* [PM-4032] Adjusting naming of jest test

* [PM-4032] Reworking test setup implementation to better fit approach discussed within overlay PR work

* [PM-4032] Running prettier

* [PM-4032] Removing added line break

* [PM-4033] Display import prompt to user (#6407)

* [PM-4033] Display Import Prompt to the User

* [PM-4033] Adding jest tests for LpFilelessImporter

* [PM-4033] Finalization of Jest tests

* [PM-4033] Finalization of Jest tests

* [PM-4033] Removing values from the whitelist capital letters file

* [PM-4033] Addressing jest test coverage in LpFilelessImporter

* [PM-4033] Addressing jest test coverage in LpFilelessImporter

* [PM-4033] Adding documentation to the added methods within the NotificationBackground class

* [PM-4033] Adding documentation to the added methods within the bar.ts content script

* [PM-4033] Removing unnecessary method within lp-fileless-importer content script

* [PM-4033] Removing method that is not currently used within FilelessImporterBackground

* [PM-4033] Adding jest tests for the implementation

* [PM-4035] Import LastPass Export Page Data (#6408)

* [PM-4035] Import LastPass Export Page Data

* [PM-4035] Import LastPass Export Page Data

* [PM-4035] Adding jest tests for the LPFilelessImporter class

* [PM-4035] Adding jest tests for the FilelessImporterBackground class

* [PM-4035] Fixing references to innerHtml and updating them to reference textContent

* [PM-4035] Removing eslint-disable and adding logging service to bar.ts

* [PM-4035] Adding typing information to LpImporter classes

* [PM-4035] Adding typing information to LpImporter classes

* [PM-4035] Adding typing information for FilelessImportType

* [PM-4035] Updating type reference for the filelessImportType

* [PM-4032] Refactoring implementation for NotificationBackground.doNotificationQueueCheck to remove repetition

* [PM-4032] Refactoring early returns within NotificationBackground

* [PM-4032] Adding context for a test case for the FilelessImporterBackground

* [PM-4032] Removing magic number by referencing the notification port within a test for cancelFilelessImport

* [PM-4032] Adding documentation to the constructor

* [PM-4032] Switching logic to use a switch statement rather than multiple if statements

* [PM-4032] Removing unnecessary early return from the mutation observer implementation within `lp-fileless-importer.ts

* [PM-4032] Adding return to the mutation observer when we have found the expected text node

* [PM-4032] Refactoring implementation of the handleMutation method

* [PM-4032] Modifying implementation for pushUnlocKVaultToQueue to send a notification message instead of adding the item to the queue

* [PM-4032] Modifying implementation for how we handle mutations within the lp-fileless-importer

* [PM-4032] Adding space between the iteration over added nodes within LpFilelessImporter.handleMutation

* [PM-4032] Reworking logic within the doNotificationCheck method to remove for loop

---------

Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
2023-12-22 14:03:21 -06:00

115 lines
3.2 KiB
TypeScript

import { mock } from "jest-mock-extended";
function triggerTestFailure() {
expect(true).toBe("Test has failed.");
}
const scheduler = typeof setImmediate === "function" ? setImmediate : setTimeout;
function flushPromises() {
return new Promise(function (resolve) {
scheduler(resolve);
});
}
function postWindowMessage(data: any, origin = "https://localhost/", source = window) {
globalThis.dispatchEvent(new MessageEvent("message", { data, origin, source }));
}
function sendExtensionRuntimeMessage(
message: any,
sender?: chrome.runtime.MessageSender,
sendResponse?: CallableFunction,
) {
(chrome.runtime.onMessage.addListener as unknown as jest.SpyInstance).mock.calls.forEach(
(call) => {
const callback = call[0];
callback(
message || {},
sender || mock<chrome.runtime.MessageSender>(),
sendResponse || jest.fn(),
);
},
);
}
function triggerRuntimeOnConnectEvent(port: chrome.runtime.Port) {
(chrome.runtime.onConnect.addListener as unknown as jest.SpyInstance).mock.calls.forEach(
(call) => {
const callback = call[0];
callback(port);
},
);
}
function sendPortMessage(port: chrome.runtime.Port, message: any) {
(port.onMessage.addListener as unknown as jest.SpyInstance).mock.calls.forEach((call) => {
const callback = call[0];
callback(message || {}, port);
});
}
function triggerPortOnDisconnectEvent(port: chrome.runtime.Port) {
(port.onDisconnect.addListener as unknown as jest.SpyInstance).mock.calls.forEach((call) => {
const callback = call[0];
callback(port);
});
}
function triggerWindowOnFocusedChangedEvent(windowId: number) {
(chrome.windows.onFocusChanged.addListener as unknown as jest.SpyInstance).mock.calls.forEach(
(call) => {
const callback = call[0];
callback(windowId);
},
);
}
function triggerTabOnActivatedEvent(activeInfo: chrome.tabs.TabActiveInfo) {
(chrome.tabs.onActivated.addListener as unknown as jest.SpyInstance).mock.calls.forEach(
(call) => {
const callback = call[0];
callback(activeInfo);
},
);
}
function triggerTabOnReplacedEvent(addedTabId: number, removedTabId: number) {
(chrome.tabs.onReplaced.addListener as unknown as jest.SpyInstance).mock.calls.forEach((call) => {
const callback = call[0];
callback(addedTabId, removedTabId);
});
}
function triggerTabOnUpdatedEvent(
tabId: number,
changeInfo: chrome.tabs.TabChangeInfo,
tab: chrome.tabs.Tab,
) {
(chrome.tabs.onUpdated.addListener as unknown as jest.SpyInstance).mock.calls.forEach((call) => {
const callback = call[0];
callback(tabId, changeInfo, tab);
});
}
function triggerTabOnRemovedEvent(tabId: number, removeInfo: chrome.tabs.TabRemoveInfo) {
(chrome.tabs.onRemoved.addListener as unknown as jest.SpyInstance).mock.calls.forEach((call) => {
const callback = call[0];
callback(tabId, removeInfo);
});
}
export {
triggerTestFailure,
flushPromises,
postWindowMessage,
sendExtensionRuntimeMessage,
triggerRuntimeOnConnectEvent,
sendPortMessage,
triggerPortOnDisconnectEvent,
triggerWindowOnFocusedChangedEvent,
triggerTabOnActivatedEvent,
triggerTabOnReplacedEvent,
triggerTabOnUpdatedEvent,
triggerTabOnRemovedEvent,
};