MrBoolean/http-test

View on GitHub
util/validate.js

Summary

Maintainability
A
3 hrs
Test Coverage
/**
 * @module http-test/util/validate
 */

var isSuccess = require('is-success');
var clone = require('lodash.clone');

module.exports = function validate(item) {
  var index;
  var current;
  var thresholds;
  var result = {
    status: 'passed',
    elapsedTime: (item.res) ? item.res.elapsedTime : null,
    statusCode: (item.res) ? item.res.statusCode : null,
    affectedThreshold: null
  };

  if (item.err instanceof Error) {
    result.status = 'invalid';
  }

  if (item.res && !isSuccess(item.res.statusCode)) {
    result.status = 'failed';
  }

  if (result.status === 'passed' && item.spec.thresholds && item.spec.thresholds.length > 0) {
    thresholds = clone(item.spec.thresholds);
    thresholds.sort(function sortByThreshold(thresholdA, thresholdB) {
      return thresholdA.threshold > thresholdB.threshold;
    });

    for (index = 0; index < thresholds.length; index++) {
      current = thresholds[index];

      if (result.elapsedTime <= current.threshold) {
        result.affectedThreshold = current;
        break;
      }
    }

    if (!result.affectedThreshold) {
      result.affectedThreshold = thresholds[item.spec.thresholds.length - 1];
    }

    if (result.affectedThreshold.mark) {
      result.status = result.affectedThreshold.mark;
    }
  }

  return result;
};