// Have you identified a contributing guideline that should be included here?
// Please open a pull request!

const { danger, fail, message, warn } = require('danger');
const chainsmoker = require('chainsmoker');

const fileMatch = chainsmoker({
  created: danger.git.created_files,
  modified: danger.git.modified_files,
  createdOrModified: danger.git.modified_files.concat(danger.git.created_files),
  deleted: danger.git.deleted_files,
});

const documentation = fileMatch(
  '**/*.md',
  'lib/all-badge-examples.js',
  'frontend/components/usage.js'
);
const server = fileMatch('server.js');
const serviceTests = fileMatch('service-tests/*.js');
const helpers = fileMatch(
  'lib/**/*.js',
  '!**/*.spec.js',
  '!lib/all-badge-examples.js'
);
const helperTests = fileMatch('lib/**/*.spec.js');
const packageJson = fileMatch('package.json');
const packageLock = fileMatch('package-lock.json');
const capitals = fileMatch('**/*[A-Z]*.js');
const underscores = fileMatch('**/*_*.js');

message([
  ':sparkles: Thanks for your contribution to Shields, ',
  `@${danger.github.pr.user.login}!`
].join(''));

if (documentation.createdOrModified) {
  message([
    'Thanks for contributing to our documentation. ',
    'We :heart: our [documentarians](http://www.writethedocs.org/)!'
  ].join(''));
}

if (packageJson.modified && !packageLock.modified) {
  const message = 'This PR modified package.json, but not package-lock.json';
  const idea = 'Perhaps you need to run `npm install`?';
  warn(`${message} - <i>${idea}</i>`);
}

if (server.modified && !serviceTests.createdOrModified) {
  warn([
    'This PR modified the server but none of the service tests. ',
    "That's okay so long as it's refactoring existing code.",
  ].join(''));
}

if (helpers.created && !helperTests.created) {
  warn([
    'This PR added helper modules in `lib/` but not accompanying tests. ',
    'Generally helper modules should have their own tests.',
  ].join(''));
} else if (helpers.createdOrModified && !helperTests.createdOrModified) {
  warn([
    'This PR modified helper functions in `lib/` but not accompanying tests. ',
    "That's okay so long as it's refactoring existing code.",
  ].join(''));
}

if (capitals.created || underscores.created) {
  fail([
    'JavaScript source files should be named with kebab-case ',
    '(dash-separated lowercase).',
  ].join(''));
}

// Have you identified a contributing guideline that should be included here?
// Please open a pull request!

const { danger, fail, message, warn } = require('danger');
const chainsmoker = require('chainsmoker');

const fileMatch = chainsmoker({
  created: danger.git.created_files,
  modified: danger.git.modified_files,
  createdOrModified: danger.git.modified_files.concat(danger.git.created_files),
  deleted: danger.git.deleted_files,
});

const documentation = fileMatch(
  '**/*.md',
  'lib/all-badge-examples.js',
  'frontend/components/usage.js'
);
const server = fileMatch('server.js');
const serviceTests = fileMatch('service-tests/*.js');
const helpers = fileMatch(
  'lib/**/*.js',
  '!**/*.spec.js',
  '!lib/all-badge-examples.js'
);
const logos = fileMatch(
  'logo/*.svg'
);
const helperTests = fileMatch('lib/**/*.spec.js');
const packageJson = fileMatch('package.json');
const packageLock = fileMatch('package-lock.json');
const capitals = fileMatch('**/*[A-Z]*.js');
const underscores = fileMatch('**/*_*.js');
const targetBranch = danger.github.pr.base.ref;

message([
  ':sparkles: Thanks for your contribution to Shields, ',
  `@${danger.github.pr.user.login}!`
].join(''));

if (targetBranch != 'master') {
  const message = `This PR targets \`${targetBranch}\``;
  const idea = 'It is likely that the target branch should be `master`';
  warn(`${message} - <i>${idea}</i>`);
}

if (documentation.createdOrModified) {
  message([
    'Thanks for contributing to our documentation. ',
    'We :heart: our [documentarians](http://www.writethedocs.org/)!'
  ].join(''));
}

if (packageJson.modified && !packageLock.modified) {
  const message = 'This PR modified package.json, but not package-lock.json';
  const idea = 'Perhaps you need to run `npm install`?';
  warn(`${message} - <i>${idea}</i>`);
}

if (server.modified && !serviceTests.createdOrModified) {
  warn([
    'This PR modified the server but none of the service tests. ',
    "That's okay so long as it's refactoring existing code.",
  ].join(''));
}

if (helpers.created && !helperTests.created) {
  warn([
    'This PR added helper modules in `lib/` but not accompanying tests. ',
    'Generally helper modules should have their own tests.',
  ].join(''));
} else if (helpers.createdOrModified && !helperTests.createdOrModified) {
  warn([
    'This PR modified helper functions in `lib/` but not accompanying tests. ',
    "That's okay so long as it's refactoring existing code.",
  ].join(''));
}

if (logos.created) {
  message([
    ':art: Thanks for submitting a logo. ',
    'Please ensure your contribution follows our ',
    '[guidance](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#logos) ',
    'for logo submissions.'
  ].join(''));
}

if (capitals.created || underscores.created) {
  fail([
    'JavaScript source files should be named with kebab-case ',
    '(dash-separated lowercase).',
  ].join(''));
}

Add some more rules to dangerfile (#1560)