# test.coordination/core/runners/member.runner.test.ts

> 35 lines of code and 0 definitions.

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

Listed in [test.coordination/core/runners](https://banes-lab.com/api/source/testing/test.coordination/core/runners.md), after [test.coordination/core/runners/mark.runner.test.ts](https://banes-lab.com/source/testing/test.coordination/core/runners/mark.runner.test.ts.md) and before [test.coordination/core/runners/process.runner.test.ts](https://banes-lab.com/source/testing/test.coordination/core/runners/process.runner.test.ts.md).

## Contained in

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

## Source

```typescript
import { describe, it } from "vitest";
import {
    headingTaken,
    memberAdded,
    regionMissing,
    surfaceMissing,
} from "coordination-surface/tools/core/strings/member.strings.ts";
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
import assert from "node:assert/strict";
import { join } from "node:path";
import { runMember } from "coordination-surface/tools/core/runners/member.runner.ts";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";

const TARGET = "roles.txt";

describe("runMember", () => {
    it("appends a member under a new heading, and refuses a missing surface, region or a taken heading", () => {
        const root = mkdtempSync(join(tmpdir(), "coordination-member-"));
        try {
            const absolute = join(root, TARGET);
            const request = { absolute, body: "reviews every venue", heading: "review", target: TARGET };
            assert.deepEqual(runMember(request), { code: 2, message: surfaceMissing(TARGET) });
            writeVerbatim(absolute, "# Roles\n");
            assert.deepEqual(runMember(request), { code: 2, message: regionMissing(TARGET) });
            writeVerbatim(absolute, ["═══ ROWS ═══", "## index", "keeps the index"].join("\n"));
            assert.deepEqual(runMember({ ...request, heading: "index" }), {
                code: 2,
                message: headingTaken("index", TARGET),
            });
            assert.deepEqual(runMember(request), { code: 0, message: memberAdded("review", TARGET) });
            assert.ok(readFileSync(absolute, "utf8").includes("## review"));
        } finally {
            rmSync(root, { force: true, recursive: true });
        }
    });
});
```
