31 lines
1.9 KiB
TypeScript
Executable File
31 lines
1.9 KiB
TypeScript
Executable File
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readFile } from 'node:fs/promises';
|
|
|
|
test('project overview focuses on mining and player-to-player card trades',async()=>{
|
|
const readme=await readFile(new URL('../README.md',import.meta.url),'utf8');
|
|
assert.match(readme,/Mine a block with the native RandomX CPU miner to earn a card/);
|
|
assert.match(readme,/algorithm also used by Monero/);
|
|
assert.match(readme,/consumer CPUs competitive/);
|
|
assert.match(readme,/trade cards directly with another player/);
|
|
assert.match(readme,/docs\/card-only-production-plan\.md/);
|
|
assert.doesNotMatch(readme,/## Peer ownership and customization/);
|
|
assert.match(readme,/does not yet contain a project LICENSE file/);
|
|
const plan=await readFile(new URL('../docs/card-only-production-plan.md',import.meta.url),'utf8');
|
|
assert.match(plan,/Markets and real money/);
|
|
assert.match(plan,/Mainnet or valuable cards/);
|
|
for(const name of ['../compose.yaml','../compose.testnet.yaml','../compose.mainnet.yaml'])
|
|
assert.doesNotMatch(await readFile(new URL(name,import.meta.url),'utf8'),/MARKET|CUSTODY|PAYMENT_MODE/);
|
|
});
|
|
test('homepage presents mining, collections, and direct card trading without marketplace UI',async()=>{
|
|
const app=await readFile(new URL('../src/App.tsx',import.meta.url),'utf8');
|
|
assert.match(app,/Mine with your CPU/);
|
|
assert.match(app,/Direct card-for-card trades/);
|
|
assert.match(app,/designed to resist specialized ASICs/);
|
|
assert.match(app,/ASIC resistance is a design goal, not a guarantee/);
|
|
assert.match(app,/Trade cards directly with another collector/);
|
|
assert.doesNotMatch(app,/marketplace|custody preview|fixed-price listings/i);
|
|
assert.match(app,/<details className="mining-details"><summary>Want to run a miner\? Setup & safety details/);
|
|
assert.match(app,/--consent/); // Documentation-only change: runnable miner invocation keeps its existing required flag.
|
|
});
|