# test.govlab/quality/core/parsers/tool.revive.parser.test.ts

> 32 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-quality-core-parsers-tool-revive-parser-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.revive.parser.test.ts.txt

Listed in [test.govlab/quality/core/parsers](https://banes-lab.com/api/source/testing/test.govlab/quality/core/parsers.md), after [test.govlab/quality/core/parsers/tool.pylint.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.pylint.parser.test.ts.md) and before [test.govlab/quality/core/parsers/tool.rubocop.parser.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/parsers/tool.rubocop.parser.test.ts.md).

## Contained in

- [test.govlab/quality/core/parsers](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-quality-core-parsers.md)

## Source

```typescript
import { describe, expect, it } from "vitest";
import { parseReviveOutput } from "@govlab/quality/core/parsers/tool.revive.parser.ts";

const EXPECTED_COUNT = 2;

const RECORDED =
    '[{"Failure":"function Complex has cognitive complexity 15 (> max enabled 3)","Position":{"Start":{"Column":1,"Filename":"bad.go","Line":3}},"RuleName":"cognitive-complexity","Severity":"warning"},' +
    '{"Failure":"maximum number of arguments per function exceeded; max 2 but got 3","Position":{"Start":{"Column":1,"Filename":"bad.go","Line":3}},"RuleName":"argument-limit","Severity":"error"}]';

describe("parseReviveOutput", () => {
    it("maps each failure to a gating (advisory:false) error finding keyed by RuleName when elected", () => {
        const findings = parseReviveOutput(RECORDED, "go", false);
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings[0]).toMatchObject({
            advisory: false,
            column: 1,
            ecosystem: "go",
            file: "bad.go",
            line: 3,
            ruleId: "cognitive-complexity",
            severity: "error",
            tool: "revive",
        });
        expect(findings[1]).toMatchObject({ advisory: false, ruleId: "argument-limit", severity: "error" });
    });

    it("marks every finding advisory (non-gating) but still an error when revive runs unelected", () => {
        const findings = parseReviveOutput(RECORDED, "go", true);
        expect(findings.every((finding) => finding.advisory && finding.severity === "error")).toBe(true);
    });

    it("returns [] on empty or non-array output", () => {
        expect(parseReviveOutput("", "go", false)).toEqual([]);
        expect(parseReviveOutput("[]", "go", false)).toEqual([]);
        expect(parseReviveOutput("not json", "go", false)).toEqual([]);
    });
});
```
