1
0
mirror of https://github.com/koloml/furbooru-tagging-assistant.git synced 2025-12-23 23:02:58 +00:00

Added initial implementation of mocks for chrome StorageArea, adding first tests for storage helper

This commit is contained in:
2025-02-20 23:52:26 +04:00
parent 769a63ccff
commit 68b68d3efd
4 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
export default class ChromeEvent<T extends Function> implements chrome.events.Event<T> {
addListener = vi.fn();
getRules = vi.fn();
hasListener = vi.fn();
removeRules = vi.fn();
addRules = vi.fn();
removeListener = vi.fn();
hasListeners = vi.fn();
}

View File

@@ -0,0 +1,5 @@
import ChromeStorageArea from "$tests/mocks/ChromeStorageArea";
export class ChromeLocalStorageArea extends ChromeStorageArea implements chrome.storage.LocalStorageArea {
QUOTA_BYTES = 100000;
}

View File

@@ -0,0 +1,71 @@
import ChromeEvent from "./ChromeEvent";
type ChangedEventCallback = (changes: chrome.storage.StorageChange) => void
export default class ChromeStorageArea implements chrome.storage.StorageArea {
#mockedData: Record<string, any> = {};
getBytesInUse = vi.fn();
clear = vi.fn((): Promise<void> => {
return new Promise(resolve => {
this.#mockedData = {};
resolve();
})
});
set = vi.fn((...args: any[]): Promise<void> => {
return new Promise((resolve, reject) => {
this.#mockedData = Object.assign(this.#mockedData, args[0]);
resolve();
})
});
remove = vi.fn((...args: any[]): Promise<void> => {
return new Promise((resolve, reject) => {
const key = args[0];
if (typeof key === 'string') {
delete this.#mockedData[key];
resolve();
}
reject(new Error('This behavior is not mocked!'));
});
});
get = vi.fn((...args: any[]) => {
return new Promise((resolve, reject) => {
const key = args[0];
if (!key) {
resolve(this.#mockedData);
return;
}
if (typeof key === 'string') {
resolve({[key]: this.#mockedData[key]});
return;
}
if (Array.isArray(key)) {
resolve(
(key as string[]).reduce((entries, key) => {
entries[key] = this.#mockedData[key];
return entries;
}, {} as Record<string, any>)
);
return;
}
reject(new Error('This behavior is not implemented by the mock.'));
});
});
setAccessLevel = vi.fn();
onChanged = new ChromeEvent<ChangedEventCallback>();
getKeys = vi.fn();
insertMockedData(data: Record<string, any>) {
this.#mockedData = data;
}
get mockedData(): Record<string, any> {
return this.#mockedData;
}
}