From 6c50eaefc7fdd4a152cf4a6aa5194bd503ef1d40 Mon Sep 17 00:00:00 2001 From: Mathis Kirchner Date: Mon, 9 Mar 2026 15:27:15 +0100 Subject: [PATCH] Add deleteMatchGroup method & tests --- lib/data/dao/match_dao.dart | 11 ++++++ test/db_tests/aggregates/match_test.dart | 47 ++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/lib/data/dao/match_dao.dart b/lib/data/dao/match_dao.dart index cc30b03..a822634 100644 --- a/lib/data/dao/match_dao.dart +++ b/lib/data/dao/match_dao.dart @@ -338,6 +338,17 @@ class MatchDao extends DatabaseAccessor with _$MatchDaoMixin { return rowsAffected > 0; } + /// Entfernt die Gruppen-Verknüpfung des Matches mit der gegebenen [matchId]. + /// Setzt die groupId auf null. + /// Gibt `true` zurück, wenn mehr als 0 Zeilen betroffen waren, ansonsten `false`. + Future deleteMatchGroup({required String matchId}) async { + final query = update(matchTable)..where((g) => g.id.equals(matchId)); + final rowsAffected = await query.write( + const MatchTableCompanion(groupId: Value(null)), + ); + return rowsAffected > 0; + } + /// Updates the createdAt timestamp of the match with the given [matchId]. /// Returns `true` if more than 0 rows were affected, otherwise `false`. Future updateMatchCreatedAt({ diff --git a/test/db_tests/aggregates/match_test.dart b/test/db_tests/aggregates/match_test.dart index ea80369..757987a 100644 --- a/test/db_tests/aggregates/match_test.dart +++ b/test/db_tests/aggregates/match_test.dart @@ -307,5 +307,52 @@ void main() { expect(fetchedMatch.winner, isNotNull); expect(fetchedMatch.winner!.id, testPlayer5.id); }); + + // Tests for removeMatchGroup + test( + 'removeMatchGroup removes group from match with existing group', + () async { + await database.matchDao.addMatch(match: testMatch1); + + final removed = await database.matchDao.deleteMatchGroup( + matchId: testMatch1.id, + ); + expect(removed, isTrue); + + final updatedMatch = await database.matchDao.getMatchById( + matchId: testMatch1.id, + ); + expect(updatedMatch.group, null); + // Andere Felder bleiben unverändert + expect(updatedMatch.game.id, testMatch1.game.id); + expect(updatedMatch.name, testMatch1.name); + expect(updatedMatch.notes, testMatch1.notes); + }, + ); + + test( + 'removeMatchGroup on match that already has no group still succeeds', + () async { + await database.matchDao.addMatch(match: testMatchOnlyPlayers); + + final removed = await database.matchDao.deleteMatchGroup( + matchId: testMatchOnlyPlayers.id, + ); + // Update sollte trotzdem eine Zeile betreffen + expect(removed, isTrue); + + final updatedMatch = await database.matchDao.getMatchById( + matchId: testMatchOnlyPlayers.id, + ); + expect(updatedMatch.group, null); + }, + ); + + test('removeMatchGroup on non-existing match returns false', () async { + final removed = await database.matchDao.deleteMatchGroup( + matchId: 'non-existing-id', + ); + expect(removed, isFalse); + }); }); }