1import { assert, it } from "@effect/vitest"
2import { Effect } from "effect"
3import { EntityAddress, EntityId, EntityType, ShardId } from "effect/cluster"
4import { acquireEntity, aroundEntityType, isActive, releaseEntity } from "effect/cluster/internal/interruptors"
5
6const address = EntityAddress.make({
7 shardId: ShardId.make("active-teardown-unit", 1),
8 entityType: EntityType.make("ActiveTeardownUnit"),
9 entityId: EntityId.make("1")
10})
11
12it("releases entity keys so membership returns to baseline", () => {
13 acquireEntity(address)
14 assert.isTrue(isActive(address))
15 releaseEntity(address)
16 assert.isFalse(isActive(address))
17})
18
19it("refcounts overlapping acquires", () => {
20 acquireEntity(address)
21 acquireEntity(address)
22 releaseEntity(address)
23 assert.isTrue(isActive(address))
24 releaseEntity(address)
25 assert.isFalse(isActive(address))
26})
27
28it.effect("aroundEntityType restores the key after the effect", () =>
29 Effect.gen(function*() {
30 yield* aroundEntityType(
31 "ActiveTeardownUnit",
32 Effect.sync(() => {
33 assert.isTrue(isActive(address))
34 })
35 )
36 assert.isFalse(isActive(address))
37 }))