orbitdb/test/orbitdb-access-controllers.test.js

109 lines
3.0 KiB
JavaScript

import { strictEqual, deepStrictEqual, notStrictEqual } from 'assert'
import rmrf from 'rimraf'
import * as IPFS from 'ipfs-core'
import OrbitDB from '../src/orbitdb.js'
import { IPFSAccessController, OrbitDBAccessController, addAccessController, getAccessController, removeAccessController } from '../src/access-controllers/index.js'
import config from './config.js'
import pathJoin from '../src/utils/path-join.js'
const type = 'custom!'
const CustomAccessController = () => async ({ orbitdb, identities, address }) => {
address = pathJoin('/', type, 'controller')
return {
address
}
}
CustomAccessController.type = type
describe('Add a custom access controller', function () {
this.timeout(5000)
let ipfs
let orbitdb
before(async () => {
ipfs = await IPFS.create({ ...config.daemon1, repo: './ipfs1' })
orbitdb = await OrbitDB({ ipfs })
})
after(async () => {
if (orbitdb) {
await orbitdb.stop()
}
if (ipfs) {
await ipfs.stop()
}
// Remove the added custom database type from OrbitDB import
removeAccessController(type)
await rmrf('./orbitdb')
await rmrf('./ipfs1')
})
describe('Default supported access controllers', function () {
it('returns default supported access controllers', async () => {
deepStrictEqual(getAccessController('ipfs'), IPFSAccessController)
deepStrictEqual(getAccessController('orbitdb'), OrbitDBAccessController)
})
it('throws and error if custom access controller hasn\'t been added', async () => {
let err
try {
const db = await orbitdb.open('hello', { AccessController: CustomAccessController() })
await db.close()
await orbitdb.open(db.address)
} catch (e) {
err = e
}
notStrictEqual(err, undefined)
strictEqual(err.message, 'AccessController type \'custom!\' is not supported')
})
})
describe('Custom access controller', function () {
before(() => {
addAccessController(CustomAccessController)
})
it('create a database with the custom access controller', async () => {
const name = 'hello custom AC'
const db = await orbitdb.open(name, { AccessController: CustomAccessController() })
strictEqual(db.access.address, '/custom!/controller')
})
it('throws and error if custom access controller already exists', async () => {
let err
try {
addAccessController(CustomAccessController)
} catch (e) {
err = e.toString()
}
strictEqual(err, 'Error: Access controller \'custom!\' already added.')
})
it('returns custom access controller after adding it', async () => {
deepStrictEqual(getAccessController(type), CustomAccessController)
})
it('can be removed from supported access controllers', async () => {
let err
removeAccessController(type)
try {
getAccessController(type)
} catch (e) {
err = e.toString()
}
deepStrictEqual(err, 'Error: AccessController type \'custom!\' is not supported')
})
})
})