import assert from 'assert';
import Lab from 'lab';

import { cli } from '../src/replicate-to.js';

import * as common from './common.js';
import nmo from '../src/nmo.js';

import nock from 'nock';

export let lab = Lab.script();
const oldConsole = console.log;
const nmoconf = {nmoconf: __dirname + '/fixtures/randomini'};

common.createConfigFile();

lab.experiment('replicate-to', () => {

  lab.experiment('cli', () => {
    lab.beforeEach((done) => {
      nmo
        .load(nmoconf)
        .then(() => done())
        .catch(() => done());

    });

    lab.afterEach((done) => {
      console.log = oldConsole;
      done();
    });

    lab.test('returns error on no value provided', done => {
      cli()
        .catch((err) => {
          assert.ok(err instanceof Error);
          done();
        });
    });

    lab.test('replicates db given cluster details', done => {
      const doc = {
        "target":{
          "url":"http://127.0.0.1/mydb"
        },
        "source":{
          "url":"https://target-repl.com/new-db"
        },
        "continuous":false,
        "create_target":false
      };

      nock('http://127.0.0.1')
        .post('/_replicator', doc)
        .reply(200, {ok: true, id: '123', rev: '123'});

      cli('clusterone', 'mydb', 'https://target-repl.com/new-db')
      .then(resp => {
        assert.ok(resp.ok);
        done();
      });
    });

    lab.test('replicates db given cluster details with continuous and create_target', done => {
      nmo
        .load({nmoconf: __dirname + '/fixtures/randomini', "create-target": true, continuous: true})
        .then(() => {
          const doc = {
            "target":{
              "url":"http://127.0.0.1/mydb"
            },
            "source":{
              "url":"https://target-repl.com/new-db"
            },
            "continuous":true,
            "create_target":true
          };

          nock('http://127.0.0.1')
            .post('/_replicator', doc)
            .reply(200, {ok: true, id: '123', rev: '123'});

          cli('clusterone', 'mydb', 'https://target-repl.com/new-db')
          .then(resp => {
            assert.ok(resp.ok);
            done();
          });
        });
    });
  });
});
