/* eslint-env mocha */
'use strict'

const { expect } = require('aegir/utils/chai')

const PubsubBaseImpl = require('../../src/pubsub')
const {
  createPeerId,
  mockRegistrar
} = require('./utils')

describe('pubsub instance', () => {
  let peerId

  before(async () => {
    peerId = await createPeerId()
  })

  it('should throw if no debugName is provided', () => {
    expect(() => {
      new PubsubBaseImpl() // eslint-disable-line no-new
    }).to.throw()
  })

  it('should throw if no multicodec is provided', () => {
    expect(() => {
      new PubsubBaseImpl({ // eslint-disable-line no-new
        debugName: 'pubsub'
      })
    }).to.throw()
  })

  it('should throw if no libp2p is provided', () => {
    expect(() => {
      new PubsubBaseImpl({ // eslint-disable-line no-new
        debugName: 'pubsub',
        multicodecs: '/pubsub/1.0.0'
      })
    }).to.throw()
  })

  it('should accept valid parameters', () => {
    expect(() => {
      new PubsubBaseImpl({ // eslint-disable-line no-new
        debugName: 'pubsub',
        multicodecs: '/pubsub/1.0.0',
        libp2p: {
          peerId: peerId,
          registrar: mockRegistrar
        }
      })
    }).not.to.throw()
  })
})