// SPDX-License-Identifier: AGPL-3.0-or-later

import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
import type {ApiTestHarness} from '../../test/ApiTestHarness';
import {
	createAuthHarness,
	createTestAccount,
	createUniqueEmail,
	createUniqueUsername,
	fetchSettings,
	registerUser,
} from './AuthTestUtils';

describe('User settings defaults', () => {
	let harness: ApiTestHarness;
	beforeAll(async () => {
		harness = await createAuthHarness();
	});
	beforeEach(async () => {
		await harness.reset();
	});
	afterAll(async () => {
		await harness?.shutdown();
	});
	it('defaults incoming calls to friends-only (adult and minor)', async () => {
		const incomingCallFriendsOnly = 8;
		const adult = await createTestAccount(harness, {dateOfBirth: '2000-01-01'});
		const adultSettings = await fetchSettings(harness, adult.token);
		expect(adultSettings.response.status).toBe(200);
		expect(
			(
				adultSettings.json as {
					incoming_call_flags: number;
				}
			).incoming_call_flags,
		).toBe(incomingCallFriendsOnly);
		const minorReg = await registerUser(harness, {
			email: createUniqueEmail(),
			username: createUniqueUsername(),
			global_name: 'Minor Settings',
			password: 'a-strong-password',
			date_of_birth: '2012-01-01',
			consent: true,
		});
		const minorSettings = await fetchSettings(harness, minorReg.token);
		expect(minorSettings.response.status).toBe(200);
		expect(
			(
				minorSettings.json as {
					incoming_call_flags: number;
				}
			).incoming_call_flags,
		).toBe(incomingCallFriendsOnly);
	});
});
