fix(orders): update datetime validation logic and test cases for order creation and completion

- Modified order creation tests to set datetime_start to one hour in the past for past orders.
- Updated the OrdersService to use isNowOrAfter for validating order completion against the start time.
- Enhanced datetime utility function to accept a unit parameter for more flexible comparisons.
This commit is contained in:
vchikalkin 2025-08-11 14:56:45 +03:00
parent 269dabe067
commit b8ebdb8c64
3 changed files with 9 additions and 7 deletions

View File

@ -1282,6 +1282,7 @@ describe('OrdersService', () => {
order: {
...mockOrder,
client: mockCustomer,
datetime_start: now.subtract(1, 'hour').toISOString(), // заказ в прошлом
slot: { ...mockSlot, master: mockMaster },
},
},
@ -1345,6 +1346,7 @@ describe('OrdersService', () => {
order: {
...mockOrder,
client: mockCustomer,
datetime_start: now.subtract(1, 'hour').toISOString(), // заказ в прошлом
slot: { ...mockSlot, master: mockMaster },
},
},
@ -1395,14 +1397,14 @@ describe('OrdersService', () => {
});
it('should throw error when trying to complete order before start time', async () => {
const pastOrder = {
const futureOrder = {
...mockOrder,
datetime_start: now.subtract(1, 'hour').toISOString(),
datetime_start: now.add(1, 'hour').toISOString(),
};
const mockQuery = vi.fn().mockResolvedValue({
data: {
order: pastOrder,
order: futureOrder,
},
});

View File

@ -8,7 +8,7 @@ import { ServicesService } from './services';
import { SlotsService } from './slots';
import { type VariablesOf } from '@graphql-typed-document-node/core';
import { isCustomerMaster } from '@repo/utils/customer';
import { getMinutes, isBeforeNow } from '@repo/utils/datetime-format';
import { getMinutes, isBeforeNow, isNowOrAfter } from '@repo/utils/datetime-format';
import dayjs from 'dayjs';
export const ERRORS = {
@ -381,7 +381,7 @@ export class OrdersService extends BaseService {
if (
state === GQL.Enum_Order_State.Completed &&
existingOrder?.datetime_start &&
isBeforeNow(existingOrder?.datetime_start, 'minute')
isNowOrAfter(existingOrder?.datetime_start, 'minute')
) {
throw new Error(ERRORS.CANNOT_COMPLETE_BEFORE_START);
}

View File

@ -106,8 +106,8 @@ export function isBeforeNow(date: Date | string, unit: OpUnitType = 'day') {
return inputDate.isBefore(now, unit);
}
export function isNowOrAfter(date: Date | string) {
return !isBeforeNow(date);
export function isNowOrAfter(date: Date | string, unit: OpUnitType = 'day') {
return !isBeforeNow(date, unit);
}
export function sumTime(datetime: DateTime, durationMinutes: number) {