fix(slots): update error messages for missing datetime fields and improve validation logic in slot updates
This commit is contained in:
parent
6d86c0d2db
commit
3941377e78
@ -247,7 +247,7 @@ describe('SlotsService', () => {
|
||||
|
||||
const result = slotsService.updateSlot(variablesWithMissingStart);
|
||||
|
||||
await expect(result).rejects.toThrow(ERRORS.INVALID_TIME);
|
||||
await expect(result).rejects.toThrow(ERRORS.MISSING_DATETIME_START);
|
||||
});
|
||||
|
||||
it('should throw error when datetime_end is missing', async () => {
|
||||
@ -284,7 +284,7 @@ describe('SlotsService', () => {
|
||||
|
||||
const result = slotsService.updateSlot(variablesWithMissingEnd);
|
||||
|
||||
await expect(result).rejects.toThrow(ERRORS.INVALID_TIME);
|
||||
await expect(result).rejects.toThrow(ERRORS.MISSING_DATETIME_END);
|
||||
});
|
||||
|
||||
it('should throw error when datetime_end is before datetime_start', async () => {
|
||||
@ -606,76 +606,6 @@ describe('SlotsService', () => {
|
||||
|
||||
await expect(result).resolves.toBe(mockMutationResult.data);
|
||||
});
|
||||
|
||||
it('should use existing slot times when only datetime_start is provided', async () => {
|
||||
const variablesWithOnlyStart = {
|
||||
data: {
|
||||
datetime_start: '2024-01-01T09:00:00Z',
|
||||
},
|
||||
documentId: 'slot-123',
|
||||
};
|
||||
|
||||
const mockMutate = vi.fn().mockResolvedValue(mockMutationResult);
|
||||
const mockQuery = vi.fn().mockImplementation(({ query }) => {
|
||||
if (query === GQL.GetCustomerDocument) {
|
||||
return Promise.resolve(mockGetCustomerResult);
|
||||
}
|
||||
|
||||
if (query === GQL.GetSlotDocument) {
|
||||
return Promise.resolve(mockGetSlotResult);
|
||||
}
|
||||
|
||||
if (query === GQL.GetSlotsDocument) {
|
||||
return Promise.resolve({ data: { slots: [] } });
|
||||
}
|
||||
|
||||
return Promise.resolve({ data: {} });
|
||||
});
|
||||
|
||||
mockGetClientWithToken.mockResolvedValue({
|
||||
mutate: mockMutate,
|
||||
query: mockQuery,
|
||||
});
|
||||
|
||||
const result = slotsService.updateSlot(variablesWithOnlyStart);
|
||||
|
||||
await expect(result).resolves.toBe(mockMutationResult.data);
|
||||
});
|
||||
|
||||
it('should use existing slot times when only datetime_end is provided', async () => {
|
||||
const variablesWithOnlyEnd = {
|
||||
data: {
|
||||
datetime_end: '2024-01-01T12:00:00Z',
|
||||
},
|
||||
documentId: 'slot-123',
|
||||
};
|
||||
|
||||
const mockMutate = vi.fn().mockResolvedValue(mockMutationResult);
|
||||
const mockQuery = vi.fn().mockImplementation(({ query }) => {
|
||||
if (query === GQL.GetCustomerDocument) {
|
||||
return Promise.resolve(mockGetCustomerResult);
|
||||
}
|
||||
|
||||
if (query === GQL.GetSlotDocument) {
|
||||
return Promise.resolve(mockGetSlotResult);
|
||||
}
|
||||
|
||||
if (query === GQL.GetSlotsDocument) {
|
||||
return Promise.resolve({ data: { slots: [] } });
|
||||
}
|
||||
|
||||
return Promise.resolve({ data: {} });
|
||||
});
|
||||
|
||||
mockGetClientWithToken.mockResolvedValue({
|
||||
mutate: mockMutate,
|
||||
query: mockQuery,
|
||||
});
|
||||
|
||||
const result = slotsService.updateSlot(variablesWithOnlyEnd);
|
||||
|
||||
await expect(result).resolves.toBe(mockMutationResult.data);
|
||||
});
|
||||
});
|
||||
|
||||
describe('deleteSlot', () => {
|
||||
|
||||
@ -11,7 +11,8 @@ import dayjs from 'dayjs';
|
||||
export const ERRORS = {
|
||||
HAS_ORDERS: 'Слот имеет активные заказы',
|
||||
INVALID_TIME: 'Некорректное время',
|
||||
MISSING_DATE: 'Не указана дата',
|
||||
MISSING_DATETIME_END: 'Не указана дата окончания',
|
||||
MISSING_DATETIME_START: 'Не указана дата начала',
|
||||
MISSING_SERVICE_ID: 'Не указана услуга',
|
||||
NO_PERMISSION: 'Нет доступа',
|
||||
OVERLAPPING_TIME: 'Время пересекается с другими слотами',
|
||||
@ -75,7 +76,7 @@ export class SlotsService extends BaseService {
|
||||
variables: VariablesOf<typeof GQL.GetSlotsDocument>,
|
||||
context: { service: GQL.ServiceFiltersInput },
|
||||
) {
|
||||
if (!variables.filters?.datetime_start) throw new Error(ERRORS.MISSING_DATE);
|
||||
if (!variables.filters?.datetime_start) throw new Error(ERRORS.MISSING_DATETIME_START);
|
||||
if (!context?.service?.documentId?.eq) throw new Error(ERRORS.MISSING_SERVICE_ID);
|
||||
|
||||
const { query } = await getClientWithToken();
|
||||
@ -181,20 +182,15 @@ export class SlotsService extends BaseService {
|
||||
|
||||
if (!slot) throw new Error(ERRORS.SLOT_NOT_FOUND);
|
||||
|
||||
const isTimeChanging = variables?.data?.datetime_start || variables?.data?.datetime_end;
|
||||
const datetime_start = variables.data.datetime_start;
|
||||
const datetime_end = variables.data.datetime_end;
|
||||
|
||||
const isTimeChanging = datetime_start || datetime_end;
|
||||
|
||||
if (!isTimeChanging) return;
|
||||
|
||||
let datetime_start = variables.data.datetime_start;
|
||||
let datetime_end = variables.data.datetime_end;
|
||||
|
||||
if (!datetime_start) datetime_start = slot?.datetime_start;
|
||||
if (!datetime_end) datetime_end = slot?.datetime_end;
|
||||
|
||||
// Проверка: оба времени должны быть определены
|
||||
if (!datetime_start || !datetime_end) {
|
||||
throw new Error(ERRORS.INVALID_TIME);
|
||||
}
|
||||
if (!datetime_start) throw new Error(ERRORS.MISSING_DATETIME_START);
|
||||
if (!datetime_end) throw new Error(ERRORS.MISSING_DATETIME_END);
|
||||
|
||||
// Проверка валидности времени
|
||||
if (new Date(datetime_end) <= new Date(datetime_start)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user