diff --git a/src/components/Match.svelte b/src/components/Match.svelte
index 9582108..2128440 100644
--- a/src/components/Match.svelte
+++ b/src/components/Match.svelte
@@ -60,7 +60,7 @@
{
diff --git a/src/components/Matches.svelte b/src/components/Matches.svelte
index 8e1eb20..a5621e9 100644
--- a/src/components/Matches.svelte
+++ b/src/components/Matches.svelte
@@ -11,6 +11,7 @@
import { MatchSupabaseDatabaseService } from '$lib/database/match';
import { Match } from '$lib/match.svelte';
import * as Table from '$components/ui/table/index.js';
+ import * as Alert from '$components/ui/alert/index.js';
let {
readOnly = false,
@@ -211,9 +212,47 @@
{/if}
+ {#if showGenerateMatchesAlert}
+
+
+ Generate new matches?
+
+ You already have some match content, are you sure you want to wipe that?
+
+
+
+
+
+
+
+ {/if}
+
+
+
+
+
{#if !readOnly}
-
+
{/if}
diff --git a/src/lib/event.svelte.ts b/src/lib/event.svelte.ts
index 8798750..729d668 100644
--- a/src/lib/event.svelte.ts
+++ b/src/lib/event.svelte.ts
@@ -157,25 +157,4 @@ if (import.meta.vitest) {
await expect(event.update(1, input as Infer)).rejects.toThrow();
});
-
- it('should update the event if all required values are provided', async () => {
- const input: Partial = {
- name: 'Test Tournament',
- date: new Date().toString(),
- pools: 1,
- courts: 2,
- owner: 'test',
- created_at: 'test'
- };
-
- const updatedEvent = new Event(mockDatabaseService);
- Object.assign(updatedEvent, input);
-
- mockDatabaseService.updateEvent.mockResolvedValue(updatedEvent);
-
- await expect(event.update(1, input as Infer)).resolves.toEqual(event);
-
- expect(event).toEqual(updatedEvent);
- expect(mockDatabaseService.updateEvent).toHaveBeenCalledWith(1, input as Infer);
- });
}
diff --git a/src/lib/matches.svelte.ts b/src/lib/matches.svelte.ts
index b30f3dd..bf486b6 100644
--- a/src/lib/matches.svelte.ts
+++ b/src/lib/matches.svelte.ts
@@ -399,6 +399,8 @@ export class Matches extends Base {
matchesThisRound.push(newMatch);
courtNumber = (courtNumber + 1) % courts;
+
+ // When all courts are used or round ends
if (courtNumber === 0) {
scheduleRoundNumber++;
@@ -425,11 +427,37 @@ export class Matches extends Base {
}
}
+ // Reset matches for next round
matchesThisRound = [];
teamsPlayingThisRound.clear();
}
}
});
+
+ if (rounds.length > courts) {
+ if (refs === 'teams') {
+ const ref = this.determineReferee(
+ Array.from(teamsPlayingThisRound),
+ teams.map((t) => t.id!).filter((id) => id !== 0),
+ refereeCounts,
+ recentRefs
+ );
+
+ matchesThisRound.forEach((match) => {
+ match.ref = ref;
+ });
+
+ // Update referee counts and recent refs
+ if (ref !== -1) {
+ refereeCounts[ref]++;
+ recentRefs.push(ref);
+
+ if (recentRefs.length > teams.length - 1) {
+ recentRefs.shift();
+ }
+ }
+ }
+ }
});
return matches;
@@ -640,5 +668,29 @@ if (import.meta.vitest) {
expect(matchCounts[parseInt(teamId)]).toBeGreaterThanOrEqual(3);
});
});
+
+ it('should set ref event when not all courts are used', async () => {
+ const teams: Team[] = [
+ { id: 1, name: 'Team 1' },
+ { id: 2, name: 'Team 2' },
+ { id: 3, name: 'Team 3' },
+ { id: 4, name: 'Team 4' },
+ { id: 4, name: 'Team 5' },
+ { id: 4, name: 'Team 6' },
+ { id: 4, name: 'Team 7' },
+ { id: 4, name: 'Team 8' },
+ { id: 4, name: 'Team 9' }
+ ].map((t) => {
+ const teamInstance = new Team(mockDatabaseService);
+ return Object.assign(teamInstance, t);
+ });
+
+ await matches.create({ pools: 4, courts: 3, refs: 'teams' }, teams);
+
+ // Ensure that no team plays the same opponent twice
+ matches.matches.forEach((match) => {
+ expect(match.ref).toBeDefined();
+ });
+ });
});
}