20 lines
1000 B
JavaScript
20 lines
1000 B
JavaScript
import fs from 'node:fs';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { PortfolioDatabase } from '../src/database.js';
|
|
|
|
test('database rate-limits posts and stores leaderboard scores', t => {
|
|
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'ssh-portfolio-'));
|
|
const db = new PortfolioDatabase(path.join(directory, 'test.sqlite'));
|
|
t.after(() => { db.close(); fs.rmSync(directory, { recursive: true, force: true }); });
|
|
assert.equal(db.addBoardPost({ author: 'visitor', body: 'hello', ip: '127.0.0.1', now: 100000 }).ok, true);
|
|
assert.match(db.addBoardPost({ author: 'visitor', body: 'again', ip: '127.0.0.1', now: 100001 }).reason, /wait/);
|
|
assert.equal(db.listBoardPosts()[0].body, 'hello');
|
|
db.addScore('flappy', 'visitor', 3);
|
|
db.addScore('flappy', 'visitor', 7);
|
|
assert.equal(db.getLeaderboard('flappy')[0].score, 7);
|
|
assert.equal(db.getPlayerBest('flappy', 'visitor'), 7);
|
|
});
|