Skip to content

Commit

Permalink
Merge pull request #80 from mario-bermonti:mario-bermonti/issue79
Browse files Browse the repository at this point in the history
Add unit tests for FirebaseDB methods
  • Loading branch information
mario-bermonti authored Apr 2, 2024
2 parents b7746f8 + bc4943c commit d467ccd
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 79 deletions.
46 changes: 11 additions & 35 deletions lib/databases/firebase_db/firebase_db.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import 'package:cognitive_data/models/device.dart';
/// DB used to store data in Firebase.
/// Requires passing a [FirebaseFirestore] instance at instantiation.
class FirebaseDB implements DB {
final FirebaseFirestore _db;
final FirebaseFirestore db;
final String participantID;
final String sessionID;
String taskName;

FirebaseDB(
this._db, {
this.db, {
required this.participantID,
required this.sessionID,
required this.taskName,
Expand All @@ -25,16 +25,9 @@ class FirebaseDB implements DB {
/// the session.
@override
Future<void> addDevice({required Device device}) async {
final Map<String, dynamic> deviceData = {
'participantID': device.participantID,
'sessionID': device.sessionID,
'height': device.height,
'width': device.width,
'aspectRatio': device.aspectRatio,
'platform': device.platform,
};
final Map<String, dynamic> deviceData = device.toJson();

final CollectionReference deviceRef = _db.collection(
final CollectionReference deviceRef = db.collection(
'participants/$participantID/cognitive_tasks/$taskName/sessions/$sessionID/deviceMetadata');

await deviceRef.doc('deviceMetadata').set(deviceData);
Expand All @@ -46,14 +39,9 @@ class FirebaseDB implements DB {
/// the session.
@override
Future<void> addSession({required Session session}) async {
final Map<String, dynamic> sessionData = {
'participantID': session.participantID,
'sessionID': session.sessionID,
'startTime': session.startTime.toString(),
'endTime': session.endTime.toString(),
};
final Map<String, dynamic> sessionData = session.toJson();

final CollectionReference sessionRef = _db.collection(
final CollectionReference sessionRef = db.collection(
'participants/$participantID/cognitive_tasks/$taskName/sessions/$sessionID/sessionMetadata');

await sessionRef.doc('sessionMetadata').set(sessionData);
Expand All @@ -64,15 +52,9 @@ class FirebaseDB implements DB {
/// named `trials`.
@override
Future<void> addTrial({required Trial trial}) async {
final Map<String, dynamic> trialMap = {
'participantID': trial.participantID,
'sessionID': trial.sessionID,
'trialType': trial.trialType,
'stim': trial.stim,
'response': trial.response,
};
final Map<String, dynamic> trialMap = trial.toJson();

final CollectionReference trialsRef = _db.collection(
final CollectionReference trialsRef = db.collection(
'participants/$participantID/cognitive_tasks/$taskName/sessions/$sessionID/trials');

await trialsRef.add(trialMap);
Expand All @@ -83,19 +65,13 @@ class FirebaseDB implements DB {
/// named `trials`.
@override
Future<void> addTrials({required List<Trial> trials}) async {
final CollectionReference trialsRef = _db.collection(
final CollectionReference trialsRef = db.collection(
'participants/$participantID/cognitive_tasks/$taskName/sessions/$sessionID/trials');

final WriteBatch batch = _db.batch();
final WriteBatch batch = db.batch();

for (final Trial trial in trials) {
final Map<String, dynamic> trialMap = {
'participantID': trial.participantID,
'sessionID': trial.sessionID,
'trialType': trial.trialType,
'stim': trial.stim,
'response': trial.response,
};
final Map<String, dynamic> trialMap = trial.toJson();

batch.set(trialsRef.doc(), trialMap);
}
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ dev_dependencies:
build_runner: ^2.1.11
test: ^1.21.1
json_serializable: ^6.7.1
# fake_cloud_firestore: ^2.1.0
fake_cloud_firestore: ^2.4.9

flutter:
43 changes: 0 additions & 43 deletions test/databases/firebase_db/firebase_db_test.dart
Original file line number Diff line number Diff line change
@@ -1,44 +1 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:cognitive_data/databases/firebase_db/firebase_db.dart';
import 'package:cognitive_data/models/session.dart';
import 'package:fake_cloud_firestore/fake_cloud_firestore.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
late FirebaseDB db;
late String currentSessionPath;

setUp(() {
db = FirebaseDB(
FakeFirebaseFirestore(),
participantID: '101',
sessionID: '001',
taskName: 'dsb',
);
currentSessionPath =
'participants/${db.participantID}/cognitive_tasks/${db.taskName}/sessions/${db.sessionID}';
});

test(
"FirebaseDB.addSession correctly adds data to Firebase",
() async {
final Session sessionLocal = Session(
participantID: db.participantID,
sessionID: db.sessionID,
startTime: DateTime.now(),
endTime: DateTime.now(),
);

await db.addSession(session: sessionLocal);

final DocumentSnapshot sessionFirebaseSnapshot = await db.db
.doc('$currentSessionPath/sessionMetadata/sessionMetadata')
.get();

Map<String, dynamic> sessionFirebaseData =
sessionFirebaseSnapshot.data() as Map<String, dynamic>;

expect(sessionFirebaseData, sessionLocal.toJson());
},
);
}

0 comments on commit d467ccd

Please sign in to comment.