import test from 'brittle'
import Corestore from 'corestore'
import { mkdtempSync } from 'fs'
import { join } from 'path'
import { tmpdir } from 'os'
import { HyperOrgs } from '../index.js'
function tmpStore () {
const dir = mkdtempSync(join(tmpdir(), 'hyper-orgs-meta-'))
return new Corestore(dir)
}
async function makeOrgs (t, namespace = 'meta') {
const store = tmpStore()
const orgs = new HyperOrgs(store, { namespace })
await orgs.ready()
t.teardown(async () => {
try { await orgs.close() } catch {}
try { await store.close() } catch {}
})
return orgs
}
// setMeta/getMeta/listMeta back the org-scoped peer-coordinate announce: a
// writer publishes meta:peer:<serverKey> -> { serverKey, repoEventLog } into
// the org autobase so every org peer can boot a reverse RepoPuller toward it.
test('setMeta / getMeta / listMeta — peer coordinates round-trip', async (t) => {
const orgs = await makeOrgs(t, 'meta-1')
await orgs.create('house', 'group')
const coordsA = { serverKey: 'a'.repeat(64), repoEventLog: 'c'.repeat(64) }
const coordsB = { serverKey: 'b'.repeat(64), repoEventLog: 'd'.repeat(64) }
await orgs.setMeta('house', 'peer:' + coordsA.serverKey, coordsA)
await orgs.setMeta('house', 'peer:' + coordsB.serverKey, coordsB)
// a non-peer meta entry must NOT show up under the 'peer:' prefix scan
await orgs.setMeta('house', 'schema-version', 2)
t.alike(await orgs.getMeta('house', 'peer:' + coordsA.serverKey), coordsA, 'getMeta returns the stored value')
t.is(await orgs.getMeta('house', 'nope'), null, 'missing meta → null')
const peers = await orgs.listMeta('house', 'peer:')
t.is(peers.length, 2, 'listMeta returns only the peer: entries (schema-version excluded)')
const byServer = new Map(peers.map(p => [p.value.serverKey, p.value]))
t.alike(byServer.get('a'.repeat(64)), coordsA, 'peer A coords intact')
t.alike(byServer.get('b'.repeat(64)), coordsB, 'peer B coords intact')
t.ok(peers.every(p => p.key.startsWith('peer:')), 'meta: view-prefix stripped, peer: retained')
})