session-actions.test.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { afterEach, describe, expect, mock, test } from "bun:test"
  2. import { Effect } from "effect"
  3. import { Instance } from "../../src/project/instance"
  4. import { Server } from "../../src/server/server"
  5. import { Session as SessionNs } from "../../src/session"
  6. import type { SessionID } from "../../src/session/schema"
  7. import { Log } from "../../src/util/log"
  8. import { tmpdir } from "../fixture/fixture"
  9. Log.init({ print: false })
  10. function run<A, E>(fx: Effect.Effect<A, E, SessionNs.Service>) {
  11. return Effect.runPromise(fx.pipe(Effect.provide(SessionNs.defaultLayer)))
  12. }
  13. const svc = {
  14. ...SessionNs,
  15. create(input?: SessionNs.CreateInput) {
  16. return run(SessionNs.Service.use((svc) => svc.create(input)))
  17. },
  18. remove(id: SessionID) {
  19. return run(SessionNs.Service.use((svc) => svc.remove(id)))
  20. },
  21. }
  22. afterEach(async () => {
  23. mock.restore()
  24. await Instance.disposeAll()
  25. })
  26. describe("session action routes", () => {
  27. test("abort route returns success", async () => {
  28. await using tmp = await tmpdir({ git: true })
  29. await Instance.provide({
  30. directory: tmp.path,
  31. fn: async () => {
  32. const session = await svc.create({})
  33. const app = Server.Default().app
  34. const res = await app.request(`/session/${session.id}/abort`, { method: "POST" })
  35. expect(res.status).toBe(200)
  36. expect(await res.json()).toBe(true)
  37. await svc.remove(session.id)
  38. },
  39. })
  40. })
  41. })