feat(app): add diagnostics and update runtime
This commit is contained in:
@@ -56,12 +56,8 @@ describe('validateMealInput', () => {
|
||||
})
|
||||
|
||||
it('реджектит кривое время', () => {
|
||||
expect(
|
||||
validateMealInput({ name: 'X', time: '99:99', days: [] })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateMealInput({ name: 'X', time: 'noon', days: [] })
|
||||
).toBeNull()
|
||||
expect(validateMealInput({ name: 'X', time: '99:99', days: [] })).toBeNull()
|
||||
expect(validateMealInput({ name: 'X', time: 'noon', days: [] })).toBeNull()
|
||||
})
|
||||
|
||||
it('реджектит дни вне диапазона и дедупит', () => {
|
||||
@@ -124,8 +120,12 @@ describe('validateExerciseInput', () => {
|
||||
})
|
||||
|
||||
it('rejects missing required fields', () => {
|
||||
expect(validateExerciseInput({ ...validExercise, name: undefined })).toBeNull()
|
||||
expect(validateExerciseInput({ ...validExercise, reps: undefined })).toBeNull()
|
||||
expect(
|
||||
validateExerciseInput({ ...validExercise, name: undefined })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateExerciseInput({ ...validExercise, reps: undefined })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateExerciseInput({ ...validExercise, intervalMinutes: undefined })
|
||||
).toBeNull()
|
||||
@@ -221,7 +221,9 @@ describe('validateExercisePatch', () => {
|
||||
it('accepts partial patches', () => {
|
||||
expect(validateExercisePatch({ reps: 12 })).toEqual({ reps: 12 })
|
||||
expect(validateExercisePatch({ name: 'New' })).toEqual({ name: 'New' })
|
||||
expect(validateExercisePatch({ enabled: false })).toEqual({ enabled: false })
|
||||
expect(validateExercisePatch({ enabled: false })).toEqual({
|
||||
enabled: false
|
||||
})
|
||||
})
|
||||
|
||||
it('rejects patch with a single invalid field', () => {
|
||||
@@ -273,7 +275,14 @@ describe('validateChallengeInput', () => {
|
||||
})
|
||||
|
||||
it('accepts all valid stats', () => {
|
||||
const stats = ['deaths', 'kills', 'assists', 'last_hits', 'denies', 'duration_min']
|
||||
const stats = [
|
||||
'deaths',
|
||||
'kills',
|
||||
'assists',
|
||||
'last_hits',
|
||||
'denies',
|
||||
'duration_min'
|
||||
]
|
||||
for (const stat of stats) {
|
||||
expect(validateChallengeInput({ ...valid, stat })).not.toBeNull()
|
||||
}
|
||||
@@ -288,11 +297,15 @@ describe('validateChallengeInput', () => {
|
||||
})
|
||||
|
||||
it('accepts zero multiplier (legitimate "disable" semantics)', () => {
|
||||
expect(validateChallengeInput({ ...valid, multiplier: 0 })?.multiplier).toBe(0)
|
||||
expect(
|
||||
validateChallengeInput({ ...valid, multiplier: 0 })?.multiplier
|
||||
).toBe(0)
|
||||
})
|
||||
|
||||
it('accepts fractional multiplier (e.g. 0.5×)', () => {
|
||||
expect(validateChallengeInput({ ...valid, multiplier: 0.5 })?.multiplier).toBe(0.5)
|
||||
expect(
|
||||
validateChallengeInput({ ...valid, multiplier: 0.5 })?.multiplier
|
||||
).toBe(0.5)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -399,7 +412,9 @@ describe('validateSettingsPatch', () => {
|
||||
|
||||
it('rejects non-strings', () => {
|
||||
expect(validateSettingsPatch({ lastSeenVersion: 42 })).toBeNull()
|
||||
expect(validateSettingsPatch({ lastSeenVersion: ['1', '0', '0'] })).toBeNull()
|
||||
expect(
|
||||
validateSettingsPatch({ lastSeenVersion: ['1', '0', '0'] })
|
||||
).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -426,6 +441,12 @@ describe('validateSettingsPatch', () => {
|
||||
expect(
|
||||
validateSettingsPatch({ quietHours: { ...baseQh, from: '2500' } })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateSettingsPatch({ quietHours: { ...baseQh, from: '25:00' } })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateSettingsPatch({ quietHours: { ...baseQh, to: '09:99' } })
|
||||
).toBeNull()
|
||||
expect(
|
||||
validateSettingsPatch({ quietHours: { ...baseQh, to: 'bedtime' } })
|
||||
).toBeNull()
|
||||
@@ -479,7 +500,9 @@ describe('validateSettingsPatch', () => {
|
||||
describe('validateId', () => {
|
||||
it('accepts reasonable id strings', () => {
|
||||
expect(validateId('abc')).toBe('abc')
|
||||
expect(validateId('uuid-v4-style-thing-123')).toBe('uuid-v4-style-thing-123')
|
||||
expect(validateId('uuid-v4-style-thing-123')).toBe(
|
||||
'uuid-v4-style-thing-123'
|
||||
)
|
||||
})
|
||||
|
||||
it('rejects non-strings', () => {
|
||||
|
||||
Reference in New Issue
Block a user