feat(okr): lukket OKF type/tags-vokabular for ingestion-snap [skip-docs]

This commit is contained in:
Kjell Tore Guttormsen 2026-06-30 11:00:16 +02:00
commit a9d9c45192
2 changed files with 138 additions and 0 deletions

65
tests/okf-vocab.test.mjs Normal file
View file

@ -0,0 +1,65 @@
// okf-vocab.test.mjs
// Tester det lukkede OKF-vokabularet (type+tags) og type->nivaa-ruting for
// innboks-ingestion (Step 2). snapType: exact-match -> kanonisk, ellers safe
// default Dokument; snapTags dropper ukjente; routeLevel mapper type til
// bundle-nivaa. Direkte import (zero npm deps). Moenster: tests/frontmatter.test.mjs.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import {
TYPE_VOCAB,
TAGS_VOCAB,
snapType,
snapTags,
routeLevel,
} from '../lib/okf-vocab.mjs';
test('snapType: kjent type beholdes kanonisk', () => {
assert.equal(snapType('OKR'), 'OKR');
assert.equal(snapType('Tildelingsbrev'), 'Tildelingsbrev');
});
test('snapType: ukjent type -> safe default Dokument', () => {
assert.equal(snapType('ukjent'), 'Dokument');
assert.equal(snapType(''), 'Dokument');
assert.equal(snapType(undefined), 'Dokument');
});
test('snapTags: dropper ukjente, beholder kjente (bevart rekkefolge)', () => {
assert.deepEqual(snapTags(['Strategi', 'xyz']), ['Strategi']);
assert.deepEqual(snapTags(['xyz', 'abc']), []);
assert.deepEqual(snapTags([]), []);
});
test('snapTags: ikke-array -> tom liste (ingen krasj)', () => {
assert.deepEqual(snapTags(undefined), []);
assert.deepEqual(snapTags(null), []);
});
test('routeLevel: strategisk-kontekst for foringsdokumenter', () => {
assert.equal(routeLevel('Tildelingsbrev'), 'strategisk-kontekst');
assert.equal(routeLevel('Virksomhetsplan'), 'strategisk-kontekst');
assert.equal(routeLevel('Overordnede OKR'), 'strategisk-kontekst');
});
test('routeLevel: historikk for Retrospektiv', () => {
assert.equal(routeLevel('Retrospektiv'), 'historikk');
});
test('routeLevel: dokumenter for OKR/Status/Notat/Dokument/Organisasjonsprofil', () => {
assert.equal(routeLevel('OKR'), 'dokumenter');
assert.equal(routeLevel('Status'), 'dokumenter');
assert.equal(routeLevel('Notat'), 'dokumenter');
assert.equal(routeLevel('Dokument'), 'dokumenter');
assert.equal(routeLevel('Organisasjonsprofil'), 'dokumenter');
});
test('routeLevel: ukjent type -> default dokumenter', () => {
assert.equal(routeLevel('Whatever'), 'dokumenter');
});
test('vokabular non-tomt + default i settet', () => {
assert.ok(TYPE_VOCAB.length > 0, 'TYPE_VOCAB non-tomt');
assert.ok(TAGS_VOCAB.length > 0, 'TAGS_VOCAB non-tomt');
assert.ok(TYPE_VOCAB.includes('Dokument'), 'default Dokument er i vokabularet');
});