add new team tests
This commit is contained in:
@@ -15,7 +15,7 @@ void main() {
|
|||||||
late Team testTeam1;
|
late Team testTeam1;
|
||||||
late Team testTeam2;
|
late Team testTeam2;
|
||||||
late Team testTeam3;
|
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);
|
final fakeClock = Clock(() => fixedDate);
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
@@ -234,5 +234,250 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(fetchedTeam.name, testTeam1.name);
|
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<InvalidDataException>()),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user