mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 13:54:02 +00:00
feat(miniapp): improve billing settings controls
This commit is contained in:
@@ -355,6 +355,25 @@ describe('createMiniAppAdminService', () => {
|
||||
})
|
||||
})
|
||||
|
||||
test('rejects invalid timezones when updating billing settings', async () => {
|
||||
const service = createMiniAppAdminService(repository())
|
||||
|
||||
const result = await service.updateSettings({
|
||||
householdId: 'household-1',
|
||||
actorIsAdmin: true,
|
||||
rentDueDay: 21,
|
||||
rentWarningDay: 18,
|
||||
utilitiesDueDay: 5,
|
||||
utilitiesReminderDay: 4,
|
||||
timezone: 'Moon/Base'
|
||||
})
|
||||
|
||||
expect(result).toEqual({
|
||||
status: 'rejected',
|
||||
reason: 'invalid_settings'
|
||||
})
|
||||
})
|
||||
|
||||
test('stores an away absence policy from the current local period', async () => {
|
||||
const service = createMiniAppAdminService(repository())
|
||||
|
||||
|
||||
@@ -231,6 +231,22 @@ function normalizeHouseholdName(raw: string | undefined): string | null | undefi
|
||||
return trimmed.replace(/\s+/g, ' ')
|
||||
}
|
||||
|
||||
function normalizeTimezone(raw: string): string | null {
|
||||
const trimmed = raw.trim()
|
||||
|
||||
if (trimmed.length === 0) {
|
||||
return null
|
||||
}
|
||||
|
||||
try {
|
||||
return new Intl.DateTimeFormat('en-US', {
|
||||
timeZone: trimmed
|
||||
}).resolvedOptions().timeZone
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function defaultAssistantConfig(householdId: string): HouseholdAssistantConfigRecord {
|
||||
return {
|
||||
householdId,
|
||||
@@ -308,12 +324,14 @@ export function createMiniAppAdminService(
|
||||
}
|
||||
}
|
||||
|
||||
const timezone = normalizeTimezone(input.timezone)
|
||||
|
||||
if (
|
||||
!isValidDay(input.rentDueDay) ||
|
||||
!isValidDay(input.rentWarningDay) ||
|
||||
!isValidDay(input.utilitiesDueDay) ||
|
||||
!isValidDay(input.utilitiesReminderDay) ||
|
||||
input.timezone.trim().length === 0 ||
|
||||
timezone === null ||
|
||||
input.rentWarningDay > input.rentDueDay ||
|
||||
input.utilitiesReminderDay > input.utilitiesDueDay
|
||||
) {
|
||||
@@ -401,7 +419,7 @@ export function createMiniAppAdminService(
|
||||
rentWarningDay: input.rentWarningDay,
|
||||
utilitiesDueDay: input.utilitiesDueDay,
|
||||
utilitiesReminderDay: input.utilitiesReminderDay,
|
||||
timezone: input.timezone.trim()
|
||||
timezone
|
||||
}),
|
||||
repository.updateHouseholdAssistantConfig && shouldUpdateAssistantConfig
|
||||
? repository.updateHouseholdAssistantConfig({
|
||||
|
||||
Reference in New Issue
Block a user