# test.rules/shared/analyzers/taxonomy.analyzer.test.ts

> 70 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-rules-shared-analyzers-taxonomy-analyzer-test-ts
Source text: https://banes-lab.com/source/testing/test.rules/shared/analyzers/taxonomy.analyzer.test.ts.txt

Listed in [test.rules/shared/analyzers](https://banes-lab.com/api/source/testing/test.rules/shared/analyzers.md), after [test.rules/shared/analyzers/specifier.analyzer.test.ts](https://banes-lab.com/source/testing/test.rules/shared/analyzers/specifier.analyzer.test.ts.md) and before [test.rules/shared/analyzers/taxonomy.coverage.analyzer.test.ts](https://banes-lab.com/source/testing/test.rules/shared/analyzers/taxonomy.coverage.analyzer.test.ts.md).

## Contained in

- [test.rules/shared/analyzers](https://banes-lab.com/anatomy/testing/folder-testing-test-rules-shared-analyzers.md)

## Source

```typescript
import { describe, expect, it } from "vitest";
import { namingFinding, placementFinding, testFinding } from "@ssot/govlab/shared/analyzers/taxonomy.analyzer.ts";
import { GOVERNED_ROOT } from "@ssot/govlab/shared/resolvers/anchor.resolver.ts";
import { relativePath } from "@ssot/paths";

const REGISTRY = "base.registry.ts";

describe("placementFinding", () => {
    it("passes a conformant file and a generated file in its marker folder", () => {
        expect(placementFinding(REGISTRY, ["core", "registries"], GOVERNED_ROOT)).toBeNull();
        expect(placementFinding("ontology.generated.ts", ["core", "generated"], GOVERNED_ROOT)).toBeNull();
    });

    it("reports a generated file outside its marker folder, and a hand-written file inside one", () => {
        expect(placementFinding("ontology.generated.ts", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe(
            "markerMisplaced",
        );
        expect(placementFinding(REGISTRY, ["core", "generated"], GOVERNED_ROOT)?.messageId).toBe(
            "markerFolderIntruder",
        );
    });

    it("binds a backup copy to its backups folder", () => {
        expect(placementFinding("site-2026.backup.conf", ["core", "backups"], GOVERNED_ROOT)).toBeNull();
        expect(placementFinding("site-2026.backup.conf", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe(
            "markerMisplaced",
        );
    });

    it("leaves other name-exempt files unplaced and reports a folder that resolves to no role", () => {
        expect(placementFinding("base.registry.test.ts", ["core", "anywhere"], GOVERNED_ROOT)).toBeNull();
        expect(placementFinding(REGISTRY, ["core", "anywhere"], GOVERNED_ROOT)?.messageId).toBe("badShape");
    });
});

describe("testFinding", () => {
    const mirror = relativePath("codebase.testing.rules");

    it("reports a test outside every mirror, and passes a source file there", () => {
        expect(testFinding("base.registry.test.ts", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe(
            "misplacedTest",
        );
        expect(testFinding(REGISTRY, ["core", "registries"], GOVERNED_ROOT)).toBeNull();
    });

    it("passes a test at its subject's path in a mirror and reports one whose subject is absent", () => {
        expect(testFinding("location.resolver.test.ts", ["shared", "resolvers"], mirror)).toBeNull();
        expect(testFinding("absent.resolver.test.ts", ["shared", "resolvers"], mirror)?.messageId).toBe(
            "unmirroredTest",
        );
    });

    it("reports a file in a mirror that carries no test marker", () => {
        expect(testFinding("location.resolver.ts", ["shared", "resolvers"], mirror)?.messageId).toBe("nonTestInMirror");
    });
});

describe("namingFinding", () => {
    it("passes a file whose declared tag equals its folder's, and a name-exempt file", () => {
        expect(namingFinding(REGISTRY, ["core", "registries"], GOVERNED_ROOT)).toBeNull();
        expect(namingFinding("base.registry.test.ts", ["core", "registries"], GOVERNED_ROOT)).toBeNull();
        expect(namingFinding("README.md", ["core", "registries"], GOVERNED_ROOT)).toBeNull();
    });

    it("reports an undeclared concern word and a tag that differs from its folder's", () => {
        expect(namingFinding("base.gizmo.ts", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe("unparsable");
        expect(namingFinding("base.validator.ts", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe(
            "concernMismatch",
        );
    });

    it("admits both the unit tag and the collection tag in a folder whose concern declares a collection", () => {
        expect(namingFinding("base.asset.ts", ["core", "assets"], GOVERNED_ROOT)).toBeNull();
        expect(namingFinding("base.assets.ts", ["core", "assets"], GOVERNED_ROOT)).toBeNull();
        expect(namingFinding("base.registries.ts", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe(
            "unparsable",
        );
    });

    it("reads the concern of a file of any extension", () => {
        expect(namingFinding("base.gizmo.css", ["core", "registries"], GOVERNED_ROOT)?.messageId).toBe("unparsable");
    });
});
```
