import assert from 'assert' import rmrf from 'rimraf' import OrbitDB from '../../src/OrbitDB.js' import IdentityProvider from 'orbit-db-identity-provider' import Keystore from 'orbit-db-keystore' import IPFSAccessController from 'orbit-db-access-controllers/ipfs' import AccessControllers from 'orbit-db-access-controllers' // Include test utilities import { config, startIpfs, stopIpfs, testAPIs } from 'orbit-db-test-utils' const dbPath1 = './orbitdb/tests/ipfs-access-controller/1' const dbPath2 = './orbitdb/tests/ipfs-access-controller/2' Object.keys(testAPIs).forEach(API => { describe(`orbit-db - IPFSAccessController (${API})`, function () { this.timeout(config.timeout) let ipfsd1, ipfsd2, ipfs1, ipfs2, id1, id2 let orbitdb1, orbitdb2 before(async () => { rmrf.sync(dbPath1) rmrf.sync(dbPath2) ipfsd1 = await startIpfs(API, config.daemon1) ipfsd2 = await startIpfs(API, config.daemon2) ipfs1 = ipfsd1.api ipfs2 = ipfsd2.api const keystore1 = new Keystore(dbPath1 + '/keys') const keystore2 = new Keystore(dbPath2 + '/keys') id1 = await IdentityProvider.createIdentity({ id: 'A', keystore: keystore1 }) id2 = await IdentityProvider.createIdentity({ id: 'B', keystore: keystore2 }) orbitdb1 = await OrbitDB.createInstance(ipfs1, { AccessControllers, directory: dbPath1, identity: id1 }) orbitdb2 = await OrbitDB.createInstance(ipfs2, { AccessControllers, directory: dbPath2, identity: id2 }) }) after(async () => { if (orbitdb1) { await orbitdb1.stop() } if (orbitdb2) { await orbitdb2.stop() } if (ipfsd1) { await stopIpfs(ipfsd1) } if (ipfsd2) { await stopIpfs(ipfsd2) } }) describe('Constructor', function () { let accessController before(async () => { accessController = await IPFSAccessController.create(orbitdb1, { write: [id1.id] }) }) it('creates an access controller', () => { assert.notStrictEqual(accessController, null) assert.notStrictEqual(accessController, undefined) }) it('sets the controller type', () => { assert.strictEqual(accessController.type, 'ipfs') }) it('has IPFS instance', async () => { const peerId1 = await accessController._ipfs.id() const peerId2 = await ipfs1.id() assert.strictEqual(String(peerId1.id), String(peerId2.id)) }) it('sets default capabilities', async () => { assert.deepStrictEqual(accessController.write, [id1.id]) }) it('allows owner to append after creation', async () => { const mockEntry = { identity: id1, v: 1 // ... // doesn't matter what we put here, only identity is used for the check } const canAppend = await accessController.canAppend(mockEntry, id1.provider) assert.strictEqual(canAppend, true) }) }) describe('save and load', function () { let accessController, manifest before(async () => { accessController = await IPFSAccessController.create(orbitdb1, { write: ['A', 'B', id1.id] }) manifest = await accessController.save() await accessController.load(manifest.address) }) it('has correct capabalities', async () => { assert.deepStrictEqual(accessController.write, ['A', 'B', id1.id]) }) }) }) })