# test.coordination/core/validators/emission.validator.test.ts

> 39 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-coordination-core-validators-emission-validator-test-ts
Source text: https://banes-lab.com/source/testing/test.coordination/core/validators/emission.validator.test.ts.txt

Listed in [test.coordination/core/validators](https://banes-lab.com/api/source/testing/test.coordination/core/validators.md), after [test.coordination/core/validators/declaration.validator.test.ts](https://banes-lab.com/source/testing/test.coordination/core/validators/declaration.validator.test.ts.md) and before [test.coordination/core/validators/entrypoint.validator.test.ts](https://banes-lab.com/source/testing/test.coordination/core/validators/entrypoint.validator.test.ts.md).

## Contained in

- [test.coordination/core/validators](https://banes-lab.com/anatomy/testing/folder-testing-test-coordination-core-validators.md)

## Source

```typescript
import { EMISSION_CALL, RULE_DIR, STEP_DIR } from "coordination-surface/tools/core/constants/report.constants.ts";
import {
    claimedReportIds,
    emittedIds,
    stepEmittedIds,
} from "coordination-surface/tools/core/validators/emission.validator.ts";
import { describe, it } from "vitest";
import { join, resolve } from "node:path";
import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
import assert from "node:assert/strict";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

describe("emittedIds", () => {
    it("reads each report id a source emits by its quoted second argument, once", () => {
        const source = [
            `${EMISSION_CALL}root, "gates", report);`,
            `${EMISSION_CALL}root, "gates", again);`,
            `${EMISSION_CALL}root, id, report);`,
        ].join("\n");
        assert.deepEqual(emittedIds(source), ["gates"]);
    });
});

describe("stepEmittedIds and claimedReportIds", () => {
    it("claim every step and rule by its file identity, plus the ids their sources emit", () => {
        const root = mkdtempSync(join(tmpdir(), "coordination-emission-"));
        try {
            mkdirSync(resolve(root, STEP_DIR), { recursive: true });
            mkdirSync(resolve(root, RULE_DIR), { recursive: true });
            writeVerbatim(resolve(root, STEP_DIR, "gate.step.ts"), `${EMISSION_CALL}root, "certificate", report);`);
            writeVerbatim(resolve(root, RULE_DIR, "board.rule.ts"), "export {};");
            writeVerbatim(resolve(root, RULE_DIR, "notes.md"), "");
            assert.deepEqual(stepEmittedIds(root), ["gate", "certificate"]);
            assert.deepEqual([...claimedReportIds(root)], ["gate", "certificate", "board"]);
            assert.deepEqual(stepEmittedIds(join(root, "absent")), []);
        } finally {
            rmSync(root, { force: true, recursive: true });
        }
    });
});
```
