'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var chai_js = require('aegir/utils/chai.js');
var mocha = require('../utils/mocha.js');
var multiaddr = require('multiaddr');

function testRm(factory, options) {
  const describe = mocha.getDescribe(options);
  const it = mocha.getIt(options);
  const invalidArg = 'this/Is/So/Invalid/';
  const validIp4 = new multiaddr.Multiaddr('/ip4/104.236.176.52/tcp/4001/p2p/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z');
  describe('.bootstrap.rm', function () {
    this.timeout(100 * 1000);
    let ipfs;
    before(async () => {
      ipfs = (await factory.spawn()).api;
    });
    after(() => factory.clean());
    it('should return an error when called with an invalid arg', () => {
      return chai_js.expect(ipfs.bootstrap.rm(invalidArg)).to.eventually.be.rejected.and.be.an.instanceOf(Error);
    });
    it('should return a list containing the peer removed when called with a valid arg (ip4)', async () => {
      const addRes = await ipfs.bootstrap.add(validIp4);
      chai_js.expect(addRes).to.be.eql({ Peers: [validIp4] });
      const rmRes = await ipfs.bootstrap.rm(validIp4);
      chai_js.expect(rmRes).to.be.eql({ Peers: [validIp4] });
      const peers = rmRes.Peers;
      chai_js.expect(peers).to.have.property('length').that.is.equal(1);
    });
    it('removes a peer from the bootstrap list', async () => {
      const peer = new multiaddr.Multiaddr('/ip4/111.111.111.111/tcp/1001/p2p/QmXFX2P5ammdmXQgfqGkfswtEVFsZUJ5KeHRXQYCTdiTAb');
      await ipfs.bootstrap.add(peer);
      let list = await ipfs.bootstrap.list();
      chai_js.expect(list.Peers).to.deep.include(peer);
      const res = await ipfs.bootstrap.rm(peer);
      chai_js.expect(res).to.be.eql({ Peers: [peer] });
      list = await ipfs.bootstrap.list();
      chai_js.expect(list.Peers).to.not.deep.include(peer);
      chai_js.expect(res.Peers.every(ma => multiaddr.Multiaddr.isMultiaddr(ma))).to.be.true();
    });
  });
}

exports.testRm = testRm;
