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:
Dax Raad
2026-04-17 14:33:02 -04:00
parent 992435aaf8
commit b1f076558c
2 changed files with 20 additions and 19 deletions

View File

@@ -1,3 +1,4 @@
import { Option } from "effect"
import { expect, spyOn, test } from "bun:test"
import fs from "fs/promises"
import path from "path"
@@ -5,7 +6,7 @@ import { pathToFileURL } from "url"
import { tmpdir } from "../../fixture/fixture"
import { createTuiPluginApi } from "../../fixture/tui-plugin"
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")
@@ -56,7 +57,7 @@ test("loads npm tui plugin from package ./tui export", async () => {
}
const wait = spyOn(TuiConfig, "waitForDependencies").mockResolvedValue()
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 {
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 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 {
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 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 {
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 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 {
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 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 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 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 {
await TuiPluginRuntime.init({ api: createTuiPluginApi(), config })