Files
opendata/test/test.laws.node.ts
T

130 lines
3.8 KiB
TypeScript

import { expect, tap } from '@git.zone/tstest/tapbundle';
import * as opendata from '../ts/index.js';
import * as paths from '../ts/paths.js';
import * as plugins from '../ts/plugins.js';
const testDbFolder = plugins.path.join(paths.packageDir, '.nogit', 'law-smartdb-test');
let lawService: opendata.LawService;
tap.test('LawService - setup local smartdb', async () => {
await plugins.smartfs.directory(testDbFolder).recursive().delete().catch(() => {});
lawService = new opendata.LawService({
dbFolderPath: testDbFolder,
dbName: 'lawstest',
});
await lawService.start();
expect(lawService).toBeInstanceOf(opendata.LawService);
});
tap.test('LawService - sync and search Germany law', async () => {
const germanLaw = await lawService.syncLaw({
jurisdiction: 'de',
identifier: 'aeg',
});
expect(germanLaw.identifier).toEqual('aeg');
expect(germanLaw.title).toInclude('Eisenbahngesetz');
expect(germanLaw.text).toInclude('Ausgleichspflicht');
const results = await lawService.searchLaws({
jurisdiction: 'de',
query: 'Eisenbahngesetz',
limit: 5,
});
expect(results.length).toBeGreaterThan(0);
expect(results[0].identifier).toEqual('aeg');
});
tap.test('LawService - sync and search EU law', async () => {
const euLaw = await lawService.syncLaw({
jurisdiction: 'eu',
identifier: '32024R1689',
language: 'EN',
});
expect(euLaw.identifier).toEqual('32024R1689');
expect(euLaw.title).toInclude('Artificial Intelligence Act');
expect(euLaw.text.toLowerCase()).toInclude('artificial intelligence');
const results = await lawService.searchLaws({
jurisdiction: 'eu',
query: 'Artificial Intelligence Act',
limit: 5,
});
expect(results.length).toBeGreaterThan(0);
expect(results[0].identifier).toEqual('32024R1689');
});
tap.test('LawService - sync and search USA law', async () => {
const usLaw = await lawService.syncLaw({
jurisdiction: 'us',
identifier: 'PLAW-119publ1',
usCollection: 'PLAW',
});
expect(usLaw.identifier).toEqual('PLAW-119publ1');
expect(usLaw.shortTitle).toInclude('Laken Riley Act');
expect(usLaw.text).toInclude('To require the Secretary of Homeland Security');
const results = await lawService.searchLaws({
jurisdiction: 'us',
query: 'Laken Riley Act',
limit: 5,
});
expect(results.length).toBeGreaterThan(0);
expect(results[0].identifier).toEqual('PLAW-119publ1');
});
tap.test('LawService - sync and search USA code citation', async () => {
const usCodeSection = await lawService.syncLaw({
jurisdiction: 'us',
identifier: '8 U.S.C. § 1226',
});
expect(usCodeSection.identifier).toEqual('8 USC 1226');
expect(usCodeSection.citation).toEqual('8 USC 1226');
expect(usCodeSection.title).toInclude('Apprehension and detention of aliens');
expect(usCodeSection.text).toInclude('Detention of criminal aliens');
const results = await lawService.searchLaws({
jurisdiction: 'us',
query: 'Apprehension and detention of aliens',
limit: 10,
});
expect(results.length).toBeGreaterThan(0);
expect(results.map((lawArg) => lawArg.identifier).includes('8 USC 1226')).toEqual(true);
});
tap.test('LawService - local lookup returns synced law', async () => {
const euLaw = await lawService.getLaw({
jurisdiction: 'eu',
identifier: '32024R1689',
language: 'EN',
});
expect(euLaw).toBeDefined();
expect(euLaw?.title).toInclude('Artificial Intelligence Act');
const usCodeLaw = await lawService.getLaw({
jurisdiction: 'us',
identifier: '8 USC 1226(c)',
});
expect(usCodeLaw).toBeDefined();
expect(usCodeLaw?.identifier).toEqual('8 USC 1226');
});
tap.test('LawService - teardown local smartdb', async () => {
await lawService.stop();
await plugins.smartfs.directory(testDbFolder).recursive().delete().catch(() => {});
});
export default tap.start();