Skip to content

Commit

Permalink
Merge pull request #13 from mario-bermonti:fix-12
Browse files Browse the repository at this point in the history
Use firebase.uid as participantID
  • Loading branch information
mario-bermonti authored Apr 8, 2024
2 parents 53c82de + 5b1ae3a commit 9824da0
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 22 deletions.
20 changes: 20 additions & 0 deletions lib/src/auth/auth.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:mdigit_span_tasks_ema/src/auth/participant.dart';

/// Manages authorization processes for the app
class Auth {
/// [FirebaseAuth] instance used to access auth functionality.
final FirebaseAuth auth;

Auth({required this.auth});

/// Anonymously add or sign in the participant into firebase.
Future<Participant> signIn() async {
final UserCredential userCredential = await auth.signInAnonymously();
final Participant participant = Participant(
uid: userCredential.user?.uid,
registerDateTime: userCredential.user?.metadata.creationTime,
);
return participant;
}
}
19 changes: 19 additions & 0 deletions lib/src/auth/participant.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/// Represents a single study participant.
/// Can be used to keep track of participants' important info, including
/// "identifying" info.
class Participant {
late final String uid;
late final DateTime registerDateTime;

Participant({
required String? uid,
required DateTime? registerDateTime,
}) {
if (uid == null || registerDateTime == null) {
throw Exception('Error creating participant model');
} else {
this.uid = uid;
this.registerDateTime = registerDateTime;
}
}
}
14 changes: 0 additions & 14 deletions lib/src/services/auth.dart

This file was deleted.

12 changes: 5 additions & 7 deletions lib/src/services/run_session.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import 'package:digit_span_tasks/digit_span_tasks.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:mdigit_span_tasks_ema/src/auth/participant.dart';
import 'package:mdigit_span_tasks_ema/src/data_manager/session_id_creator.dart';
import 'package:mdigit_span_tasks_ema/src/services/auth.dart';
import 'package:mdigit_span_tasks_ema/src/auth/auth.dart';
import 'package:mdigit_span_tasks_ema/src/services/data_processor.dart';

import '../participant_info/participant_info_dialog.dart';

/// Run a data collection session
/// Running a session includes configuring everything needed and running a
/// cognitive task specified with [taskRunner].
Expand All @@ -16,7 +14,9 @@ void runSession(
required String sessionID,
}) taskRunner,
required String taskName}) async {
final String participantID = await showParticipantInfoDialog();
final Participant participant =
await Auth(auth: FirebaseAuth.instance).signIn();
final String participantID = participant.uid;

/// We use the startTime for the practice session to create a single
/// session id for both practice and experimental data.
Expand All @@ -29,8 +29,6 @@ void runSession(
sessionID: sessionID,
);

await Auth(auth: FirebaseAuth.instance).signIn();

await processData(
participantID: participantID,
sessionID: sessionID,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:firebase_auth_mocks/firebase_auth_mocks.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mdigit_span_tasks_ema/src/services/auth.dart';
import 'package:mdigit_span_tasks_ema/src/auth/auth.dart';

void main() {
test(
Expand Down
23 changes: 23 additions & 0 deletions test/src/auth/participant_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mdigit_span_tasks_ema/src/auth/participant.dart';

void main() {
test(
"When passing a null uid, Participant's constructor will throw an exception",
() {
expect(
() => Participant(uid: null, registerDateTime: DateTime.now()),
throwsException,
);
},
);
test(
"When passing a null registerDateTime, Participant's constructor will throw an exception",
() {
expect(
() => Participant(uid: 'uid', registerDateTime: null),
throwsException,
);
},
);
}

0 comments on commit 9824da0

Please sign in to comment.