Timestamp zu allen Objekten hinzufügen #36
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:clock/clock.dart';
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:drift/native.dart';
|
import 'package:drift/native.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
@@ -15,6 +16,8 @@ void main() {
|
|||||||
late Player player5;
|
late Player player5;
|
||||||
late Group testgroup;
|
late Group testgroup;
|
||||||
late Game testgame;
|
late Game testgame;
|
||||||
|
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||||
|
final fakeClock = Clock(() => fixedDate);
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
database = AppDatabase(
|
database = AppDatabase(
|
||||||
@@ -25,17 +28,22 @@ void main() {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
player1 = Player(name: 'Alice');
|
withClock(fakeClock, () {
|
||||||
player2 = Player(name: 'Bob');
|
player1 = Player(name: 'Alice');
|
||||||
player3 = Player(name: 'Charlie');
|
player2 = Player(name: 'Bob');
|
||||||
player4 = Player(name: 'Diana');
|
player3 = Player(name: 'Charlie');
|
||||||
player5 = Player(name: 'Eve');
|
player4 = Player(name: 'Diana');
|
||||||
testgroup = Group(name: 'Test Group', members: [player1, player2, player3]);
|
player5 = Player(name: 'Eve');
|
||||||
testgame = Game(
|
testgroup = Group(
|
||||||
name: 'Test Game',
|
name: 'Test Group',
|
||||||
group: testgroup,
|
members: [player1, player2, player3],
|
||||||
players: [player4, player5],
|
);
|
||||||
);
|
testgame = Game(
|
||||||
|
name: 'Test Game',
|
||||||
|
group: testgroup,
|
||||||
|
players: [player4, player5],
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
tearDown(() async {
|
tearDown(() async {
|
||||||
await database.close();
|
await database.close();
|
||||||
@@ -43,34 +51,41 @@ void main() {
|
|||||||
|
|
||||||
group('game tests', () {
|
group('game tests', () {
|
||||||
test('game is added correctly', () async {
|
test('game is added correctly', () async {
|
||||||
await database.gameDao.addGame(game: testgame);
|
await withClock(fakeClock, () async {
|
||||||
|
await database.gameDao.addGame(game: testgame);
|
||||||
|
|
||||||
final result = await database.gameDao.getGameById(gameId: testgame.id);
|
final result = await database.gameDao.getGameById(gameId: testgame.id);
|
||||||
|
|
||||||
expect(result.id, testgame.id);
|
expect(result.id, testgame.id);
|
||||||
expect(result.name, testgame.name);
|
expect(result.name, testgame.name);
|
||||||
expect(result.winner, testgame.winner);
|
expect(result.winner, testgame.winner);
|
||||||
|
expect(result.createdAt, testgame.createdAt);
|
||||||
|
|
||||||
if (result.group != null) {
|
if (result.group != null) {
|
||||||
expect(result.group!.members.length, testgroup.members.length);
|
expect(result.group!.members.length, testgroup.members.length);
|
||||||
|
|
||||||
for (int i = 0; i < testgroup.members.length; i++) {
|
for (int i = 0; i < testgroup.members.length; i++) {
|
||||||
expect(result.group!.members[i].id, testgroup.members[i].id);
|
expect(result.group!.members[i].id, testgroup.members[i].id);
|
||||||
expect(result.group!.members[i].name, testgroup.members[i].name);
|
expect(result.group!.members[i].name, testgroup.members[i].name);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fail('Group is null');
|
||||||
}
|
}
|
||||||
} else {
|
if (result.players != null) {
|
||||||
fail('Group is null');
|
expect(result.players!.length, testgame.players!.length);
|
||||||
}
|
|
||||||
if (result.players != null) {
|
|
||||||
expect(result.players!.length, testgame.players!.length);
|
|
||||||
|
|
||||||
for (int i = 0; i < testgame.players!.length; i++) {
|
for (int i = 0; i < testgame.players!.length; i++) {
|
||||||
expect(result.players![i].id, testgame.players![i].id);
|
expect(result.players![i].id, testgame.players![i].id);
|
||||||
expect(result.players![i].name, testgame.players![i].name);
|
expect(result.players![i].name, testgame.players![i].name);
|
||||||
|
expect(
|
||||||
|
result.players![i].createdAt,
|
||||||
|
testgame.players![i].createdAt,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fail('Players is null');
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
fail('Players is null');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('game is deleted correctly', () async {
|
test('game is deleted correctly', () async {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:clock/clock.dart';
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:drift/native.dart';
|
import 'package:drift/native.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
@@ -12,6 +13,8 @@ void main() {
|
|||||||
late Player player3;
|
late Player player3;
|
||||||
late Player player4;
|
late Player player4;
|
||||||
late Group testgroup;
|
late Group testgroup;
|
||||||
|
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||||
|
final fakeClock = Clock(() => fixedDate);
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
database = AppDatabase(
|
database = AppDatabase(
|
||||||
@@ -22,54 +25,69 @@ void main() {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
player1 = Player(name: 'Alice');
|
withClock(fakeClock, () {
|
||||||
player2 = Player(name: 'Bob');
|
player1 = Player(name: 'Alice');
|
||||||
player3 = Player(name: 'Charlie');
|
player2 = Player(name: 'Bob');
|
||||||
player4 = Player(name: 'Diana');
|
player3 = Player(name: 'Charlie');
|
||||||
testgroup = Group(name: 'Test Group', members: [player1, player2, player3]);
|
player4 = Player(name: 'Diana');
|
||||||
|
testgroup = Group(
|
||||||
|
name: 'Test Group',
|
||||||
|
members: [player1, player2, player3],
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
tearDown(() async {
|
tearDown(() async {
|
||||||
await database.close();
|
await database.close();
|
||||||
});
|
});
|
||||||
group('group tests', () {
|
group('group tests', () {
|
||||||
test('all groups get fetched correctly', () async {
|
test('all groups get fetched correctly', () async {
|
||||||
final testgroup2 = Group(
|
await withClock(fakeClock, () async {
|
||||||
id: 'gr2',
|
final testgroup2 = Group(
|
||||||
name: 'Second Group',
|
id: 'gr2',
|
||||||
members: [player2, player3, player4],
|
name: 'Second Group',
|
||||||
);
|
members: [player2, player3, player4],
|
||||||
await database.groupDao.addGroup(group: testgroup);
|
);
|
||||||
await database.groupDao.addGroup(group: testgroup2);
|
await database.groupDao.addGroup(group: testgroup);
|
||||||
|
await database.groupDao.addGroup(group: testgroup2);
|
||||||
|
|
||||||
final allGroups = await database.groupDao.getAllGroups();
|
final allGroups = await database.groupDao.getAllGroups();
|
||||||
expect(allGroups.length, 2);
|
expect(allGroups.length, 2);
|
||||||
|
|
||||||
final fetchedGroup1 = allGroups.firstWhere((g) => g.id == testgroup.id);
|
final fetchedGroup1 = allGroups.firstWhere((g) => g.id == testgroup.id);
|
||||||
expect(fetchedGroup1.name, testgroup.name);
|
expect(fetchedGroup1.name, testgroup.name);
|
||||||
expect(fetchedGroup1.members.length, testgroup.members.length);
|
expect(fetchedGroup1.members.length, testgroup.members.length);
|
||||||
expect(fetchedGroup1.members.elementAt(0).id, player1.id);
|
expect(fetchedGroup1.members.elementAt(0).id, player1.id);
|
||||||
|
expect(fetchedGroup1.members.elementAt(0).createdAt, player1.createdAt);
|
||||||
|
|
||||||
final fetchedGroup2 = allGroups.firstWhere((g) => g.id == testgroup2.id);
|
final fetchedGroup2 = allGroups.firstWhere(
|
||||||
expect(fetchedGroup2.name, testgroup2.name);
|
(g) => g.id == testgroup2.id,
|
||||||
expect(fetchedGroup2.members.length, testgroup2.members.length);
|
);
|
||||||
expect(fetchedGroup2.members.elementAt(0).id, player2.id);
|
expect(fetchedGroup2.name, testgroup2.name);
|
||||||
|
expect(fetchedGroup2.members.length, testgroup2.members.length);
|
||||||
|
expect(fetchedGroup2.members.elementAt(0).id, player2.id);
|
||||||
|
expect(fetchedGroup2.members.elementAt(0).createdAt, player2.createdAt);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('group and group members gets added correctly', () async {
|
test('group and group members gets added correctly', () async {
|
||||||
await database.groupDao.addGroup(group: testgroup);
|
await withClock(fakeClock, () async {
|
||||||
|
await database.groupDao.addGroup(group: testgroup);
|
||||||
|
|
||||||
final result = await database.groupDao.getGroupById(
|
final result = await database.groupDao.getGroupById(
|
||||||
groupId: testgroup.id,
|
groupId: testgroup.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(result.id, testgroup.id);
|
expect(result.id, testgroup.id);
|
||||||
expect(result.name, testgroup.name);
|
expect(result.name, testgroup.name);
|
||||||
|
expect(result.createdAt, testgroup.createdAt);
|
||||||
|
|
||||||
expect(result.members.length, testgroup.members.length);
|
expect(result.members.length, testgroup.members.length);
|
||||||
for (int i = 0; i < testgroup.members.length; i++) {
|
for (int i = 0; i < testgroup.members.length; i++) {
|
||||||
expect(result.members[i].id, testgroup.members[i].id);
|
expect(result.members[i].id, testgroup.members[i].id);
|
||||||
expect(result.members[i].name, testgroup.members[i].name);
|
expect(result.members[i].name, testgroup.members[i].name);
|
||||||
}
|
expect(result.members[i].createdAt, testgroup.members[i].createdAt);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('group gets deleted correctly', () async {
|
test('group gets deleted correctly', () async {
|
||||||
@@ -103,36 +121,39 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('Adding player to group works correctly', () async {
|
test('Adding player to group works correctly', () async {
|
||||||
await database.groupDao.addGroup(group: testgroup);
|
await withClock(fakeClock, () async {
|
||||||
|
await database.groupDao.addGroup(group: testgroup);
|
||||||
|
|
||||||
await database.playerGroupDao.addPlayerToGroup(
|
await database.playerGroupDao.addPlayerToGroup(
|
||||||
player: player4,
|
player: player4,
|
||||||
groupId: testgroup.id,
|
groupId: testgroup.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
final playerAdded = await database.playerGroupDao.isPlayerInGroup(
|
final playerAdded = await database.playerGroupDao.isPlayerInGroup(
|
||||||
playerId: player4.id,
|
playerId: player4.id,
|
||||||
groupId: testgroup.id,
|
groupId: testgroup.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(playerAdded, true);
|
expect(playerAdded, true);
|
||||||
|
|
||||||
final playerNotAdded = !await database.playerGroupDao.isPlayerInGroup(
|
final playerNotAdded = !await database.playerGroupDao.isPlayerInGroup(
|
||||||
playerId: '',
|
playerId: '',
|
||||||
groupId: testgroup.id,
|
groupId: testgroup.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(playerNotAdded, true);
|
expect(playerNotAdded, true);
|
||||||
|
|
||||||
expect(playerAdded, true);
|
final result = await database.groupDao.getGroupById(
|
||||||
|
groupId: testgroup.id,
|
||||||
|
);
|
||||||
|
expect(result.members.length, testgroup.members.length + 1);
|
||||||
|
|
||||||
final result = await database.groupDao.getGroupById(
|
final addedPlayer = result.members.firstWhere(
|
||||||
groupId: testgroup.id,
|
(p) => p.id == player4.id,
|
||||||
);
|
);
|
||||||
expect(result.members.length, testgroup.members.length + 1);
|
expect(addedPlayer.name, player4.name);
|
||||||
|
expect(addedPlayer.createdAt, player4.createdAt);
|
||||||
final addedPlayer = result.members.firstWhere((p) => p.id == player4.id);
|
});
|
||||||
expect(addedPlayer.name, player4.name);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Removing player from group works correctly', () async {
|
test('Removing player from group works correctly', () async {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:clock/clock.dart';
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:drift/native.dart';
|
import 'package:drift/native.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
@@ -7,6 +8,8 @@ import 'package:game_tracker/data/dto/player.dart';
|
|||||||
void main() {
|
void main() {
|
||||||
late AppDatabase database;
|
late AppDatabase database;
|
||||||
late Player testPlayer;
|
late Player testPlayer;
|
||||||
|
final fixedDate = DateTime(2025, 19, 11, 00, 11, 23);
|
||||||
|
final fakeClock = Clock(() => fixedDate);
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
database = AppDatabase(
|
database = AppDatabase(
|
||||||
@@ -17,7 +20,9 @@ void main() {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
testPlayer = Player(name: 'Test Player');
|
withClock(fakeClock, () {
|
||||||
|
testPlayer = Player(name: 'Test Player');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
tearDown(() async {
|
tearDown(() async {
|
||||||
await database.close();
|
await database.close();
|
||||||
@@ -25,32 +30,39 @@ void main() {
|
|||||||
|
|
||||||
group('player tests', () {
|
group('player tests', () {
|
||||||
test('all players get fetched correctly', () async {
|
test('all players get fetched correctly', () async {
|
||||||
final testPlayer2 = Player(name: 'Second Group');
|
await withClock(fakeClock, () async {
|
||||||
|
sneeex marked this conversation as resolved
Outdated
|
|||||||
await database.playerDao.addPlayer(player: testPlayer);
|
final testPlayer2 = Player(name: 'Second Group');
|
||||||
await database.playerDao.addPlayer(player: testPlayer2);
|
await database.playerDao.addPlayer(player: testPlayer);
|
||||||
|
await database.playerDao.addPlayer(player: testPlayer2);
|
||||||
|
|
||||||
final allPlayers = await database.playerDao.getAllPlayers();
|
final allPlayers = await database.playerDao.getAllPlayers();
|
||||||
expect(allPlayers.length, 2);
|
expect(allPlayers.length, 2);
|
||||||
|
|
||||||
final fetchedPlayer1 = allPlayers.firstWhere(
|
final fetchedPlayer1 = allPlayers.firstWhere(
|
||||||
(g) => g.id == testPlayer.id,
|
(g) => g.id == testPlayer.id,
|
||||||
);
|
);
|
||||||
expect(fetchedPlayer1.name, testPlayer.name);
|
expect(fetchedPlayer1.name, testPlayer.name);
|
||||||
|
expect(fetchedPlayer1.createdAt, testPlayer.createdAt);
|
||||||
|
|
||||||
final fetchedPlayer2 = allPlayers.firstWhere(
|
final fetchedPlayer2 = allPlayers.firstWhere(
|
||||||
(g) => g.id == testPlayer2.id,
|
(g) => g.id == testPlayer2.id,
|
||||||
);
|
);
|
||||||
expect(fetchedPlayer2.name, testPlayer2.name);
|
expect(fetchedPlayer2.name, testPlayer2.name);
|
||||||
|
expect(fetchedPlayer2.createdAt, testPlayer2.createdAt);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('players get inserted correcly ', () async {
|
test('players get inserted correcly ', () async {
|
||||||
await database.playerDao.addPlayer(player: testPlayer);
|
await withClock(fakeClock, () async {
|
||||||
final result = await database.playerDao.getPlayerById(
|
await database.playerDao.addPlayer(player: testPlayer);
|
||||||
playerId: testPlayer.id,
|
final result = await database.playerDao.getPlayerById(
|
||||||
);
|
playerId: testPlayer.id,
|
||||||
|
);
|
||||||
|
|
||||||
expect(result.id, testPlayer.id);
|
expect(result.id, testPlayer.id);
|
||||||
expect(result.name, testPlayer.name);
|
expect(result.name, testPlayer.name);
|
||||||
|
expect(result.createdAt, testPlayer.createdAt);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('players get deleted correcly ', () async {
|
test('players get deleted correcly ', () async {
|
||||||
|
|||||||
Reference in New Issue
Block a user
Kannst du anstatt die fake clock verwenden nicht einfach überprüfen ob die timestamp des players = timestamp des db players ist?
Nein ist ungenau, hab's probiert, funkt net
Gibt dann abweichungen von Millisekunden, vermutlich weil die DB nicht so genau speichern kann wie das datetime object, weil die DB intern nämlich timestamps speichert und der ja nicht so genau ist.
["Drift supports two approaches of storing DateTime values in SQL:
As unix timestamp (the default): In this mode, drift stores date time values as an SQL INTEGER containing the unix timestamp (in seconds).]
Und wenn du ein Datum übergibst und danach checkst? Wir müssen ja nicht Testen das Datetime funktioniert sondern nur das der datentransfer geht
Ich finde das so schön und ist wohl auch Common practice, spricht doch nichts dagegen oder? Ich will ja eben auch wissen, ob der das Datum mit Zeit in der richtigen Genauigkeit speichert und nicht nur ob er es überhaupt tut. Sollte es mal durch ein Update oder so nicht mehr korrekt sein, ist es ja wichtig zu wissen, ob der datetime der in der DB gespeichert ist dem wahren entspricht. Außerdem will ich das ja so realitätsgetreu wie möglich halten und das datetime auch von der Klasse selbst erzeugen lassen, auch wenn ich es hijacke und nicht selber bei den Playern, groups und Games setzen.
Also was mich halt bisschen genervt hat, das man diverse Sachen jetzt in
await withClock(fakeClock, () async {});wrappen muss. Kannst du es nicht sonst so machen, dass alle Objekte die genutzt werden in dersetUp(() {});Methode erstellt, damit man die fake clock nicht mehr in den einzelnen Tests brauch?Bestimmt muss mal schauen