DanielaValero/fit-commit-js

View on GitHub
lib/validators/ticketCode.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

const log = require( 'npmlog' );
const error = require( '../message/error' );
const base = require( './base' );
const utils = require( './util/util' );

const constants = {
  TICKET_CODE_DEFAULT_VALUE: '',
  VALIDATOR_NAME: 'ticketCode',
  TICKET_CODE_PROPERTY: 'ticketCodeText',
  ONLY_ONE_TICKET_PROPERTY: 'oneTicketPerCommit',
  ONLY_ONE_TICKET_DEFAULT_VALUE: false,
};

/*
   Private
   ========================================================================== */
function isOnlyOneAllowed() {
  return base.getValidatorProperty( constants.VALIDATOR_NAME,
                                    constants.ONLY_ONE_TICKET_PROPERTY )
                                    || constants.ONLY_ONE_TICKET_DEFAULT_VALUE;
}

/**
 * @private
 */
function validateticketCode( messageArray ) {
  const count = utils.countStringInCommitMessage( constants.VALIDATOR_NAME,
                                                  constants.TICKET_CODE_PROPERTY
                                                  || constants.TICKET_CODE_DEFAULT_VALUE,
                                                  messageArray );

  if ( count === 0 ) {
    error.addError( 'ticketCode', 'You did not used a ticket code in your commit message' );
  }

  if ( isOnlyOneAllowed() && count > 1 ) {
    error.addError( 'ticketCode', 'Use only one ticket per commit' );
  }
}

/*
   Public
   ========================================================================== */

function validate( messageArray ) {
  log.verbose( 'Running ticketCode Validation' );

  if ( base.isValidatorEnabled( constants.VALIDATOR_NAME ) ) {
    validateticketCode( messageArray );
  }

  return error.hasErrors( 'ticketCode' );
}

module.exports = {
  validate,
};