@apistudio/apim-cli
Version:
CLI for API Management Products
84 lines (69 loc) • 3.01 kB
JavaScript
// Test script to verify the recursive combined ruleset
import combinedRuleset from './combined-ruleset.js';
// Main function to run the tests
function runTests() {
try {
// Check if the ruleset contains all expected components
const expectedComponents = [
'api.ibm.com_v1_api.ruleset.yaml',
'api.ibm.com_v1_cors.ruleset.yaml',
'api.ibm.com_v1_product.ruleset.yaml',
'api.ibm.com_v1_plan.ruleset.yaml',
'api.ibm.com_v1_httpendpoint.ruleset.yaml',
'api.ibm.com_v1_mockendpoint.ruleset.yaml'
];
// Verify each component exists and has rules
expectedComponents.forEach(component => {
if (!combinedRuleset[component]) {
console.error(`❌ Missing component: ${component}`);
} else if (!combinedRuleset[component].rules) {
console.error(`❌ Component ${component} has no rules`);
} else {
console.log(`✅ Component ${component} loaded successfully with ${Object.keys(combinedRuleset[component].rules).length} rules`);
}
});
// Print total number of components and rules
const totalComponents = Object.keys(combinedRuleset).length;
let totalRules = 0;
let specFieldRules = 0;
let nestedRules = 0;
Object.values(combinedRuleset).forEach(ruleset => {
if (ruleset && ruleset.rules) {
const ruleCount = Object.keys(ruleset.rules).length;
totalRules += ruleCount;
// Count rules specifically for spec field properties
const specRules = Object.keys(ruleset.rules).filter(ruleName =>
ruleName.startsWith('spec-') &&
!['spec-details-not-exist', 'spec-details-whitelist-check'].includes(ruleName)
).length;
specFieldRules += specRules;
// Count nested rules (rules with multiple hyphens, indicating nested properties)
const nestedRuleCount = Object.keys(ruleset.rules).filter(ruleName =>
(ruleName.match(/-/g) || []).length > 1 &&
ruleName.startsWith('spec-')
).length;
nestedRules += nestedRuleCount;
}
});
console.log(`\nTotal components: ${totalComponents}`);
console.log(`Total rules: ${totalRules}`);
console.log(`Rules for spec field properties: ${specFieldRules}`);
console.log(`Nested property rules: ${nestedRules}`);
// Sample validation for API component
const apiRuleset = combinedRuleset['api.ibm.com_v1_api.ruleset.yaml'];
if (apiRuleset) {
console.log('\nSample of nested property rules for API component:');
const nestedRules = Object.keys(apiRuleset.rules)
.filter(ruleName => (ruleName.match(/-/g) || []).length > 1 && ruleName.startsWith('spec-'))
.slice(0, 5);
nestedRules.forEach(ruleName => {
console.log(`- ${ruleName}: ${apiRuleset.rules[ruleName].description}`);
});
}
} catch (error) {
console.error('Error running tests:', error);
}
}
// Run the tests
runTests();
// Made with Bob