/*
 * SPDX-FileCopyrightText: syuilo and other misskey contributors
 * SPDX-License-Identifier: AGPL-3.0-only
 */

import { ulid } from 'ulid';
import { describe, test, expect } from '@jest/globals';
import { aidRegExp, genAid, parseAid } from '@/misc/id/aid.js';
import { aidxRegExp, genAidx, parseAidx } from '@/misc/id/aidx.js';
import { genMeid, meidRegExp, parseMeid } from '@/misc/id/meid.js';
import { genMeidg, meidgRegExp, parseMeidg } from '@/misc/id/meidg.js';
import { genObjectId, objectIdRegExp, parseObjectId } from '@/misc/id/object-id.js';
import { ulidRegExp, parseUlid } from '@/misc/id/ulid.js';

describe('misc:id', () => {
	test('aid', () => {
		const date = Date.now();
		const gotAid = genAid(date);
		expect(gotAid).toMatch(aidRegExp);
		expect(parseAid(gotAid).date.getTime()).toBe(date);
	});

	test('aidx', () => {
		const date = Date.now();
		const gotAidx = genAidx(date);
		expect(gotAidx).toMatch(aidxRegExp);
		expect(parseAidx(gotAidx).date.getTime()).toBe(date);
	});

	test('meid', () => {
		const date = Date.now();
		const gotMeid = genMeid(date);
		expect(gotMeid).toMatch(meidRegExp);
		expect(parseMeid(gotMeid).date.getTime()).toBe(date);
	});

	test('meidg', () => {
		const date = Date.now();
		const gotMeidg = genMeidg(date);
		expect(gotMeidg).toMatch(meidgRegExp);
		expect(parseMeidg(gotMeidg).date.getTime()).toBe(date);
	});

	test('objectid', () => {
		const date = Date.now();
		const gotObjectId = genObjectId(date);
		expect(gotObjectId).toMatch(objectIdRegExp);
		expect(Math.floor(parseObjectId(gotObjectId).date.getTime() / 1000)).toBe(Math.floor(date / 1000));
	});

	test('ulid', () => {
		const date = Date.now();
		const gotUlid = ulid(date);
		expect(gotUlid).toMatch(ulidRegExp);
		expect(parseUlid(gotUlid).date.getTime()).toBe(date);
	});
});