feat: Admin Area General Settings and Categories 1.09
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import {
|
||||
datetimeMessage,
|
||||
defaultChallengeAddressError,
|
||||
defaultChallengeAddressMessage,
|
||||
deriveEventState,
|
||||
endAfterStartValidator,
|
||||
eventEndFieldMessage,
|
||||
isValidDefaultChallengeAddress,
|
||||
isoDatetimeValidator,
|
||||
normalizeDefaultChallengeAddress,
|
||||
normalizePageTitle,
|
||||
pageTitleError,
|
||||
pageTitleMessage,
|
||||
@@ -238,3 +242,87 @@ describe('eventEndFieldMessage (Job 889)', () => {
|
||||
expect(eventEndFieldMessage({}, {})).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('isValidDefaultChallengeAddress (Job 891)', () => {
|
||||
it('accepts valid IPv4 addresses', () => {
|
||||
expect(isValidDefaultChallengeAddress('10.66.77.88')).toBe(true);
|
||||
expect(isValidDefaultChallengeAddress('127.0.0.1')).toBe(true);
|
||||
expect(isValidDefaultChallengeAddress('0.0.0.0')).toBe(true);
|
||||
expect(isValidDefaultChallengeAddress('255.255.255.255')).toBe(true);
|
||||
});
|
||||
|
||||
it('accepts valid hostnames', () => {
|
||||
expect(isValidDefaultChallengeAddress('challenge.example.com')).toBe(true);
|
||||
expect(isValidDefaultChallengeAddress('ctf.example.org')).toBe(true);
|
||||
});
|
||||
|
||||
it('rejects incomplete IPv4 forms', () => {
|
||||
expect(isValidDefaultChallengeAddress('10.0.0.')).toBe(false);
|
||||
expect(isValidDefaultChallengeAddress('10.0.0')).toBe(false);
|
||||
expect(isValidDefaultChallengeAddress('10')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects IPv4 addresses with out-of-range octets', () => {
|
||||
expect(isValidDefaultChallengeAddress('999.1.1.1')).toBe(false);
|
||||
expect(isValidDefaultChallengeAddress('256.0.0.1')).toBe(false);
|
||||
});
|
||||
|
||||
it('rejects empty or whitespace-only strings', () => {
|
||||
expect(isValidDefaultChallengeAddress('')).toBe(false);
|
||||
expect(isValidDefaultChallengeAddress(' ')).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('defaultChallengeAddressError', () => {
|
||||
it('returns "required" for empty or whitespace-only values', () => {
|
||||
expect(defaultChallengeAddressError('')).toBe('required');
|
||||
expect(defaultChallengeAddressError(' ')).toBe('required');
|
||||
expect(defaultChallengeAddressError(null)).toBe('required');
|
||||
});
|
||||
|
||||
it('returns "format" for malformed values', () => {
|
||||
expect(defaultChallengeAddressError('10.0.0.')).toBe('format');
|
||||
expect(defaultChallengeAddressError('10.0.0')).toBe('format');
|
||||
expect(defaultChallengeAddressError('999.1.1.1')).toBe('format');
|
||||
});
|
||||
|
||||
it('returns null for valid IPv4 or hostname values', () => {
|
||||
expect(defaultChallengeAddressError('10.66.77.88')).toBeNull();
|
||||
expect(defaultChallengeAddressError('challenge.example.com')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('normalizeDefaultChallengeAddress', () => {
|
||||
it('trims surrounding whitespace from valid input', () => {
|
||||
expect(normalizeDefaultChallengeAddress(' 10.20.30.40 ')).toBe('10.20.30.40');
|
||||
});
|
||||
|
||||
it('returns empty string for empty or whitespace-only input', () => {
|
||||
expect(normalizeDefaultChallengeAddress('')).toBe('');
|
||||
expect(normalizeDefaultChallengeAddress(' ')).toBe('');
|
||||
});
|
||||
});
|
||||
|
||||
describe('defaultChallengeAddressMessage', () => {
|
||||
const requiredMsg = 'Default challenge IP is required and cannot contain only whitespace.';
|
||||
const formatMsg = 'Default challenge IP must be a valid IPv4 address or hostname.';
|
||||
|
||||
it('returns the required message for empty or whitespace-only values', () => {
|
||||
expect(defaultChallengeAddressMessage('', null)).toBe(requiredMsg);
|
||||
expect(defaultChallengeAddressMessage(' ', null)).toBe(requiredMsg);
|
||||
});
|
||||
|
||||
it('returns the format message for malformed values', () => {
|
||||
expect(defaultChallengeAddressMessage('10.0.0.', null)).toBe(formatMsg);
|
||||
expect(defaultChallengeAddressMessage('10.0.0', null)).toBe(formatMsg);
|
||||
});
|
||||
|
||||
it('returns null for valid values', () => {
|
||||
expect(defaultChallengeAddressMessage('10.66.77.88', null)).toBeNull();
|
||||
expect(defaultChallengeAddressMessage('challenge.example.com', null)).toBeNull();
|
||||
});
|
||||
|
||||
it('surfaces control-level errors when raw value would otherwise look valid', () => {
|
||||
expect(defaultChallengeAddressMessage('not valid', { defaultChallengeAddressFormat: true })).toBe(formatMsg);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user