From 0b778210efb4732d7b61aad70ed1914930ada943 Mon Sep 17 00:00:00 2001 From: gelbeinhalb Date: Wed, 21 Jan 2026 11:36:23 +0100 Subject: [PATCH] add new team tests --- test/db_tests/team_test.dart | 247 ++++++++++++++++++++++++++++++++++- 1 file changed, 246 insertions(+), 1 deletion(-) diff --git a/test/db_tests/team_test.dart b/test/db_tests/team_test.dart index b0ec349..e3150f5 100644 --- a/test/db_tests/team_test.dart +++ b/test/db_tests/team_test.dart @@ -15,7 +15,7 @@ void main() { late Team testTeam1; late Team testTeam2; late Team testTeam3; - final fixedDate = DateTime(2025, 19, 11, 00, 11, 23); + final fixedDate = DateTime(2025, 11, 19, 00, 11, 23); final fakeClock = Clock(() => fixedDate); setUp(() async { @@ -234,5 +234,250 @@ void main() { ); expect(fetchedTeam.name, testTeam1.name); }); + + // Verifies that getAllTeams returns empty list when no teams exist. + test('Getting all teams when empty returns empty list', () async { + final allTeams = await database.teamDao.getAllTeams(); + expect(allTeams.isEmpty, true); + }); + + // Verifies that getTeamById throws exception for non-existent team. + test('Getting non-existent team throws exception', () async { + expect( + () => database.teamDao.getTeamById(teamId: 'non-existent-id'), + throwsA(isA()), + ); + }); + + // Verifies that updating team name preserves other fields. + test('Updating team name preserves other team fields', () async { + await database.teamDao.addTeam(team: testTeam1); + final originalTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + final originalCreatedAt = originalTeam.createdAt; + + const newName = 'Brand New Team Name'; + await database.teamDao.updateTeamName( + teamId: testTeam1.id, + newName: newName, + ); + + final updatedTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + + expect(updatedTeam.name, newName); + expect(updatedTeam.id, testTeam1.id); + expect(updatedTeam.createdAt, originalCreatedAt); + }); + + // Verifies that team name can be updated to an empty string. + test('Updating team name to empty string works', () async { + await database.teamDao.addTeam(team: testTeam1); + + await database.teamDao.updateTeamName( + teamId: testTeam1.id, + newName: '', + ); + + final updatedTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + + expect(updatedTeam.name, ''); + }); + + // Verifies that team name can be updated to a very long string. + test('Updating team name to long string works', () async { + await database.teamDao.addTeam(team: testTeam1); + final longName = 'A' * 500; // 500 character name + + await database.teamDao.updateTeamName( + teamId: testTeam1.id, + newName: longName, + ); + + final updatedTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + + expect(updatedTeam.name, longName); + expect(updatedTeam.name.length, 500); + }); + + // Verifies that updating non-existent team name doesn't throw error. + test('Updating non-existent team name completes without error', () async { + expect( + () => database.teamDao.updateTeamName( + teamId: 'non-existent-id', + newName: 'New Name', + ), + returnsNormally, + ); + }); + + // Verifies that deleteTeam only affects the specified team. + test('Deleting one team does not affect other teams', () async { + await database.teamDao.addTeamsAsList( + teams: [testTeam1, testTeam2, testTeam3], + ); + + await database.teamDao.deleteTeam(teamId: testTeam2.id); + + final allTeams = await database.teamDao.getAllTeams(); + expect(allTeams.length, 2); + expect(allTeams.any((t) => t.id == testTeam1.id), true); + expect(allTeams.any((t) => t.id == testTeam2.id), false); + expect(allTeams.any((t) => t.id == testTeam3.id), true); + }); + + // Verifies that teams with overlapping members are independent. + test('Teams with overlapping members are independent', () async { + // testTeam1 has [player1, player2] + // testTeam3 has [player1, player3] + await database.teamDao.addTeamsAsList( + teams: [testTeam1, testTeam3], + ); + + final team1 = await database.teamDao.getTeamById(teamId: testTeam1.id); + final team3 = await database.teamDao.getTeamById(teamId: testTeam3.id); + + expect(team1.members.length, 2); + expect(team3.members.length, 2); + expect(team1.members.any((p) => p.id == testPlayer1.id), true); + expect(team3.members.any((p) => p.id == testPlayer1.id), true); + }); + + // Verifies that adding teams sequentially works correctly. + test('Adding teams sequentially maintains correct count', () async { + var count = await database.teamDao.getTeamCount(); + expect(count, 0); + + await database.teamDao.addTeam(team: testTeam1); + count = await database.teamDao.getTeamCount(); + expect(count, 1); + + await database.teamDao.addTeam(team: testTeam2); + count = await database.teamDao.getTeamCount(); + expect(count, 2); + + await database.teamDao.addTeam(team: testTeam3); + count = await database.teamDao.getTeamCount(); + expect(count, 3); + }); + + // Verifies that getAllTeams returns all teams with correct data. + test('Getting all teams returns all teams with correct data', () async { + await database.teamDao.addTeamsAsList( + teams: [testTeam1, testTeam2, testTeam3], + ); + + final allTeams = await database.teamDao.getAllTeams(); + + expect(allTeams.length, 3); + expect( + allTeams.map((t) => t.id).toSet(), + {testTeam1.id, testTeam2.id, testTeam3.id}, + ); + }); + + // Verifies that teamExists returns false for deleted teams. + test('Team existence returns false after deletion', () async { + await database.teamDao.addTeam(team: testTeam1); + expect(await database.teamDao.teamExists(teamId: testTeam1.id), true); + + await database.teamDao.deleteTeam(teamId: testTeam1.id); + expect(await database.teamDao.teamExists(teamId: testTeam1.id), false); + }); + + // Verifies that adding multiple teams in batch then deleting returns correct count. + test('Batch add then partial delete maintains correct count', () async { + await database.teamDao.addTeamsAsList( + teams: [testTeam1, testTeam2, testTeam3], + ); + + expect(await database.teamDao.getTeamCount(), 3); + + await database.teamDao.deleteTeam(teamId: testTeam1.id); + expect(await database.teamDao.getTeamCount(), 2); + + await database.teamDao.deleteTeam(teamId: testTeam3.id); + expect(await database.teamDao.getTeamCount(), 1); + }); + + // Verifies that deleteAllTeams with single team works. + test('Deleting all teams with single team returns true', () async { + await database.teamDao.addTeam(team: testTeam1); + expect(await database.teamDao.getTeamCount(), 1); + + final deleted = await database.teamDao.deleteAllTeams(); + expect(deleted, true); + expect(await database.teamDao.getTeamCount(), 0); + }); + + // Verifies that addTeam after deleteAllTeams works correctly. + test('Adding team after deleteAllTeams works correctly', () async { + await database.teamDao.addTeamsAsList( + teams: [testTeam1, testTeam2], + ); + expect(await database.teamDao.getTeamCount(), 2); + + await database.teamDao.deleteAllTeams(); + expect(await database.teamDao.getTeamCount(), 0); + + final added = await database.teamDao.addTeam(team: testTeam3); + expect(added, true); + expect(await database.teamDao.getTeamCount(), 1); + + final fetchedTeam = await database.teamDao.getTeamById( + teamId: testTeam3.id, + ); + expect(fetchedTeam.name, testTeam3.name); + }); + + // Verifies that addTeamsAsList with partial duplicates ignores duplicates. + test('Adding teams with some duplicates ignores only duplicates', () async { + await database.teamDao.addTeam(team: testTeam1); + + final duplicateTeam1 = Team( + id: testTeam1.id, + name: 'Different Name', + members: [testPlayer3], + ); + + await database.teamDao.addTeamsAsList( + teams: [duplicateTeam1, testTeam2, testTeam3], + ); + + final allTeams = await database.teamDao.getAllTeams(); + expect(allTeams.length, 3); + + // Verify testTeam1 retained original name (was inserted first) + final team1 = await database.teamDao.getTeamById(teamId: testTeam1.id); + expect(team1.name, testTeam1.name); + }); + + // Verifies that team IDs are preserved correctly. + test('Team IDs are preserved through add and retrieve', () async { + await database.teamDao.addTeam(team: testTeam1); + + final fetchedTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + + expect(fetchedTeam.id, testTeam1.id); + }); + + // Verifies that createdAt timestamps are preserved. + test('Team createdAt timestamps are preserved', () async { + await database.teamDao.addTeam(team: testTeam1); + + final fetchedTeam = await database.teamDao.getTeamById( + teamId: testTeam1.id, + ); + + expect(fetchedTeam.createdAt, testTeam1.createdAt); + }); }); } \ No newline at end of file