feat: add configurable credit calculation with validation

This commit is contained in:
Codex
2026-02-18 12:31:16 +00:00
parent 6f091e32d3
commit debcbe012b
2 changed files with 71 additions and 0 deletions

35
test/credits.test.js Normal file
View File

@@ -0,0 +1,35 @@
"use strict";
const test = require("node:test");
const assert = require("node:assert/strict");
const { calculateCredits } = require("../src/lib/credits");
const config = {
baseCredits: 1,
includedChars: 25000,
stepChars: 10000,
stepCredits: 1,
maxCharsPerArticle: 120000,
};
test("charges base credit up to included chars", () => {
assert.equal(calculateCredits(1, config), 1);
assert.equal(calculateCredits(25000, config), 1);
});
test("charges one extra credit after crossing step boundary", () => {
assert.equal(calculateCredits(25001, config), 2);
assert.equal(calculateCredits(35000, config), 2);
});
test("charges multiple steps correctly", () => {
assert.equal(calculateCredits(45001, config), 4);
});
test("rejects oversized articles", () => {
assert.throws(() => calculateCredits(120001, config), /article_too_long/);
});
test("rejects non-positive charCount", () => {
assert.throws(() => calculateCredits(0, config), /charCount must be a positive integer/);
});