session-ownership.test.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { describe, expect, test } from "bun:test"
  2. import { createRoot, createSignal } from "solid-js"
  3. import { createSessionOwnership } from "@/pages/session/session-ownership"
  4. describe("createSessionOwnership", () => {
  5. test("invalidates captured work when its Solid owner is disposed", () => {
  6. let current = true
  7. createRoot((dispose) => {
  8. const owner = createSessionOwnership(() => "A").capture()
  9. dispose()
  10. current = owner.current()
  11. })
  12. expect(current).toBe(false)
  13. })
  14. test("does not run a continuation after navigation", () => {
  15. createRoot((dispose) => {
  16. const [session, setSession] = createSignal("A")
  17. const owner = createSessionOwnership(session).capture()
  18. let ran = false
  19. setSession("B")
  20. owner.run(() => {
  21. ran = true
  22. })
  23. expect(ran).toBe(false)
  24. dispose()
  25. })
  26. })
  27. test("does not revive a continuation after A to B to A navigation", () => {
  28. createRoot((dispose) => {
  29. const [session, setSession] = createSignal("A")
  30. const owner = createSessionOwnership(session).capture()
  31. setSession("B")
  32. setSession("A")
  33. expect(owner.current()).toBe(false)
  34. dispose()
  35. })
  36. })
  37. })