mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-03-30 15:08:28 +00:00
109 lines
3.0 KiB
JavaScript
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')
|
|
})
|
|
})
|
|
})
|