import path from 'path';
import fs from 'fs';
import * as ignorescripts from '../src/ignore-scripts';
import {getNpmrcLocation} from '../src/util';

let rcFile: string;

describe('ignore-scripts tests', () => {
  const runnerDir = path.join(__dirname, 'runner');

  beforeEach(async () => {
    rcFile = getNpmrcLocation();
  }, 5000);

  afterEach(async () => {
    fs.unlinkSync(rcFile);
    rcFile = getNpmrcLocation();
  }, 10000);

  it('sets the value to true according to input', async () => {
    ignorescripts.ignoreScriptsInNpmConfig('true');
    const rcContents = fs.readFileSync(rcFile).toString();
    expect(rcContents).toMatch('\nignore-scripts=true\n');
  });

  it('sets the value to false according to input', async () => {
    ignorescripts.ignoreScriptsInNpmConfig('false');
    const rcContents = fs.readFileSync(rcFile).toString();
    expect(rcContents).toMatch('\nignore-scripts=false\n');
  });

  it('defaults to false on empty input', async () => {
    ignorescripts.ignoreScriptsInNpmConfig('');
    const rcContents = fs.readFileSync(rcFile).toString();
    expect(rcContents).toMatch('\nignore-scripts=false\n');
  });

  it('preserves existing npmrc file contents', async () => {
    fs.writeFileSync(getNpmrcLocation(), 'something\nwhatever\nstuff');
    ignorescripts.ignoreScriptsInNpmConfig('true');
    const rcContents = fs.readFileSync(rcFile).toString();
    expect(rcContents).toMatch(
      'something\nwhatever\nstuff\nignore-scripts=true\n'
    );
  });
});