fix: support partial updates in tournament PUT endpoint

- Change PUT endpoint to only include fields present in the request
- Add support for team configuration fields (teamDurability, partnerRotation, allowByes)
- Fix contradictory test that expected resetting allowTies when not provided
- When a field is not in the request, it is preserved (not modified)

Fixes issue where Save Configuration button would fail with
'Tournament name is required' error.
This commit is contained in:
2026-04-03 19:56:58 -07:00
parent 7d33947619
commit ade3b82e3c
2 changed files with 37 additions and 30 deletions
+11 -12
View File
@@ -101,12 +101,12 @@ describe('Tournament Update API', () => {
);
});
it('should default allowTies to false when not provided', async () => {
it('should NOT modify allowTies when not provided in request', async () => {
// Mock existing tournament
eventFindUniqueMock.mockImplementation(async () => ({
id: 1,
name: 'Test Tournament',
allowTies: true,
allowTies: true, // This is the current value
targetScore: 5,
eventType: 'tournament',
format: 'round_robin',
@@ -119,11 +119,11 @@ describe('Tournament Update API', () => {
updatedAt: new Date(),
} as any));
// Mock successful update
// Mock successful update (allowTies should remain unchanged)
eventUpdateMock.mockImplementation(async () => ({
id: 1,
name: 'Test Tournament',
allowTies: false,
allowTies: true, // Should remain true, not reset to false
targetScore: 5,
eventType: 'tournament',
format: 'round_robin',
@@ -141,7 +141,7 @@ describe('Tournament Update API', () => {
body: JSON.stringify({
name: 'Test Tournament',
targetScore: 5,
// allowTies not provided
// allowTies not provided - should NOT be modified
}),
});
@@ -149,13 +149,12 @@ describe('Tournament Update API', () => {
const response = await PUT(request, { params });
expect(response.status).toBe(200);
expect(prisma.event.update).toHaveBeenCalledWith(
expect.objectContaining({
data: expect.objectContaining({
allowTies: false, // Should default to false
}),
})
);
// When allowTies is not provided, it should NOT be in the update data
// (it will keep its existing value in the database)
const updateCall = eventUpdateMock.mock.calls[0][0];
expect(updateCall.data.allowTies).toBeUndefined();
expect(updateCall.data.name).toBe('Test Tournament');
expect(updateCall.data.targetScore).toBe(5);
});
it('should preserve allowTies value when updating other fields', async () => {