Skip to content

Commit

Permalink
Add homework counter
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsreichardt committed Oct 12, 2024
1 parent bb452c2 commit 0911bd4
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 14 deletions.
25 changes: 25 additions & 0 deletions app/lib/homework/homework_dialog/homework_dialog_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:filesharing_logic/filesharing_logic_models.dart';

import 'package:group_domain_models/group_domain_models.dart';
import 'package:hausaufgabenheft_logik/hausaufgabenheft_logik.dart' hide Date;
import 'package:key_value_store/key_value_store.dart';
import 'package:meta/meta.dart';
import 'package:sharezone/markdown/markdown_analytics.dart';
import 'package:sharezone/util/api.dart';
Expand Down Expand Up @@ -460,6 +461,7 @@ class HomeworkDialogBloc extends Bloc<HomeworkDialogEvent, HomeworkDialogState>
HomeworkDto? _initialHomework;
late final IList<CloudFile> _initialAttachments;
late final bool isEditing;
final KeyValueStore keyValueStore;

_DateSelection _initialDateSelection = _DateSelection.noSelection;
_DateSelection _dateSelection = _DateSelection.noSelection;
Expand Down Expand Up @@ -498,6 +500,7 @@ class HomeworkDialogBloc extends Bloc<HomeworkDialogEvent, HomeworkDialogState>
required this.analytics,
required this.markdownAnalytics,
required this.nextSchooldayCalculator,
required this.keyValueStore,
Clock? clockOverride,
HomeworkId? homeworkId,
}) : super(homeworkId != null
Expand Down Expand Up @@ -605,6 +608,8 @@ class HomeworkDialogBloc extends Bloc<HomeworkDialogEvent, HomeworkDialogState>
.containsMarkdown(_initialHomework?.description ?? '')) {
markdownAnalytics.logMarkdownUsedHomework();
}

_increaseLocalEditingCounter();
} else {
try {
// try-catch won't work for this case as we don't await the future.
Expand All @@ -630,6 +635,8 @@ class HomeworkDialogBloc extends Bloc<HomeworkDialogEvent, HomeworkDialogState>
if (markdownAnalytics.containsMarkdown(_homework.description)) {
markdownAnalytics.logMarkdownUsedHomework();
}

_increaseLocalCreationCounter();
}

emit(SavedSuccessfully(isEditing: isEditing));
Expand Down Expand Up @@ -802,6 +809,24 @@ class HomeworkDialogBloc extends Bloc<HomeworkDialogEvent, HomeworkDialogState>
);
}

void _increaseLocalEditingCounter() {
_increaseLocalCounter('homework-editing-counter');
}

void _increaseLocalCreationCounter() {
_increaseLocalCounter('homework-creation-counter');
}

/// Increases the counter for the given key in the local key-value store.
///
/// The counter can later be used to trigger different actions based on the
/// amount of creations or edits (e.g. show an ad after the user
/// created/edited 5 homeworks).
void _increaseLocalCounter(String key) {
final counter = keyValueStore.getInt(key) ?? 0;
keyValueStore.setInt(key, counter + 1);
}

Ready _getNewState() {
final didHomeworkChange = isEditing
? _initialHomework != _homework
Expand Down
70 changes: 56 additions & 14 deletions app/test/homework/homework_dialog_bloc_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import 'package:files_basics/files_models.dart';
import 'package:files_basics/local_file.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:group_domain_models/group_domain_models.dart';
import 'package:key_value_store/in_memory_key_value_store.dart';
import 'package:mockito/mockito.dart';
import 'package:rxdart/rxdart.dart';
import 'package:sharezone/homework/homework_dialog/homework_dialog_bloc.dart';
Expand All @@ -36,36 +37,38 @@ void main() {
late MockNextSchooldayCalculator nextSchooldayCalculator;
late LocalAnalyticsBackend analyticsBackend;
late Analytics analytics;
late InMemoryKeyValueStore keyValueStore;

setUp(() {
courseGateway = MockCourseGateway();
homeworkDialogApi = MockHomeworkDialogApi();
nextLessonCalculator = MockNextLessonCalculator();
nextSchooldayCalculator = MockNextSchooldayCalculator();
analyticsBackend = LocalAnalyticsBackend();
keyValueStore = InMemoryKeyValueStore();
analytics = Analytics(analyticsBackend);
});

HomeworkDialogBloc createBlocForNewHomeworkDialog({Clock? clock}) {
return HomeworkDialogBloc(
api: homeworkDialogApi,
clockOverride: clock,
nextLessonCalculator: nextLessonCalculator,
nextSchooldayCalculator: nextSchooldayCalculator,
analytics: analytics,
markdownAnalytics: MarkdownAnalytics(analytics),
);
api: homeworkDialogApi,
clockOverride: clock,
nextLessonCalculator: nextLessonCalculator,
nextSchooldayCalculator: nextSchooldayCalculator,
analytics: analytics,
markdownAnalytics: MarkdownAnalytics(analytics),
keyValueStore: keyValueStore);
}

HomeworkDialogBloc createBlocForEditingHomeworkDialog(HomeworkId id) {
return HomeworkDialogBloc(
api: homeworkDialogApi,
nextLessonCalculator: nextLessonCalculator,
nextSchooldayCalculator: nextSchooldayCalculator,
analytics: analytics,
homeworkId: id,
markdownAnalytics: MarkdownAnalytics(analytics),
);
api: homeworkDialogApi,
nextLessonCalculator: nextLessonCalculator,
nextSchooldayCalculator: nextSchooldayCalculator,
analytics: analytics,
homeworkId: id,
markdownAnalytics: MarkdownAnalytics(analytics),
keyValueStore: keyValueStore);
}

void addCourse(Course course) {
Expand Down Expand Up @@ -850,6 +853,45 @@ void main() {

expect(bloc.state, const SavedSuccessfully(isEditing: true));
});

test('Increases local editing counter when editing a homework', () async {
const homeworkId = HomeworkId('foo_homework_id');
addCourse(courseWith(
id: 'foo_course',
));
final homework = randomHomeworkWith(
id: homeworkId.value,
title: 'title text',
courseId: 'foo_course',
);
homeworkDialogApi.homeworkToReturn = homework;

final bloc = createBlocForEditingHomeworkDialog(homeworkId);
await pumpEventQueue();

bloc.add(const TitleChanged('new title'));
bloc.add(const Save());
await bloc.stream.whereType<SavedSuccessfully>().first;

expect(keyValueStore.getInt('homework-editing-counter'), 1);
});

test('Increases local creation counter when creating a new homework',
() async {
final bloc = createBlocForNewHomeworkDialog();
addCourse(courseWith(
id: 'foo_course',
));

bloc.add(const TitleChanged('abc'));
bloc.add(const CourseChanged(CourseId('foo_course')));
bloc.add(DueDateChanged(DueDateSelection.date(Date('2024-03-08'))));
await pumpEventQueue();
bloc.add(const Save());
await bloc.stream.whereType<SavedSuccessfully>().first;

expect(keyValueStore.getInt('homework-creation-counter'), 1);
});
});
}

Expand Down

0 comments on commit 0911bd4

Please sign in to comment.