87 lines
2.2 KiB
JavaScript
87 lines
2.2 KiB
JavaScript
import { vi } from 'vitest'
|
|
|
|
const storage = {}
|
|
let notificationId = 0
|
|
let notifications = []
|
|
|
|
export const mockBrowser = {
|
|
storage: {
|
|
local: {
|
|
get: vi.fn((keys) => {
|
|
if (typeof keys === 'string') {
|
|
return Promise.resolve({ [keys]: storage[keys] })
|
|
}
|
|
if (Array.isArray(keys)) {
|
|
const result = {}
|
|
keys.forEach((key) => {
|
|
result[key] = storage[key]
|
|
})
|
|
return Promise.resolve(result)
|
|
}
|
|
if (keys && typeof keys === 'object') {
|
|
const result = {}
|
|
Object.keys(keys).forEach((key) => {
|
|
result[key] = storage[key] !== undefined ? storage[key] : keys[key]
|
|
})
|
|
return Promise.resolve(result)
|
|
}
|
|
return Promise.resolve({})
|
|
}),
|
|
set: vi.fn((obj) => {
|
|
Object.assign(storage, obj)
|
|
return Promise.resolve()
|
|
}),
|
|
remove: vi.fn((keys) => {
|
|
if (Array.isArray(keys)) {
|
|
keys.forEach((key) => delete storage[key])
|
|
} else {
|
|
delete storage[keys]
|
|
}
|
|
return Promise.resolve()
|
|
}),
|
|
clear: vi.fn(() => {
|
|
Object.keys(storage).forEach((key) => delete storage[key])
|
|
return Promise.resolve()
|
|
}),
|
|
_reset: () => {
|
|
Object.keys(storage).forEach((key) => delete storage[key])
|
|
}
|
|
}
|
|
},
|
|
notifications: {
|
|
create: vi.fn((id, options) => {
|
|
notifications.push({ id, options })
|
|
return `notification-${++notificationId}`
|
|
}),
|
|
_notifications: notifications,
|
|
_reset: () => {
|
|
notifications.length = 0
|
|
notificationId = 0
|
|
}
|
|
},
|
|
windows: {
|
|
getLastFocused: vi.fn(() =>
|
|
Promise.resolve({
|
|
top: 100,
|
|
left: 100,
|
|
width: 1920,
|
|
height: 1080
|
|
})
|
|
),
|
|
create: vi.fn(() => Promise.resolve({ id: 123 })),
|
|
remove: vi.fn(() => Promise.resolve()),
|
|
get: vi.fn(() => Promise.resolve({ id: 123, top: 100, left: 100 }))
|
|
},
|
|
tabs: {
|
|
create: vi.fn(() => Promise.resolve({ id: 456 })),
|
|
remove: vi.fn(() => Promise.resolve())
|
|
},
|
|
runtime: {
|
|
getURL: vi.fn((path) => `chrome-extension://abc123/${path}`)
|
|
}
|
|
}
|
|
|
|
global.browser = mockBrowser
|
|
|
|
export { storage }
|