d1bc25a6ce
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import { afterEach, describe, expect, it, mock } from "bun:test"
|
|
|
|
async function importPostHogModule(): Promise<typeof import("./posthog")> {
|
|
return import(`./posthog?test=${Date.now()}-${Math.random()}`)
|
|
}
|
|
|
|
describe("posthog client creation", () => {
|
|
afterEach(() => {
|
|
mock.restore()
|
|
delete process.env.OMO_DISABLE_POSTHOG
|
|
delete process.env.OMO_SEND_ANONYMOUS_TELEMETRY
|
|
delete process.env.POSTHOG_API_KEY
|
|
delete process.env.POSTHOG_HOST
|
|
})
|
|
|
|
it("returns a no-op client when PostHog construction throws", async () => {
|
|
// given
|
|
process.env.OMO_DISABLE_POSTHOG = "0"
|
|
process.env.OMO_SEND_ANONYMOUS_TELEMETRY = "1"
|
|
process.env.POSTHOG_API_KEY = "test-api-key"
|
|
|
|
mock.module("posthog-node", () => ({
|
|
PostHog: class {
|
|
constructor() {
|
|
throw new Error("posthog init failed")
|
|
}
|
|
},
|
|
}))
|
|
|
|
const { createCliPostHog, createPluginPostHog } = await importPostHogModule()
|
|
|
|
// when
|
|
const cliPostHog = createCliPostHog()
|
|
const pluginPostHog = createPluginPostHog()
|
|
|
|
// then
|
|
expect(() =>
|
|
cliPostHog.capture({
|
|
distinctId: "cli",
|
|
event: "run_started",
|
|
}),
|
|
).not.toThrow()
|
|
expect(() => cliPostHog.captureException(new Error("cli failure"), "cli")).not.toThrow()
|
|
expect(() => cliPostHog.trackActive("cli", "run_started")).not.toThrow()
|
|
await expect(cliPostHog.shutdown()).resolves.toBeUndefined()
|
|
|
|
expect(() =>
|
|
pluginPostHog.capture({
|
|
distinctId: "plugin",
|
|
event: "plugin_loaded",
|
|
}),
|
|
).not.toThrow()
|
|
expect(() => pluginPostHog.captureException(new Error("plugin failure"), "plugin")).not.toThrow()
|
|
expect(() => pluginPostHog.trackActive("plugin", "plugin_loaded")).not.toThrow()
|
|
await expect(pluginPostHog.shutdown()).resolves.toBeUndefined()
|
|
})
|
|
|
|
it("creates a plugin client when os.cpus throws", async () => {
|
|
// given
|
|
process.env.OMO_DISABLE_POSTHOG = "0"
|
|
process.env.OMO_SEND_ANONYMOUS_TELEMETRY = "1"
|
|
process.env.POSTHOG_API_KEY = "test-api-key"
|
|
|
|
mock.module("os", () => ({
|
|
default: {
|
|
arch: () => "x64",
|
|
cpus: () => {
|
|
throw new Error("Failed to get CPU information")
|
|
},
|
|
hostname: () => "test-host",
|
|
platform: () => "linux",
|
|
release: () => "6.8.0-arch1-1",
|
|
totalmem: () => 8 * 1024 * 1024 * 1024,
|
|
type: () => "Linux",
|
|
},
|
|
}))
|
|
|
|
mock.module("posthog-node", () => ({
|
|
PostHog: class {
|
|
capture() {}
|
|
captureException() {}
|
|
async shutdown() {}
|
|
},
|
|
}))
|
|
|
|
const { createPluginPostHog } = await importPostHogModule()
|
|
|
|
// when
|
|
const pluginPostHog = createPluginPostHog()
|
|
|
|
// then
|
|
expect(() =>
|
|
pluginPostHog.capture({
|
|
distinctId: "plugin",
|
|
event: "plugin_loaded",
|
|
}),
|
|
).not.toThrow()
|
|
expect(() => pluginPostHog.captureException(new Error("plugin failure"), "plugin")).not.toThrow()
|
|
expect(() => pluginPostHog.trackActive("plugin", "plugin_loaded")).not.toThrow()
|
|
await expect(pluginPostHog.shutdown()).resolves.toBeUndefined()
|
|
})
|
|
})
|