test: align plugin loader npm mocks
- switch plugin loader tests to the effect npm module - return Option.none() for mocked npm entrypoints - keep test fixtures aligned with the current Npm.add contract
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import { Option } from "effect"
|
||||||
import { expect, spyOn, test } from "bun:test"
|
import { expect, spyOn, test } from "bun:test"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
@@ -5,7 +6,7 @@ import { pathToFileURL } from "url"
|
|||||||
import { tmpdir } from "../../fixture/fixture"
|
import { tmpdir } from "../../fixture/fixture"
|
||||||
import { createTuiPluginApi } from "../../fixture/tui-plugin"
|
import { createTuiPluginApi } from "../../fixture/tui-plugin"
|
||||||
import { TuiConfig } from "../../../src/cli/cmd/tui/config/tui"
|
import { TuiConfig } from "../../../src/cli/cmd/tui/config/tui"
|
||||||
import { Npm } from "../../../src/npm"
|
import { Npm } from "../../../src/npm/effect"
|
||||||
|
|
||||||
const { TuiPluginRuntime } = await import("../../../src/cli/cmd/tui/plugin/runtime")
|
const { TuiPluginRuntime } = await import("../../../src/cli/cmd/tui/plugin/runtime")
|
||||||
|
|
||||||
@@ -56,7 +57,7 @@ test("loads npm tui plugin from package ./tui export", async () => {
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
||||||
@@ -117,7 +118,7 @@ test("does not use npm package exports dot for tui entry", async () => {
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
||||||
@@ -179,7 +180,7 @@ test("rejects npm tui export that resolves outside plugin directory", async () =
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
||||||
@@ -241,7 +242,7 @@ test("rejects npm tui plugin that exports server and tui together", async () =>
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
||||||
@@ -299,7 +300,7 @@ test("does not use npm package main for tui entry", async () => {
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
const warn = spyOn(console, "warn").mockImplementation(() => {})
|
const warn = spyOn(console, "warn").mockImplementation(() => {})
|
||||||
const error = spyOn(console, "error").mockImplementation(() => {})
|
const error = spyOn(console, "error").mockImplementation(() => {})
|
||||||
|
|
||||||
@@ -468,7 +469,7 @@ test("uses npm package name when tui plugin id is omitted", async () => {
|
|||||||
}
|
}
|
||||||
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
|
||||||
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
const cwd = spyOn(process, "cwd").mockImplementation(() => tmp.path)
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { afterAll, afterEach, describe, expect, spyOn, test } from "bun:test"
|
import { afterAll, afterEach, describe, expect, spyOn, test } from "bun:test"
|
||||||
import { Effect } from "effect"
|
import { Effect, Option } from "effect"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { pathToFileURL } from "url"
|
import { pathToFileURL } from "url"
|
||||||
@@ -13,7 +13,7 @@ const { Plugin } = await import("../../src/plugin/index")
|
|||||||
const { PluginLoader } = await import("../../src/plugin/loader")
|
const { PluginLoader } = await import("../../src/plugin/loader")
|
||||||
const { readPackageThemes } = await import("../../src/plugin/shared")
|
const { readPackageThemes } = await import("../../src/plugin/shared")
|
||||||
const { Instance } = await import("../../src/project/instance")
|
const { Instance } = await import("../../src/project/instance")
|
||||||
const { Npm } = await import("../../src/npm")
|
const { Npm } = await import("../../src/npm/effect")
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
if (disableDefault === undefined) {
|
if (disableDefault === undefined) {
|
||||||
@@ -239,8 +239,8 @@ describe("plugin.loader.shared", () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const add = spyOn(Npm, "add").mockImplementation(async (pkg) => {
|
const add = spyOn(Npm, "add").mockImplementation(async (pkg) => {
|
||||||
if (pkg === "acme-plugin") return { directory: tmp.extra.acme, entrypoint: tmp.extra.acme }
|
if (pkg === "acme-plugin") return { directory: tmp.extra.acme, entrypoint: Option.none() }
|
||||||
return { directory: tmp.extra.scope, entrypoint: tmp.extra.scope }
|
return { directory: tmp.extra.scope, entrypoint: Option.none() }
|
||||||
})
|
})
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -301,7 +301,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -358,7 +358,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -410,7 +410,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -455,7 +455,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -518,7 +518,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -548,7 +548,7 @@ describe("plugin.loader.shared", () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: "", entrypoint: "" })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: "", entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await load(tmp.path)
|
await load(tmp.path)
|
||||||
@@ -927,7 +927,7 @@ export default {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
const missing: string[] = []
|
const missing: string[] = []
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -996,7 +996,7 @@ export default {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: tmp.extra.mod })
|
const install = spyOn(Npm, "add").mockResolvedValue({ directory: tmp.extra.mod, entrypoint: Option.none() })
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const loaded = await PluginLoader.loadExternal({
|
const loaded = await PluginLoader.loadExternal({
|
||||||
|
|||||||
Reference in New Issue
Block a user