# test.govlab/patterns/configuration/strings/graph.strings.test.ts

> 21 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-patterns-configuration-strings-graph-strings-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/patterns/configuration/strings/graph.strings.test.ts.txt

Listed in [test.govlab/patterns/configuration/strings](https://banes-lab.com/api/source/testing/test.govlab/patterns/configuration/strings.md), after [test.govlab/patterns/configuration/strings/code.strings.test.ts](https://banes-lab.com/source/testing/test.govlab/patterns/configuration/strings/code.strings.test.ts.md) and before [test.govlab/patterns/configuration/strings/markup.strings.test.ts](https://banes-lab.com/source/testing/test.govlab/patterns/configuration/strings/markup.strings.test.ts.md).

## Contained in

- [test.govlab/patterns/configuration/strings](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-patterns-configuration-strings.md)

## Source

```typescript
import {
    deadNode,
    effectCycle,
    missingProducer,
    orphanNode,
    ownProducer,
    producedTwice,
    stepsBack,
} from "@govlab/patterns/configuration/strings/graph.strings.ts";
import { describe, expect, it } from "vitest";

describe("the graph strings", () => {
    it("name the node each refusal concerns", () => {
        for (const line of [producedTwice("n"), ownProducer("n"), effectCycle("n"), orphanNode("n"), deadNode("n")]) {
            expect(line).toContain('"n"');
        }
    });

    it("name both ends of an edge", () => {
        expect(missingProducer("n", "p")).toBe('node "n" consumes missing producer "p"');
        expect(stepsBack("p", "n")).toBe('edge "p" → "n" steps back on the reasoning axis');
    });
});
```
