import { assert, describe, it } from "@effect/vitest";import { HostProcessPlatform } from "@t3tools/shared/hostProcess";import * as Cause from "effect/Cause";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import { beforeEach, vi } from "vite-plus/test"; const { networkInterfacesMock } = vi.hoisted(() => ({ networkInterfacesMock: vi.fn(),})); vi.mock("node:os", () => ({ networkInterfaces: networkInterfacesMock,})); import * as DesktopNetworkInterfaces from "./DesktopNetworkInterfaces.ts"; const TestLayer = DesktopNetworkInterfaces.layer.pipe( Layer.provide(Layer.succeed(HostProcessPlatform, "linux")),); describe("DesktopNetworkInterfaces", () => { beforeEach(() => { networkInterfacesMock.mockReset(); }); it.effect("reads network interfaces through the service", () => { const interfaces = { en0: [ { address: "192.168.1.10", family: "IPv4", internal: false, }, ], }; networkInterfacesMock.mockReturnValueOnce(interfaces); return Effect.gen(function* () { const service = yield* DesktopNetworkInterfaces.DesktopNetworkInterfaces; assert.strictEqual(yield* service.read, interfaces); }).pipe(Effect.provide(TestLayer)); }); it.effect("preserves network interface read failures as structured defects", () => { const cause = new Error("network interface probe failed"); networkInterfacesMock.mockImplementationOnce(() => { throw cause; }); return Effect.gen(function* () { const service = yield* DesktopNetworkInterfaces.DesktopNetworkInterfaces; const exit = yield* Effect.exit(service.read); assert.equal(exit._tag, "Failure"); if (exit._tag === "Failure") { const error = Cause.squash(exit.cause); assert.instanceOf(error, DesktopNetworkInterfaces.DesktopNetworkInterfacesReadError); assert.equal(error.platform, "linux"); assert.strictEqual(error.cause, cause); assert.equal(error.message, "Failed to read desktop network interfaces on linux."); } }).pipe(Effect.provide(TestLayer)); });});
import { assert, describe, it } from "@effect/vitest";
import { HostProcessPlatform } from "@t3tools/shared/hostProcess";
import * as Cause from "effect/Cause";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { beforeEach, vi } from "vite-plus/test";
const { networkInterfacesMock } = vi.hoisted(() => ({
networkInterfacesMock: vi.fn(),
}));
vi.mock("node:os", () => ({
networkInterfaces: networkInterfacesMock,
}));
import * as DesktopNetworkInterfaces from "./DesktopNetworkInterfaces.ts";
const TestLayer = DesktopNetworkInterfaces.layer.pipe(
Layer.provide(Layer.succeed(HostProcessPlatform, "linux")),
);
describe("DesktopNetworkInterfaces", () => {
beforeEach(() => {
networkInterfacesMock.mockReset();
});
it.effect("reads network interfaces through the service", () => {
const interfaces = {
en0: [
{
address: "192.168.1.10",
family: "IPv4",
internal: false,
},
],
};
networkInterfacesMock.mockReturnValueOnce(interfaces);
return Effect.gen(function* () {
const service = yield* DesktopNetworkInterfaces.DesktopNetworkInterfaces;
assert.strictEqual(yield* service.read, interfaces);
}).pipe(Effect.provide(TestLayer));
});
it.effect("preserves network interface read failures as structured defects", () => {
const cause = new Error("network interface probe failed");
networkInterfacesMock.mockImplementationOnce(() => {
throw cause;
});
return Effect.gen(function* () {
const service = yield* DesktopNetworkInterfaces.DesktopNetworkInterfaces;
const exit = yield* Effect.exit(service.read);
assert.equal(exit._tag, "Failure");
if (exit._tag === "Failure") {
const error = Cause.squash(exit.cause);
assert.instanceOf(error, DesktopNetworkInterfaces.DesktopNetworkInterfacesReadError);
assert.equal(error.platform, "linux");
assert.strictEqual(error.cause, cause);
assert.equal(error.message, "Failed to read desktop network interfaces on linux.");
}
}).pipe(Effect.provide(TestLayer));
});
});