Merge pull request 'Fehler bei Match-Erstellung' (#104) from bug/102-fehler-bei-match-erstellung into development
Reviewed-on: #104 Reviewed-by: Mathis Kirchner <mathis.kirchner.mk@gmail.com>
This commit was merged in pull request #104.
This commit is contained in:
@@ -21,7 +21,7 @@ class GroupMatchDao extends DatabaseAccessor<AppDatabase>
|
||||
}
|
||||
await into(groupMatchTable).insert(
|
||||
GroupMatchTableCompanion.insert(groupId: groupId, matchId: matchId),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
mode: InsertMode.insertOrIgnore,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,8 +65,9 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
);
|
||||
}
|
||||
|
||||
/// Adds a new [Match] to the database.
|
||||
/// Also adds associated players and group if they exist.
|
||||
/// Adds a new [Match] to the database. Also adds players and group
|
||||
/// associations. This method assumes that the players and groups added to
|
||||
/// this match are already present in the database.
|
||||
Future<void> addMatch({required Match match}) async {
|
||||
await db.transaction(() async {
|
||||
await into(matchTable).insert(
|
||||
@@ -80,7 +81,6 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
);
|
||||
|
||||
if (match.players != null) {
|
||||
await db.playerDao.addPlayersAsList(players: match.players!);
|
||||
for (final p in match.players ?? []) {
|
||||
await db.playerMatchDao.addPlayerToMatch(
|
||||
matchId: match.id,
|
||||
@@ -90,7 +90,6 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
}
|
||||
|
||||
if (match.group != null) {
|
||||
await db.groupDao.addGroup(group: match.group!);
|
||||
await db.groupMatchDao.addGroupToMatch(
|
||||
matchId: match.id,
|
||||
groupId: match.group!.id,
|
||||
@@ -102,6 +101,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
/// Adds multiple [Match]s to the database in a batch operation.
|
||||
/// Also adds associated players and groups if they exist.
|
||||
/// If the [matches] list is empty, the method returns immediately.
|
||||
/// This Method should only be used to import matches from a different device.
|
||||
Future<void> addMatchAsList({required List<Match> matches}) async {
|
||||
if (matches.isEmpty) return;
|
||||
await db.transaction(() async {
|
||||
@@ -186,7 +186,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
matchId: match.id,
|
||||
playerId: p.id,
|
||||
),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
mode: InsertMode.insertOrIgnore,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -204,7 +204,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
playerId: m.id,
|
||||
groupId: match.group!.id,
|
||||
),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
mode: InsertMode.insertOrIgnore,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ class MatchDao extends DatabaseAccessor<AppDatabase> with _$MatchDaoMixin {
|
||||
matchId: match.id,
|
||||
groupId: match.group!.id,
|
||||
),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
mode: InsertMode.insertOrIgnore,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
|
||||
}) async {
|
||||
await into(playerMatchTable).insert(
|
||||
PlayerMatchTableCompanion.insert(playerId: playerId, matchId: matchId),
|
||||
mode: InsertMode.insertOrReplace,
|
||||
mode: InsertMode.insertOrIgnore,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ class PlayerMatchDao extends DatabaseAccessor<AppDatabase>
|
||||
inserts.map(
|
||||
(c) => into(
|
||||
playerMatchTable,
|
||||
).insert(c, mode: InsertMode.insertOrReplace),
|
||||
).insert(c, mode: InsertMode.insertOrIgnore),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ void main() {
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
setUp(() async {
|
||||
database = AppDatabase(
|
||||
DatabaseConnection(
|
||||
NativeDatabase.memory(),
|
||||
@@ -68,6 +68,16 @@ void main() {
|
||||
group: testGroup2,
|
||||
);
|
||||
});
|
||||
await database.playerDao.addPlayersAsList(
|
||||
players: [
|
||||
testPlayer1,
|
||||
testPlayer2,
|
||||
testPlayer3,
|
||||
testPlayer4,
|
||||
testPlayer5,
|
||||
],
|
||||
);
|
||||
await database.groupDao.addGroupsAsList(groups: [testGroup1, testGroup2]);
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
@@ -253,7 +263,7 @@ void main() {
|
||||
expect(matchCount, 0);
|
||||
});
|
||||
|
||||
test('Checking if match has winner works correclty', () async {
|
||||
test('Checking if match has winner works correctly', () async {
|
||||
await database.matchDao.addMatch(match: testMatch1);
|
||||
await database.matchDao.addMatch(match: testMatchOnlyGroup);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/drift.dart' hide isNotNull;
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:game_tracker/data/db/database.dart';
|
||||
@@ -21,7 +21,7 @@ void main() {
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
setUp(() async {
|
||||
database = AppDatabase(
|
||||
DatabaseConnection(
|
||||
NativeDatabase.memory(),
|
||||
@@ -53,6 +53,16 @@ void main() {
|
||||
group: testGroup1,
|
||||
);
|
||||
});
|
||||
await database.playerDao.addPlayersAsList(
|
||||
players: [
|
||||
testPlayer1,
|
||||
testPlayer2,
|
||||
testPlayer3,
|
||||
testPlayer4,
|
||||
testPlayer5,
|
||||
],
|
||||
);
|
||||
await database.groupDao.addGroupsAsList(groups: [testGroup1, testGroup2]);
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
@@ -179,5 +189,33 @@ void main() {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
test('Adding the same group to seperate matches works correctly', () async {
|
||||
final match1 = Match(name: 'Match 1', group: testGroup1);
|
||||
final match2 = Match(name: 'Match 2', group: testGroup1);
|
||||
|
||||
await Future.wait([
|
||||
database.matchDao.addMatch(match: match1),
|
||||
database.matchDao.addMatch(match: match2),
|
||||
]);
|
||||
|
||||
final group1 = await database.groupMatchDao.getGroupOfMatch(
|
||||
matchId: match1.id,
|
||||
);
|
||||
final group2 = await database.groupMatchDao.getGroupOfMatch(
|
||||
matchId: match2.id,
|
||||
);
|
||||
|
||||
expect(group1, isNotNull);
|
||||
expect(group2, isNotNull);
|
||||
|
||||
final groups = [group1!, group2!];
|
||||
for (final group in groups) {
|
||||
expect(group.members.length, testGroup1.members.length);
|
||||
expect(group.id, testGroup1.id);
|
||||
expect(group.name, testGroup1.name);
|
||||
expect(group.createdAt, testGroup1.createdAt);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/drift.dart' hide isNotNull;
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:game_tracker/data/db/database.dart';
|
||||
@@ -21,7 +21,7 @@ void main() {
|
||||
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||
final fakeClock = Clock(() => fixedDate);
|
||||
|
||||
setUp(() {
|
||||
setUp(() async {
|
||||
database = AppDatabase(
|
||||
DatabaseConnection(
|
||||
NativeDatabase.memory(),
|
||||
@@ -50,6 +50,17 @@ void main() {
|
||||
players: [testPlayer4, testPlayer5, testPlayer6],
|
||||
);
|
||||
});
|
||||
await database.playerDao.addPlayersAsList(
|
||||
players: [
|
||||
testPlayer1,
|
||||
testPlayer2,
|
||||
testPlayer3,
|
||||
testPlayer4,
|
||||
testPlayer5,
|
||||
testPlayer6,
|
||||
],
|
||||
);
|
||||
await database.groupDao.addGroup(group: testgroup);
|
||||
});
|
||||
tearDown(() async {
|
||||
await database.close();
|
||||
@@ -185,5 +196,42 @@ void main() {
|
||||
expect(player.createdAt, testPlayer.createdAt);
|
||||
}
|
||||
});
|
||||
|
||||
test(
|
||||
'Adding the same player to seperate matches works correctly',
|
||||
() async {
|
||||
final playersList = [testPlayer1, testPlayer2, testPlayer3];
|
||||
final match1 = Match(name: 'Match 1', players: playersList);
|
||||
final match2 = Match(name: 'Match 2', players: playersList);
|
||||
|
||||
await Future.wait([
|
||||
database.matchDao.addMatch(match: match1),
|
||||
database.matchDao.addMatch(match: match2),
|
||||
]);
|
||||
|
||||
final players1 = await database.playerMatchDao.getPlayersOfMatch(
|
||||
matchId: match1.id,
|
||||
);
|
||||
final players2 = await database.playerMatchDao.getPlayersOfMatch(
|
||||
matchId: match2.id,
|
||||
);
|
||||
|
||||
expect(players1, isNotNull);
|
||||
expect(players2, isNotNull);
|
||||
|
||||
expect(
|
||||
players1!.map((p) => p.id).toList(),
|
||||
equals(players2!.map((p) => p.id).toList()),
|
||||
);
|
||||
expect(
|
||||
players1.map((p) => p.name).toList(),
|
||||
equals(players2.map((p) => p.name).toList()),
|
||||
);
|
||||
expect(
|
||||
players1.map((p) => p.createdAt).toList(),
|
||||
equals(players2.map((p) => p.createdAt).toList()),
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user