# src/lib/commands/run/options.test.js

    import test from 'ava';
    import sinon from 'sinon';

    import { mockImports, resetImports } from '../../utils/test-helpers';

    import { getOptions, __RewireAPI__ as moduleRewireAPI } from './options';

    const helpData = {
      argv: 'some-argv',
      seeders: 'some-seeders',
      dropdb: true,
      help: false,
    };

    test.beforeEach('mock imports', t => {
      const mocks = {
        optionDefinitions: 'some option definitions',
        commandLineArgs: sinon.stub(),
      };

      t.context = { mocks };

      mockImports({ moduleRewireAPI, mocks });
    });

    test.afterEach.always('unmock imports', t => {
      const imports = Object.keys(t.context.mocks);

      resetImports({ moduleRewireAPI, imports });
    });

    test('should get user options from the cli', t => {
      const { argv, seeders, dropdb, help } = helpData;

      const { commandLineArgs, optionDefinitions } = t.context.mocks;

      commandLineArgs.withArgs(optionDefinitions, { argv }).returns({
        seeders,
        dropdb,
        help,
      });

      const expectedOptions = {
        selectedSeeders: seeders,
        dropDatabase: dropdb,
        helpWanted: help,
      };
      const recivedOptions = getOptions(argv);

      t.true(commandLineArgs.calledWith(optionDefinitions, { argv }));
      t.deepEqual(recivedOptions, expectedOptions);
    });