Skip to main content
Glama
sarif-validity.spec.tsβ€’4.04 kB
import { describe, expect, it } from "vitest"; import { addResult, createSarifLog } from "../../src/utils/sarif"; describe("SARIF Validity", () => { it("mcp-001: should create valid SARIF log with correct version", () => { const sarifLog = createSarifLog("test-tool", "1.0.0"); // Verify SARIF version expect(sarifLog.version).toBe("2.1.0"); // Verify schema URL expect(sarifLog.$schema).toBe("https://json.schemastore.org/sarif-2.1.0.json"); // Verify runs array exists expect(sarifLog.runs).toBeDefined(); expect(Array.isArray(sarifLog.runs)).toBe(true); expect(sarifLog.runs.length).toBe(1); // Verify tool information const run = sarifLog.runs[0]; expect(run.tool.driver.name).toBe("test-tool"); expect(run.tool.driver.version).toBe("1.0.0"); }); it("mcp-002: should add results to SARIF log with ruleId", () => { const sarifLog = createSarifLog("test-tool", "1.0.0"); // Add a result addResult(sarifLog, "test-rule-001", "This is a test result", "/path/to/file.js", { startLine: 10, endLine: 15, startColumn: 5, endColumn: 20, }); // Verify result was added const run = sarifLog.runs[0]; expect(run.results).toBeDefined(); expect(Array.isArray(run.results)).toBe(true); expect(run.results.length).toBe(1); // Verify result properties const result = run.results[0]; expect(result.ruleId).toBe("test-rule-001"); expect(result.message.text).toBe("This is a test result"); // Verify location information expect(result.locations).toBeDefined(); expect(Array.isArray(result.locations)).toBe(true); expect(result.locations.length).toBe(1); const location = result.locations[0]; expect(location.physicalLocation).toBeDefined(); expect(location.physicalLocation.artifactLocation.uri).toBe("/path/to/file.js"); const region = location.physicalLocation.region; expect(region.startLine).toBe(10); expect(region.endLine).toBe(15); expect(region.startColumn).toBe(5); expect(region.endColumn).toBe(20); }); it("mcp-003: should handle multiple results in SARIF log", () => { const sarifLog = createSarifLog("test-tool", "1.0.0"); // Add multiple results addResult(sarifLog, "rule-001", "First result"); addResult(sarifLog, "rule-002", "Second result"); addResult(sarifLog, "rule-003", "Third result"); // Verify all results were added const run = sarifLog.runs[0]; expect(run.results.length).toBe(3); // Verify each result has a ruleId expect(run.results[0].ruleId).toBe("rule-001"); expect(run.results[1].ruleId).toBe("rule-002"); expect(run.results[2].ruleId).toBe("rule-003"); // Verify each result has a message expect(run.results[0].message.text).toBe("First result"); expect(run.results[1].message.text).toBe("Second result"); expect(run.results[2].message.text).toBe("Third result"); }); it("mcp-004: should create valid SARIF without location information", () => { const sarifLog = createSarifLog("test-tool", "1.0.0"); // Add a result without location addResult(sarifLog, "test-rule", "Result without location"); // Verify result was added const run = sarifLog.runs[0]; const result = run.results[0]; // Verify basic properties expect(result.ruleId).toBe("test-rule"); expect(result.message.text).toBe("Result without location"); // Verify no location when not provided expect(result.locations).toBeUndefined(); }); it("mcp-005: should convert SARIF log to valid JSON", () => { const sarifLog = createSarifLog("test-tool", "1.0.0"); // Add some results addResult(sarifLog, "rule-001", "Test result"); // Convert to JSON const jsonString = JSON.stringify(sarifLog, null, 2); // Parse back to verify it's valid JSON const parsed = JSON.parse(jsonString); // Verify structure is preserved expect(parsed.version).toBe("2.1.0"); expect(parsed.runs.length).toBe(1); expect(parsed.runs[0].tool.driver.name).toBe("test-tool"); expect(parsed.runs[0].results.length).toBe(1); expect(parsed.runs[0].results[0].ruleId).toBe("rule-001"); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/snapback-dev/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server