|
| 1 | +import test from "node:test" |
| 2 | +import assert from "node:assert/strict" |
| 3 | + |
| 4 | +import { |
| 5 | + receiveNativeOpenPayload, |
| 6 | + subscribeSharedImport, |
| 7 | + takeSharedImport, |
| 8 | +} from "../src/lib/native-shared-import.ts" |
| 9 | + |
| 10 | +const sharedPayload = { |
| 11 | + text: "1 Lightning Bolt", |
| 12 | + fileName: "manabox.txt", |
| 13 | + mimeType: "text/plain", |
| 14 | + source: "android-share", |
| 15 | +} |
| 16 | + |
| 17 | +test("receiveNativeOpenPayload stores shared imports until the collection route consumes them", () => { |
| 18 | + const opened = [] |
| 19 | + |
| 20 | + assert.equal(receiveNativeOpenPayload(sharedPayload, (payload) => opened.push(payload)), true) |
| 21 | + assert.deepEqual(opened, [sharedPayload]) |
| 22 | + assert.deepEqual(takeSharedImport(), sharedPayload) |
| 23 | + assert.equal(takeSharedImport(), null) |
| 24 | +}) |
| 25 | + |
| 26 | +test("subscribeSharedImport immediately delivers a pending shared import", () => { |
| 27 | + const opened = [] |
| 28 | + const delivered = [] |
| 29 | + |
| 30 | + receiveNativeOpenPayload(sharedPayload, (payload) => opened.push(payload)) |
| 31 | + const unsubscribe = subscribeSharedImport((payload) => delivered.push(payload)) |
| 32 | + unsubscribe() |
| 33 | + |
| 34 | + assert.deepEqual(opened, [sharedPayload]) |
| 35 | + assert.deepEqual(delivered, [sharedPayload]) |
| 36 | + assert.equal(takeSharedImport(), null) |
| 37 | +}) |
| 38 | + |
| 39 | +test("receiveNativeOpenPayload sends active subscribers without leaving stale pending imports", () => { |
| 40 | + const opened = [] |
| 41 | + const delivered = [] |
| 42 | + const unsubscribe = subscribeSharedImport((payload) => delivered.push(payload)) |
| 43 | + |
| 44 | + assert.equal(receiveNativeOpenPayload(sharedPayload, (payload) => opened.push(payload)), true) |
| 45 | + unsubscribe() |
| 46 | + |
| 47 | + assert.deepEqual(opened, [sharedPayload]) |
| 48 | + assert.deepEqual(delivered, [sharedPayload]) |
| 49 | + assert.equal(takeSharedImport(), null) |
| 50 | +}) |
| 51 | + |
| 52 | +test("receiveNativeOpenPayload routes native links without creating a shared import", () => { |
| 53 | + const linkPayload = { url: "https://manavault.cfb.dev/collection", source: "android-view" } |
| 54 | + const opened = [] |
| 55 | + |
| 56 | + assert.equal(receiveNativeOpenPayload(linkPayload, (payload) => opened.push(payload)), true) |
| 57 | + |
| 58 | + assert.deepEqual(opened, [linkPayload]) |
| 59 | + assert.equal(takeSharedImport(), null) |
| 60 | +}) |
0 commit comments