status-checker
Version:
A lean, dependency-free URL status checker library
389 lines • 12.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.runEvaluatorTests = runEvaluatorTests;
const evaluator_1 = require("./evaluator");
const logger_1 = require("./logger");
const logger = new logger_1.Logger('info');
/**
* Run unit tests for the CheckEvaluator
*/
async function runEvaluatorTests() {
logger.info('Running CheckEvaluator Unit Tests...');
// Test status code checks
testStatusCodeChecks();
// Test header checks
testHeaderChecks();
// Test body checks
testBodyChecks();
// Test JSON path checks
testJsonPathChecks();
// Test response time checks
testResponseTimeChecks();
// Test multiple checks
testMultipleChecks();
logger.info('All evaluator tests completed!');
}
/**
* Test status code checks
*/
function testStatusCodeChecks() {
logger.info('\n=== Testing Status Code Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {},
body: '',
responseTime: 100
};
// Test equals operator
const equalsCheck = {
type: 'status_code',
operator: 'equals',
value: '200'
};
const equalsResult = evaluator.evaluateCheck(equalsCheck, mockResponse);
logResult('Status Code Equals', equalsResult, true);
// Test not_equals operator
const notEqualsCheck = {
type: 'status_code',
operator: 'not_equals',
value: '404'
};
const notEqualsResult = evaluator.evaluateCheck(notEqualsCheck, mockResponse);
logResult('Status Code Not Equals', notEqualsResult, true);
// Test matches operator
const matchesCheck = {
type: 'status_code',
operator: 'matches',
value: '2[0-9]{2}'
};
const matchesResult = evaluator.evaluateCheck(matchesCheck, mockResponse);
logResult('Status Code Matches', matchesResult, true);
// Test not_matches operator
const notMatchesCheck = {
type: 'status_code',
operator: 'not_matches',
value: '4[0-9]{2}'
};
const notMatchesResult = evaluator.evaluateCheck(notMatchesCheck, mockResponse);
logResult('Status Code Not Matches', notMatchesResult, true);
// Test multiple values
const multipleCheck = {
type: 'status_code',
operator: 'equals',
value: '200|201|202'
};
const multipleResult = evaluator.evaluateCheck(multipleCheck, mockResponse);
logResult('Status Code Multiple Values', multipleResult, true);
// Test failing check
const failingCheck = {
type: 'status_code',
operator: 'equals',
value: '404'
};
const failingResult = evaluator.evaluateCheck(failingCheck, mockResponse);
logResult('Status Code Failing Check', failingResult, false);
}
/**
* Test header checks
*/
function testHeaderChecks() {
logger.info('\n=== Testing Header Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {
'content-type': 'application/json; charset=utf-8',
'x-custom-header': 'test-value'
},
body: '',
responseTime: 100
};
// Test exists operator
const existsCheck = {
type: 'header',
name: 'content-type',
operator: 'exists'
};
const existsResult = evaluator.evaluateCheck(existsCheck, mockResponse);
logResult('Header Exists', existsResult, true);
// Test not_exists operator
const notExistsCheck = {
type: 'header',
name: 'non-existent',
operator: 'not_exists'
};
const notExistsResult = evaluator.evaluateCheck(notExistsCheck, mockResponse);
logResult('Header Not Exists', notExistsResult, true);
// Test equals operator
const equalsCheck = {
type: 'header',
name: 'x-custom-header',
operator: 'equals',
value: 'test-value'
};
const equalsResult = evaluator.evaluateCheck(equalsCheck, mockResponse);
logResult('Header Equals', equalsResult, true);
// Test contains operator
const containsCheck = {
type: 'header',
name: 'content-type',
operator: 'contains',
value: 'application/json'
};
const containsResult = evaluator.evaluateCheck(containsCheck, mockResponse);
logResult('Header Contains', containsResult, true);
// Test matches operator
const matchesCheck = {
type: 'header',
name: 'content-type',
operator: 'matches',
value: 'application\\/.*utf-8'
};
const matchesResult = evaluator.evaluateCheck(matchesCheck, mockResponse);
logResult('Header Matches', matchesResult, true);
// Test failing check
const failingCheck = {
type: 'header',
name: 'content-type',
operator: 'equals',
value: 'text/html'
};
const failingResult = evaluator.evaluateCheck(failingCheck, mockResponse);
logResult('Header Failing Check', failingResult, false);
}
/**
* Test body checks
*/
function testBodyChecks() {
logger.info('\n=== Testing Body Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {},
body: '{"name":"John Doe","age":30,"active":true}',
responseTime: 100
};
// Test exists operator
const existsCheck = {
type: 'body',
operator: 'exists'
};
const existsResult = evaluator.evaluateCheck(existsCheck, mockResponse);
logResult('Body Exists', existsResult, true);
// Test equals operator
const equalsCheck = {
type: 'body',
operator: 'equals',
value: '{"name":"John Doe","age":30,"active":true}'
};
const equalsResult = evaluator.evaluateCheck(equalsCheck, mockResponse);
logResult('Body Equals', equalsResult, true);
// Test contains operator
const containsCheck = {
type: 'body',
operator: 'contains',
value: 'John Doe'
};
const containsResult = evaluator.evaluateCheck(containsCheck, mockResponse);
logResult('Body Contains', containsResult, true);
// Test matches operator
const matchesCheck = {
type: 'body',
operator: 'matches',
value: '.*"age":30.*'
};
const matchesResult = evaluator.evaluateCheck(matchesCheck, mockResponse);
logResult('Body Matches', matchesResult, true);
// Test failing check
const failingCheck = {
type: 'body',
operator: 'contains',
value: 'Jane Smith'
};
const failingResult = evaluator.evaluateCheck(failingCheck, mockResponse);
logResult('Body Failing Check', failingResult, false);
}
/**
* Test JSON path checks
*/
function testJsonPathChecks() {
logger.info('\n=== Testing JSON Path Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {},
body: JSON.stringify({
name: 'John Doe',
age: 30,
address: {
city: 'Sydney',
country: 'Australia'
},
tags: ['developer', 'typescript'],
active: true
}),
responseTime: 100
};
// Test simple path
const simpleCheck = {
type: 'jsonpath',
path: 'name',
operator: 'equals',
value: 'John Doe'
};
const simpleResult = evaluator.evaluateCheck(simpleCheck, mockResponse);
logResult('JSON Path Simple', simpleResult, true);
// Test nested path
const nestedCheck = {
type: 'jsonpath',
path: 'address.city',
operator: 'equals',
value: 'Sydney'
};
const nestedResult = evaluator.evaluateCheck(nestedCheck, mockResponse);
logResult('JSON Path Nested', nestedResult, true);
// Test array element
const arrayCheck = {
type: 'jsonpath',
path: 'tags[0]',
operator: 'equals',
value: 'developer'
};
const arrayResult = evaluator.evaluateCheck(arrayCheck, mockResponse);
logResult('JSON Path Array', arrayResult, true);
// Test exists operator
const existsCheck = {
type: 'jsonpath',
path: 'active',
operator: 'exists'
};
const existsResult = evaluator.evaluateCheck(existsCheck, mockResponse);
logResult('JSON Path Exists', existsResult, true);
// Test contains operator
const containsCheck = {
type: 'jsonpath',
path: 'address.country',
operator: 'contains',
value: 'Austra'
};
const containsResult = evaluator.evaluateCheck(containsCheck, mockResponse);
logResult('JSON Path Contains', containsResult, true);
// Test failing check
const failingCheck = {
type: 'jsonpath',
path: 'name',
operator: 'equals',
value: 'Jane Smith'
};
const failingResult = evaluator.evaluateCheck(failingCheck, mockResponse);
logResult('JSON Path Failing Check', failingResult, false);
}
/**
* Test response time checks
*/
function testResponseTimeChecks() {
logger.info('\n=== Testing Response Time Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {},
body: '',
responseTime: 100
};
// Test less_than operator
const lessThanCheck = {
type: 'response_time',
operator: 'less_than',
value: 200
};
const lessThanResult = evaluator.evaluateCheck(lessThanCheck, mockResponse);
logResult('Response Time Less Than', lessThanResult, true);
// Test greater_than operator
const greaterThanCheck = {
type: 'response_time',
operator: 'greater_than',
value: 50
};
const greaterThanResult = evaluator.evaluateCheck(greaterThanCheck, mockResponse);
logResult('Response Time Greater Than', greaterThanResult, true);
// Test failing check
const failingCheck = {
type: 'response_time',
operator: 'less_than',
value: 50
};
const failingResult = evaluator.evaluateCheck(failingCheck, mockResponse);
logResult('Response Time Failing Check', failingResult, false);
}
/**
* Test multiple checks
*/
function testMultipleChecks() {
logger.info('\n=== Testing Multiple Checks ===');
const evaluator = new evaluator_1.CheckEvaluator();
const mockResponse = {
statusCode: 200,
headers: {
'content-type': 'application/json'
},
body: '{"name":"John Doe","age":30}',
responseTime: 100
};
const checks = [
{
type: 'status_code',
operator: 'equals',
value: '200'
},
{
type: 'header',
name: 'content-type',
operator: 'contains',
value: 'application/json'
},
{
type: 'jsonpath',
path: 'name',
operator: 'equals',
value: 'John Doe'
},
{
type: 'response_time',
operator: 'less_than',
value: 200
}
];
const results = evaluator.evaluateChecks(checks, mockResponse);
const allPassed = results.every(result => result.passed);
logger.info(`Multiple Checks: ${allPassed ? 'All Passed' : 'Some Failed'}`);
results.forEach((result, index) => {
logger.info(` Check ${index + 1}: ${result.passed ? 'Passed' : 'Failed'} - ${result.description}`);
});
}
/**
* Log a check result
* @param name Test name
* @param result Check result
* @param expected Expected result
*/
function logResult(name, result, expected) {
const passed = result.passed === expected;
if (passed) {
logger.info(`${name}: Passed`);
}
else {
logger.error(`${name}: Failed - Expected ${expected}, got ${result.passed}`);
if (result.error) {
logger.error(` Error: ${result.error}`);
}
logger.error(` Description: ${result.description}`);
logger.error(` Expected: ${result.expectedValue}, Actual: ${result.actualValue}`);
}
}
// Run the tests
runEvaluatorTests().catch(error => {
logger.error(`Unhandled error: ${error}`);
process.exit(1);
});
//# sourceMappingURL=evaluator-tests.js.map