Merge with master and UserDatabase works ✨
continuous-integration/drone/push Build is passing
Details
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 688 KiB |
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 543 KiB |
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 32 KiB |
@ -1,44 +1,17 @@
|
||||
import 'Player.dart';
|
||||
|
||||
class Game {
|
||||
int _id;
|
||||
DateTime _date;
|
||||
int _pointsCurrentUser;
|
||||
bool _isFinished;
|
||||
List<Player> _players = [];
|
||||
final int _id;
|
||||
final DateTime _date;
|
||||
final int _pointsCurrentUser;
|
||||
final List<Player> _players;
|
||||
|
||||
// Constructor
|
||||
Game(this._id, this._date, this._pointsCurrentUser, this._isFinished,
|
||||
Game(this._id, this._date, this._pointsCurrentUser,
|
||||
this._players);
|
||||
|
||||
// Getters and setters
|
||||
int get id => _id;
|
||||
|
||||
set id(int value) {
|
||||
_id = value;
|
||||
}
|
||||
|
||||
DateTime get date => _date;
|
||||
|
||||
set date(DateTime value) {
|
||||
_date = value;
|
||||
}
|
||||
|
||||
int get pointsCurrentUser => _pointsCurrentUser;
|
||||
|
||||
set pointsCurrentUser(int value) {
|
||||
_pointsCurrentUser = value;
|
||||
}
|
||||
|
||||
bool get isFinished => _isFinished;
|
||||
|
||||
set isFinished(bool value) {
|
||||
_isFinished = value;
|
||||
}
|
||||
|
||||
List<Player> get players => _players;
|
||||
|
||||
set playersId(List<Player> value) {
|
||||
_players = value;
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +1,13 @@
|
||||
import 'package:bowl_in/model/IManager.dart';
|
||||
import 'package:localstorage/localstorage.dart';
|
||||
|
||||
import '../IGameManager.dart';
|
||||
import '../IUserManager.dart';
|
||||
import '../../database/sqlflite/UserDataBase.dart';
|
||||
import 'GameManager.dart';
|
||||
import 'UserManager.dart';
|
||||
|
||||
class LocalData extends IManager{
|
||||
late IUserManager _userMgr;
|
||||
late IGameManager _gameMgr;
|
||||
|
||||
final LocalStorage storage = LocalStorage('local_key');
|
||||
class LocalData extends IManager {
|
||||
final UserDatabase userDatabase = UserDatabase();
|
||||
|
||||
LocalData() {
|
||||
_userMgr = UserManager(this);
|
||||
_gameMgr = GameManager(this);
|
||||
userMgr = UserManager(this);
|
||||
gameMgr = GameManager(this);
|
||||
}
|
||||
|
||||
IUserManager get userMgr => _userMgr;
|
||||
|
||||
IGameManager get gameMgr => _gameMgr;
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
import 'package:bowl_in/model/GameDetail.dart';
|
||||
import 'package:bowl_in/model/Guest.dart';
|
||||
import 'package:bowl_in/model/IManager.dart';
|
||||
import 'package:bowl_in/model/Player.dart';
|
||||
import 'package:bowl_in/model/StubManager/StubData.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void testManager(IManager mgr) {
|
||||
test("Test manager " + mgr.runtimeType.toString(), () {
|
||||
expect(mgr.userCurrent, mgr.userMgr.getUsersByName("Dave").first);
|
||||
expect(mgr.userCurrent, mgr.userMgr.getUserById(mgr.userCurrent.id));
|
||||
|
||||
List<Player> players = [mgr.userCurrent, Guest("Emre")];
|
||||
GameDetail gd = GameDetail(
|
||||
mgr.gameMgr.getNextId(), DateTime.now(), null, mgr.userCurrent.id, players);
|
||||
|
||||
expect(gd.players, players);
|
||||
expect(gd.host, mgr.userCurrent.id);
|
||||
|
||||
|
||||
mgr.gameMgr.addGame(gd);
|
||||
|
||||
expect(gd, mgr.gameMgr.getGameById(gd.id));
|
||||
|
||||
expect(gd, mgr.gameMgr.getGamesByPlayer(mgr.userCurrent).first);
|
||||
|
||||
expect(gd, mgr.gameMgr.getGamesByPlayerId(mgr.userCurrent.id).first);
|
||||
|
||||
expect(players, mgr.gameMgr.getPlayersByIdGame(gd.id));
|
||||
|
||||
expect(gd, mgr.gameMgr.getGamesByPlayers(players).first);
|
||||
});
|
||||
}
|
||||
|
||||
void main() {
|
||||
testManager(StubData());
|
||||
}
|
@ -0,0 +1,140 @@
|
||||
import 'package:bowl_in/model/AbstractRound.dart';
|
||||
import 'package:bowl_in/model/GameDetail.dart';
|
||||
import 'package:bowl_in/model/GamePlayer.dart';
|
||||
import 'package:bowl_in/model/Guest.dart';
|
||||
import 'package:bowl_in/model/IManager.dart';
|
||||
import 'package:bowl_in/model/Player.dart';
|
||||
import 'package:bowl_in/model/StubManager/StubData.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
test("Just strikes", (){
|
||||
final IManager mgr = StubData();
|
||||
final List<Player> listPlayers = [mgr.userCurrent, Guest("Lucas")];
|
||||
|
||||
final GameDetail gd = GameDetail(
|
||||
-1,
|
||||
DateTime.now(),
|
||||
null,
|
||||
mgr.userCurrent.id,
|
||||
listPlayers);
|
||||
mgr.gamePlayer.game = gd;
|
||||
mgr.gamePlayer.onNext(false, null);
|
||||
|
||||
AbstractRound? currentRound = mgr.gamePlayer.currentRound;
|
||||
while (currentRound != null) {
|
||||
bool isFinished = currentRound.computeNext(10);
|
||||
if (currentRound.isSpareOrStrike()) {
|
||||
mgr.gamePlayer.onSpareOrStrike();
|
||||
}
|
||||
mgr.gamePlayer.onNext(isFinished, null);
|
||||
currentRound = mgr.gamePlayer.currentRound;
|
||||
}
|
||||
|
||||
final int score = gd
|
||||
.getRank()
|
||||
.values
|
||||
.first;
|
||||
expect(score, 300);
|
||||
});
|
||||
|
||||
test("Classic game", (){
|
||||
final IManager mgr = StubData();
|
||||
final List<Player> listPlayers = [mgr.userCurrent, Guest("Lucas")];
|
||||
|
||||
final DateTime dateGame = DateTime.now();
|
||||
|
||||
final GameDetail gd = GameDetail(
|
||||
-1,
|
||||
dateGame,
|
||||
null,
|
||||
mgr.userCurrent.id,
|
||||
listPlayers);
|
||||
mgr.gamePlayer.game = gd;
|
||||
mgr.gamePlayer.onNext(false, null);
|
||||
|
||||
makeThrow(7, mgr.gamePlayer);
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
|
||||
makeThrow(10, mgr.gamePlayer);
|
||||
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
|
||||
makeThrow(3, mgr.gamePlayer);
|
||||
makeThrow(7, mgr.gamePlayer);
|
||||
|
||||
makeThrow(0, mgr.gamePlayer);
|
||||
makeThrow(7, mgr.gamePlayer);
|
||||
|
||||
makeThrow(10, mgr.gamePlayer);
|
||||
|
||||
makeThrow(0, mgr.gamePlayer);
|
||||
makeThrow(0, mgr.gamePlayer);
|
||||
|
||||
makeThrow(9, mgr.gamePlayer);
|
||||
makeThrow(0, mgr.gamePlayer);
|
||||
|
||||
makeThrow(0, mgr.gamePlayer);
|
||||
makeThrow(10, mgr.gamePlayer);
|
||||
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
makeThrow(5, mgr.gamePlayer);
|
||||
|
||||
makeThrow(10, mgr.gamePlayer);
|
||||
|
||||
makeThrow(3, mgr.gamePlayer);
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
|
||||
makeThrow(1, mgr.gamePlayer);
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
|
||||
makeThrow(7, mgr.gamePlayer);
|
||||
makeThrow(1, mgr.gamePlayer);
|
||||
|
||||
makeThrow(4, mgr.gamePlayer);
|
||||
makeThrow(6, mgr.gamePlayer);
|
||||
|
||||
makeThrow(1, mgr.gamePlayer);
|
||||
makeThrow(7, mgr.gamePlayer);
|
||||
|
||||
makeThrow(10, mgr.gamePlayer);
|
||||
makeThrow(6, mgr.gamePlayer);
|
||||
makeThrow(2, mgr.gamePlayer);
|
||||
|
||||
makeThrow(8, mgr.gamePlayer);
|
||||
makeThrow(1, mgr.gamePlayer);
|
||||
|
||||
|
||||
|
||||
final Iterable<int> score = gd
|
||||
.getRank()
|
||||
.values;
|
||||
expect(score.first, 128);
|
||||
expect(score.last, 95);
|
||||
|
||||
expect(mgr.userCurrent.games.length, 1);
|
||||
expect(mgr.userCurrent.games.first.id, mgr.gamePlayer.game.id);
|
||||
expect(mgr.userCurrent.games.first.pointsCurrentUser, 128);
|
||||
expect(mgr.userCurrent.games.first.date, dateGame);
|
||||
expect(mgr.userCurrent.games.first.players, listPlayers);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
void makeThrow(int input, GamePlayer gamePlayer){
|
||||
AbstractRound currentRound = gamePlayer.currentRound!;
|
||||
bool isFinished = currentRound.computeNext(input);
|
||||
if (currentRound.isSpareOrStrike()) {
|
||||
gamePlayer.onSpareOrStrike();
|
||||
}
|
||||
gamePlayer.onNext(isFinished, null);
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
import 'package:bowl_in/model/LastRound.dart';
|
||||
import 'package:bowl_in/model/Round.dart';
|
||||
import 'package:bowl_in/model/User.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
test("Test Round", () {
|
||||
User u = User(
|
||||
1,
|
||||
"Louison",
|
||||
"Sources/bowlin_project/assets/images/image_user_pink.png",
|
||||
"loparant@gmail.com", [], []);
|
||||
Round r = Round(null, null, null, u, 1);
|
||||
|
||||
expect(r.getMaxPinsThisShot(), 10);
|
||||
expect(r.isSpareOrStrike(), false);
|
||||
|
||||
r.computeNext(4);
|
||||
|
||||
expect(r.getMaxPinsThisShot(), 6);
|
||||
r.computeNext(6);
|
||||
|
||||
expect(r.isSpare(), true);
|
||||
expect(r.isSpareOrStrike(), true);
|
||||
expect(r.isStrike(), false);
|
||||
expect(r.getNbSpares(), 1);
|
||||
expect(r.getNbStrike(), 0);
|
||||
|
||||
Round r2 = Round(null, null, null, u, 2);
|
||||
r2.computeNext(10);
|
||||
expect(r2.isSpare(), false);
|
||||
expect(r2.isStrike(), true);
|
||||
expect(r2.isSpareOrStrike(), true);
|
||||
expect(r2.getNbSpares(), 0);
|
||||
expect(r2.getNbStrike(), 1);
|
||||
|
||||
Round r3 = Round(null, null, null, u, 2);
|
||||
r3.computeNext(2);
|
||||
r3.computeNext(5);
|
||||
expect(r3.getPinsKnockedDown(), 7);
|
||||
});
|
||||
|
||||
test("Test LastRound", () {
|
||||
User u = User(
|
||||
1,
|
||||
"Louison",
|
||||
"Sources/bowlin_project/assets/images/image_user_pink.png",
|
||||
"loparant@gmail.com", [], []);
|
||||
LastRound r = LastRound(null, null, null, u, 1, null);
|
||||
|
||||
expect(r.getMaxPinsThisShot(), 10);
|
||||
expect(r.isSpareOrStrike(), false);
|
||||
r.computeNext(10);
|
||||
|
||||
expect(r.getMaxPinsThisShot(), 10);
|
||||
r.computeNext(10);
|
||||
|
||||
expect(r.getMaxPinsThisShot(), 10);
|
||||
r.computeNext(10);
|
||||
|
||||
expect(r.getPinsKnockedDown(), 30);
|
||||
expect(r.getNbSpares(), 0);
|
||||
expect(r.getNbStrike(), 3);
|
||||
|
||||
LastRound r2 = LastRound(null, null, null, u, 1, null);
|
||||
r2.computeNext(1);
|
||||
expect(r2.getMaxPinsThisShot(), 9);
|
||||
r2.computeNext(9);
|
||||
expect(r2.getMaxPinsThisShot(), 10);
|
||||
r2.computeNext(10);
|
||||
expect(r2.getPinsKnockedDown(), 20);
|
||||
expect(r2.getNbSpares(), 1);
|
||||
expect(r2.getNbStrike(), 1);
|
||||
|
||||
LastRound r3 = LastRound(null, null, null, u, 1, null);
|
||||
r3.computeNext(10);
|
||||
r3.computeNext(2);
|
||||
expect(r3.getMaxPinsThisShot(), 8);
|
||||
r3.computeNext(8);
|
||||
expect(r3.getPinsKnockedDown(), 20);
|
||||
expect(r3.getNbSpares(), 1);
|
||||
expect(r3.getNbStrike(), 1);
|
||||
});
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
// This is a basic Flutter widget test.
|
||||
//
|
||||
// To perform an interaction with a widget in your test, use the WidgetTester
|
||||
// utility in the flutter_test package. For example, you can send tap and scroll
|
||||
// gestures. You can also use WidgetTester to find child widgets in the widget
|
||||
// tree, read text, and verify that the values of widget properties are correct.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:bowl_in/main.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||
// Build our app and trigger a frame.
|
||||
await tester.pumpWidget(const MyApp());
|
||||
|
||||
// Verify that our counter starts at 0.
|
||||
expect(find.text('0'), findsOneWidget);
|
||||
expect(find.text('1'), findsNothing);
|
||||
|
||||
// Tap the '+' icon and trigger a frame.
|
||||
await tester.tap(find.byIcon(Icons.add));
|
||||
await tester.pump();
|
||||
|
||||
// Verify that our counter has incremented.
|
||||
expect(find.text('0'), findsNothing);
|
||||
expect(find.text('1'), findsOneWidget);
|
||||
});
|
||||
}
|