diff --git a/lib/application/custom_build/custom_build_bloc.dart b/lib/application/custom_build/custom_build_bloc.dart index b80529a77..7592dac25 100644 --- a/lib/application/custom_build/custom_build_bloc.dart +++ b/lib/application/custom_build/custom_build_bloc.dart @@ -7,6 +7,7 @@ import 'package:shiori/domain/extensions/string_extensions.dart'; import 'package:shiori/domain/models/models.dart'; import 'package:shiori/domain/services/data_service.dart'; import 'package:shiori/domain/services/genshin_service.dart'; +import 'package:shiori/domain/services/telemetry_service.dart'; part 'custom_build_bloc.freezed.dart'; part 'custom_build_event.dart'; @@ -15,6 +16,7 @@ part 'custom_build_state.dart'; class CustomBuildBloc extends Bloc { final GenshinService _genshinService; final DataService _dataService; + final TelemetryService _telemetryService; final CustomBuildsBloc _customBuildsBloc; static int maxTitleLength = 40; @@ -29,7 +31,7 @@ class CustomBuildBloc extends Bloc { static int maxNumberOfWeapons = 10; static int maxNumberOfTeamCharacters = 10; - CustomBuildBloc(this._genshinService, this._dataService, this._customBuildsBloc) : super(const CustomBuildState.loading()); + CustomBuildBloc(this._genshinService, this._dataService, this._telemetryService, this._customBuildsBloc) : super(const CustomBuildState.loading()); @override Stream mapEventToState(CustomBuildEvent event) async* { @@ -456,6 +458,7 @@ class CustomBuildBloc extends Bloc { state.skillPriorities, ); + await _telemetryService.trackCustomBuildSaved(state.character.key, state.type, state.subType); _customBuildsBloc.add(const CustomBuildsEvent.load()); return _init(state.key, state.title); } @@ -473,6 +476,7 @@ class CustomBuildBloc extends Bloc { state.skillPriorities, ); + await _telemetryService.trackCustomBuildSaved(state.character.key, state.type, state.subType); _customBuildsBloc.add(const CustomBuildsEvent.load()); return _init(build.key, state.title); } diff --git a/lib/domain/services/telemetry_service.dart b/lib/domain/services/telemetry_service.dart index 5aa12f814..2c069e4fa 100644 --- a/lib/domain/services/telemetry_service.dart +++ b/lib/domain/services/telemetry_service.dart @@ -53,4 +53,6 @@ abstract class TelemetryService { Future trackNotificationRestarted(AppNotificationType type); Future trackNotificationStopped(AppNotificationType type); + + Future trackCustomBuildSaved(String charKey, CharacterRoleType roleType, CharacterRoleSubType subType); } diff --git a/lib/infrastructure/telemetry/telemetry_service.dart b/lib/infrastructure/telemetry/telemetry_service.dart index ce54a72e5..b79e46f0e 100644 --- a/lib/infrastructure/telemetry/telemetry_service.dart +++ b/lib/infrastructure/telemetry/telemetry_service.dart @@ -140,4 +140,14 @@ class TelemetryServiceImpl implements TelemetryService { @override Future trackNotificationUpdated(AppNotificationType type) => trackEventAsync('Notification-Updated', {'Type': EnumToString.convertToString(type)}); + + @override + Future trackCustomBuildSaved(String charKey, CharacterRoleType roleType, CharacterRoleSubType subType) => trackEventAsync( + 'Custom-Build-Saved', + { + 'CharKey': charKey, + 'RoleType': EnumToString.convertToString(roleType), + 'SubType': EnumToString.convertToString(subType), + }, + ); } diff --git a/lib/injection.dart b/lib/injection.dart index c0b1019d6..8a15fd0f2 100644 --- a/lib/injection.dart +++ b/lib/injection.dart @@ -175,7 +175,8 @@ class Injection { static CustomBuildBloc getCustomBuildBloc(CustomBuildsBloc bloc) { final genshinService = getIt(); final dataService = getIt(); - return CustomBuildBloc(genshinService, dataService, bloc); + final telemetryService = getIt(); + return CustomBuildBloc(genshinService, dataService, telemetryService, bloc); } static Future init() async { diff --git a/test/application/custom_build/custom_build_bloc_test.dart b/test/application/custom_build/custom_build_bloc_test.dart index 637a42376..a073d3de2 100644 --- a/test/application/custom_build/custom_build_bloc_test.dart +++ b/test/application/custom_build/custom_build_bloc_test.dart @@ -6,6 +6,7 @@ import 'package:shiori/domain/enums/enums.dart'; import 'package:shiori/domain/models/models.dart'; import 'package:shiori/domain/services/data_service.dart'; import 'package:shiori/domain/services/genshin_service.dart'; +import 'package:shiori/domain/services/telemetry_service.dart'; import 'package:shiori/infrastructure/infrastructure.dart'; import '../../common.dart'; @@ -16,6 +17,7 @@ const _dbFolder = 'shiori_custom_build_bloc_tests'; void main() { late GenshinService _genshinService; late DataService _dataService; + late TelemetryService _telemetryService; late CustomBuildsBloc _customBuildsBloc; const _keqingKey = 'keqing'; @@ -29,6 +31,7 @@ void main() { final localeService = LocaleServiceImpl(settingsService); _genshinService = GenshinServiceImpl(localeService); _dataService = DataServiceImpl(_genshinService, CalculatorServiceImpl(_genshinService)); + _telemetryService = MockTelemetryService(); _customBuildsBloc = CustomBuildsBloc(_dataService); return Future(() async { @@ -166,12 +169,15 @@ void main() { ); } - test('Initial state', () => expect(CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc).state, const CustomBuildState.loading())); + test( + 'Initial state', + () => expect(CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc).state, const CustomBuildState.loading()), + ); group('Load', () { blocTest( 'create', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc.add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')), verify: (bloc) => bloc.state.maybeMap( loaded: (state) { @@ -200,7 +206,7 @@ void main() { final build = await _saveCustomBuild(_keqingKey); _buildKey = build.key; }, - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc.add(CustomBuildEvent.load(initialTitle: 'XXX', key: _buildKey)), verify: (bloc) => bloc.state.maybeMap( loaded: (state) { @@ -225,7 +231,7 @@ void main() { group('General', () { blocTest( 'character changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _ganyuKey)), @@ -239,7 +245,7 @@ void main() { blocTest( 'title changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.titleChanged(newValue: 'KEQING PRO')), @@ -253,7 +259,7 @@ void main() { blocTest( 'role changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.roleChanged(newValue: CharacterRoleType.offFieldDps)), @@ -267,7 +273,7 @@ void main() { blocTest( 'sub role changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.subRoleChanged(newValue: CharacterRoleSubType.cryo)), @@ -281,7 +287,7 @@ void main() { blocTest( 'show on character detail changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.showOnCharacterDetailChanged(newValue: false)), @@ -295,7 +301,7 @@ void main() { blocTest( 'is recommended changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.isRecommendedChanged(newValue: true)), @@ -311,7 +317,7 @@ void main() { group('Notes', () { blocTest( 'add', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addNote(note: 'This build needs 200 ER')) @@ -326,7 +332,7 @@ void main() { blocTest( 'add, note is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addNote(note: 'This build needs 200 ER')) @@ -336,7 +342,7 @@ void main() { blocTest( 'delete', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addNote(note: 'This build needs 200 ER')) @@ -351,7 +357,7 @@ void main() { blocTest( 'delete, index is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addNote(note: 'This build needs 200 ER')) @@ -363,7 +369,7 @@ void main() { group('Skill priorities', () { blocTest( 'add', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addSkillPriority(type: CharacterSkillType.elementalBurst)) @@ -378,7 +384,7 @@ void main() { blocTest( 'add, skill already exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addSkillPriority(type: CharacterSkillType.elementalBurst)) @@ -394,7 +400,7 @@ void main() { blocTest( 'add, skill is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addSkillPriority(type: CharacterSkillType.elementalBurst)) @@ -404,7 +410,7 @@ void main() { blocTest( 'delete', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addSkillPriority(type: CharacterSkillType.elementalBurst)) @@ -420,7 +426,7 @@ void main() { blocTest( 'delete, index is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addSkillPriority(type: CharacterSkillType.elementalBurst)) @@ -433,7 +439,7 @@ void main() { group('Weapons', () { blocTest( 'add', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)), @@ -448,7 +454,7 @@ void main() { blocTest( 'add, weapon already exists', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)) @@ -458,7 +464,7 @@ void main() { blocTest( 'add, weapon is not valid for current character', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _ganyuKey)) @@ -468,7 +474,7 @@ void main() { blocTest( 'refinement changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)) @@ -483,7 +489,7 @@ void main() { blocTest( 'refinement changed, weapon does not exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.weaponRefinementChanged(key: _aquilaFavoniaKey, newValue: 5)), @@ -492,7 +498,7 @@ void main() { blocTest( 'refinement changed, refinement has not changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)) @@ -508,7 +514,7 @@ void main() { blocTest( 'refinement changed, invalid value', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.weaponRefinementChanged(key: _aquilaFavoniaKey, newValue: 6)), @@ -517,7 +523,7 @@ void main() { blocTest( 'delete', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.weaponRefinementChanged(key: _aquilaFavoniaKey, newValue: 5)) @@ -532,7 +538,7 @@ void main() { blocTest( 'delete, weapon does not exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)) @@ -544,7 +550,7 @@ void main() { blocTest( 'delete all weapons', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addWeapon(key: _aquilaFavoniaKey)) @@ -559,7 +565,7 @@ void main() { blocTest( 'order changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _keqingKey)) @@ -587,7 +593,7 @@ void main() { group('Artifacts', () { blocTest( 'add', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.flower, statType: StatType.hp)), @@ -606,7 +612,7 @@ void main() { blocTest( 'add, type already exists', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.crown, statType: StatType.hp)) @@ -626,7 +632,7 @@ void main() { blocTest( 'add sub stats', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.flower, statType: StatType.hp)) @@ -662,7 +668,7 @@ void main() { blocTest( 'add sub stats, artifact does not exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -673,7 +679,7 @@ void main() { blocTest( 'add sub-stats, sub-stat is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -684,7 +690,7 @@ void main() { blocTest( 'add sub-stats, sub-stat is not valid', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -695,7 +701,7 @@ void main() { blocTest( 'delete', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.flower, statType: StatType.hp)) @@ -711,7 +717,7 @@ void main() { blocTest( 'delete, type does not exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.flower, statType: StatType.hp)) @@ -721,7 +727,7 @@ void main() { blocTest( 'delete all artifacts', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.addArtifact(key: _thunderingFuryKey, type: ArtifactType.flower, statType: StatType.hp)) @@ -739,7 +745,7 @@ void main() { group('Team characters', () { blocTest( 'add', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -758,7 +764,7 @@ void main() { blocTest( 'add, team character is the same as the main one', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _ganyuKey)) @@ -770,7 +776,7 @@ void main() { blocTest( 'add the same character multiple times', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -789,7 +795,7 @@ void main() { blocTest( 'order changed', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -823,7 +829,7 @@ void main() { blocTest( 'delete', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add( @@ -840,7 +846,7 @@ void main() { blocTest( 'delete, team character does not exist', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.deleteTeamCharacter(key: _ganyuKey)), @@ -851,7 +857,7 @@ void main() { group('Save', () { blocTest( 'all stuff was set', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _keqingKey)) @@ -897,7 +903,7 @@ void main() { blocTest( 'nothing was set', - build: () => CustomBuildBloc(_genshinService, _dataService, _customBuildsBloc), + build: () => CustomBuildBloc(_genshinService, _dataService, _telemetryService, _customBuildsBloc), act: (bloc) => bloc ..add(const CustomBuildEvent.load(initialTitle: 'DPS PRO')) ..add(const CustomBuildEvent.characterChanged(newKey: _keqingKey))