const { ESLint } = require('eslint');
const path = require('path');

const eslint = new ESLint();

async function lintProject(name) {
  const projectPath = path.resolve(__dirname, name);
  const filesToLint = path.resolve(projectPath, '**');
  const rest = await eslint.lintFiles(filesToLint);
  const ruleId = [];
  rest.forEach((res) =>
    res.messages.forEach((msg) => {
      if (ruleId.indexOf(msg.ruleId) < 0) {
        ruleId.push(msg.ruleId);
      }
    })
  );
  return ruleId;
}

test('a vue project should pass lint', async () => {
  const rest = await lintProject('vue');

  expect([
    'no-const-assign',
    '@typescript-eslint/no-unused-vars',
    'vue/multi-word-component-names',
    'no-undef',
  ]).toEqual(rest);
});

test('a vue-tsx project should pass lint', async () => {
  const rest = await lintProject('vue-tsx');

  expect([
    '@typescript-eslint/no-unused-vars',
    'vue/multi-word-component-names',
    'vue/no-ref-as-operand',
    '@typescript-eslint/no-empty-interface',
  ]).toEqual(rest);
});
