diff --git a/melos.yaml b/melos.yaml index f9c8130..728e20a 100644 --- a/melos.yaml +++ b/melos.yaml @@ -10,7 +10,7 @@ command: scripts: lint:all: - run: dart run melos run analyze && dart run melos run format-check + run: dart run melos run analyze && dart run melos run format-check && dart run melos run test description: Run all static analysis checks. get: @@ -21,7 +21,6 @@ scripts: upgrade: run: melos exec -c 1 -- "flutter pub upgrade" - analyze: run: | dart run melos exec -c 1 -- \ @@ -35,3 +34,9 @@ scripts: format-check: run: dart run melos exec dart format . --set-exit-if-changed description: Run `dart format` checks for all packages. + + test: + run: | + dart run melos exec -c 1 -- \ + flutter test -r github --no-test-assets + description: Run `flutter test` to validate all tests for all packages diff --git a/packages/flutter_availability/lib/src/routes.dart b/packages/flutter_availability/lib/src/routes.dart index 8fc7947..080daa2 100644 --- a/packages/flutter_availability/lib/src/routes.dart +++ b/packages/flutter_availability/lib/src/routes.dart @@ -1,5 +1,4 @@ import "package:flutter/material.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/ui/screens/availability_modification.dart"; import "package:flutter_availability/src/ui/screens/availability_overview.dart"; import "package:flutter_availability/src/ui/screens/template_day_modification.dart"; diff --git a/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart b/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart index 15e0983..56fd389 100644 --- a/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart +++ b/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart @@ -1,6 +1,5 @@ import "package:flutter/material.dart"; import "package:flutter_availability/flutter_availability.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/ui/view_models/availability_view_model.dart"; import "package:flutter_availability/src/ui/view_models/break_view_model.dart"; import "package:flutter_availability/src/ui/widgets/availability_clear.dart"; @@ -9,6 +8,7 @@ import "package:flutter_availability/src/ui/widgets/availabillity_time_selection import "package:flutter_availability/src/ui/widgets/base_page.dart"; import "package:flutter_availability/src/ui/widgets/pause_selection.dart"; import "package:flutter_availability/src/util/scope.dart"; +import "package:flutter_availability/src/util/utils.dart"; import "package:flutter_hooks/flutter_hooks.dart"; /// Screen for modifying the availabilities for a specific daterange @@ -84,12 +84,12 @@ class _AvailabilitiesModificationScreenState if (_availabilityViewModel.templateSelected) { await service.applyTemplate( template: _availabilityViewModel.templates.first, - range: widget.dateRange, + range: widget.dateRange.toAvailabilityDateRange(), ); } else { await service.createAvailability( availability: _availabilityViewModel.toModel(), - range: widget.dateRange, + range: widget.dateRange.toAvailabilityDateRange(), ); } widget.onExit(); diff --git a/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart b/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart index 5767ab3..b24fafe 100644 --- a/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart +++ b/packages/flutter_availability/lib/src/ui/screens/availability_overview.dart @@ -1,9 +1,9 @@ import "package:flutter/material.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/ui/widgets/base_page.dart"; import "package:flutter_availability/src/ui/widgets/calendar.dart"; import "package:flutter_availability/src/ui/widgets/template_legend.dart"; import "package:flutter_availability/src/util/scope.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; import "package:flutter_hooks/flutter_hooks.dart"; /// diff --git a/packages/flutter_availability/lib/src/ui/view_models/availability_view_model.dart b/packages/flutter_availability/lib/src/ui/view_models/availability_view_model.dart index 172c6e7..392cd51 100644 --- a/packages/flutter_availability/lib/src/ui/view_models/availability_view_model.dart +++ b/packages/flutter_availability/lib/src/ui/view_models/availability_view_model.dart @@ -1,5 +1,4 @@ import "package:flutter/material.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/ui/view_models/break_view_model.dart"; import "package:flutter_availability/src/util/utils.dart"; import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; diff --git a/packages/flutter_availability/lib/src/ui/widgets/calendar.dart b/packages/flutter_availability/lib/src/ui/widgets/calendar.dart index d49c396..2a9dbcc 100644 --- a/packages/flutter_availability/lib/src/ui/widgets/calendar.dart +++ b/packages/flutter_availability/lib/src/ui/widgets/calendar.dart @@ -1,6 +1,5 @@ import "package:flutter/material.dart"; -import "package:flutter_availability/src/config/availability_translations.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; +import "package:flutter_availability/flutter_availability.dart"; import "package:flutter_availability/src/ui/widgets/calendar_grid.dart"; import "package:flutter_availability/src/util/availability_deviation.dart"; import "package:flutter_availability/src/util/scope.dart"; diff --git a/packages/flutter_availability/lib/src/ui/widgets/pause_selection.dart b/packages/flutter_availability/lib/src/ui/widgets/pause_selection.dart index c01f8a3..238a914 100644 --- a/packages/flutter_availability/lib/src/ui/widgets/pause_selection.dart +++ b/packages/flutter_availability/lib/src/ui/widgets/pause_selection.dart @@ -1,6 +1,5 @@ import "package:flutter/material.dart"; import "package:flutter_availability/flutter_availability.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/service/pop_handler.dart"; import "package:flutter_availability/src/ui/view_models/break_view_model.dart"; import "package:flutter_availability/src/ui/widgets/generic_time_selection.dart"; diff --git a/packages/flutter_availability/lib/src/ui/widgets/template_legend.dart b/packages/flutter_availability/lib/src/ui/widgets/template_legend.dart index beabcd2..aee25ac 100644 --- a/packages/flutter_availability/lib/src/ui/widgets/template_legend.dart +++ b/packages/flutter_availability/lib/src/ui/widgets/template_legend.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/util/scope.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; /// This shows all the templates of a given month and an option to navigate to /// the template overview diff --git a/packages/flutter_availability/lib/src/userstories.dart b/packages/flutter_availability/lib/src/userstories.dart index 88009d3..f1989e0 100644 --- a/packages/flutter_availability/lib/src/userstories.dart +++ b/packages/flutter_availability/lib/src/userstories.dart @@ -1,9 +1,9 @@ import "package:flutter/material.dart"; import "package:flutter_availability/src/config/availability_options.dart"; import "package:flutter_availability/src/routes.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/service/pop_handler.dart"; import "package:flutter_availability/src/util/scope.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; /// This pushes the availability user story to the navigator stack. Future openAvailabilitiesForUser( diff --git a/packages/flutter_availability/lib/src/util/scope.dart b/packages/flutter_availability/lib/src/util/scope.dart index f21ee00..a55bab8 100644 --- a/packages/flutter_availability/lib/src/util/scope.dart +++ b/packages/flutter_availability/lib/src/util/scope.dart @@ -1,7 +1,7 @@ import "package:flutter/widgets.dart"; import "package:flutter_availability/src/config/availability_options.dart"; -import "package:flutter_availability/src/service/availability_service.dart"; import "package:flutter_availability/src/service/pop_handler.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; /// class AvailabilityScope extends InheritedWidget { diff --git a/packages/flutter_availability/lib/src/util/utils.dart b/packages/flutter_availability/lib/src/util/utils.dart index 4bdc655..fb5e808 100644 --- a/packages/flutter_availability/lib/src/util/utils.dart +++ b/packages/flutter_availability/lib/src/util/utils.dart @@ -1,4 +1,13 @@ +import "package:flutter/material.dart"; +import "package:flutter_availability/flutter_availability.dart"; + /// method to return if 2 dates are at the same time of the day /// ignoring the date bool isAtSameTime(DateTime date1, DateTime date2) => date1.hour == date2.hour && date1.minute == date2.minute; + +/// extension to bridge between material and flutter agnostic dart package +extension DateRangeConversion on DateTimeRange { + /// Creates a new [DateRange] given the internal [start] and [end] values. + DateRange toAvailabilityDateRange() => DateRange(start: start, end: end); +} diff --git a/packages/flutter_availability/pubspec.yaml b/packages/flutter_availability/pubspec.yaml index 42b4655..da3282d 100644 --- a/packages/flutter_availability/pubspec.yaml +++ b/packages/flutter_availability/pubspec.yaml @@ -11,7 +11,6 @@ environment: dependencies: flutter: sdk: flutter - rxdart: ^0.27.0 flutter_hooks: ^0.20.5 flutter_availability_data_interface: hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub diff --git a/packages/flutter_availability_data_interface/lib/flutter_availability_data_interface.dart b/packages/flutter_availability_data_interface/lib/flutter_availability_data_interface.dart index e02e28a..764f000 100644 --- a/packages/flutter_availability_data_interface/lib/flutter_availability_data_interface.dart +++ b/packages/flutter_availability_data_interface/lib/flutter_availability_data_interface.dart @@ -4,3 +4,5 @@ library flutter_availability_data_interface; export "src/data_interface.dart"; export "src/models/availability.dart"; export "src/models/templates.dart"; +export "src/service/availability_service.dart"; +export "src/utils/public.dart"; diff --git a/packages/flutter_availability_data_interface/lib/src/models/availability.dart b/packages/flutter_availability_data_interface/lib/src/models/availability.dart index 46fd2ba..0981bb2 100644 --- a/packages/flutter_availability_data_interface/lib/src/models/availability.dart +++ b/packages/flutter_availability_data_interface/lib/src/models/availability.dart @@ -1,4 +1,4 @@ -import "package:flutter_availability_data_interface/src/utils.dart"; +import "package:flutter_availability_data_interface/src/utils/private.dart"; /// Exception thrown when the end is before the start class BreakEndBeforeStartException implements Exception {} diff --git a/packages/flutter_availability_data_interface/lib/src/models/templates.dart b/packages/flutter_availability_data_interface/lib/src/models/templates.dart index 4cf9642..3774981 100644 --- a/packages/flutter_availability_data_interface/lib/src/models/templates.dart +++ b/packages/flutter_availability_data_interface/lib/src/models/templates.dart @@ -1,6 +1,6 @@ import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; import "package:flutter_availability_data_interface/src/models/availability.dart"; -import "package:flutter_availability_data_interface/src/utils.dart"; +import "package:flutter_availability_data_interface/src/utils/private.dart"; /// Exception thrown when the end is before the start class TemplateEndBeforeStartException implements Exception {} diff --git a/packages/flutter_availability/lib/src/service/availability_service.dart b/packages/flutter_availability_data_interface/lib/src/service/availability_service.dart similarity index 94% rename from packages/flutter_availability/lib/src/service/availability_service.dart rename to packages/flutter_availability_data_interface/lib/src/service/availability_service.dart index 956d024..4c9ba9e 100644 --- a/packages/flutter_availability/lib/src/service/availability_service.dart +++ b/packages/flutter_availability_data_interface/lib/src/service/availability_service.dart @@ -1,5 +1,7 @@ -import "package:flutter/material.dart"; -import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; +import "package:flutter_availability_data_interface/src/data_interface.dart"; +import "package:flutter_availability_data_interface/src/models/availability.dart"; +import "package:flutter_availability_data_interface/src/models/templates.dart"; +import "package:flutter_availability_data_interface/src/utils/public.dart"; import "package:rxdart/rxdart.dart"; /// @@ -21,7 +23,7 @@ class AvailabilityService { /// changed Future createAvailability({ required AvailabilityModel availability, - required DateTimeRange range, + required DateRange range, }) async { // apply the startTime and endTime to the availability model var updatedAvailability = availability.copyWith( @@ -68,7 +70,7 @@ class AvailabilityService { /// [template] to each day in the range Future applyTemplate({ required AvailabilityTemplateModel template, - required DateTimeRange range, + required DateRange range, }) async { await dataInterface.applyTemplateForUser( userId, diff --git a/packages/flutter_availability_data_interface/lib/src/utils.dart b/packages/flutter_availability_data_interface/lib/src/utils/private.dart similarity index 100% rename from packages/flutter_availability_data_interface/lib/src/utils.dart rename to packages/flutter_availability_data_interface/lib/src/utils/private.dart diff --git a/packages/flutter_availability_data_interface/lib/src/utils/public.dart b/packages/flutter_availability_data_interface/lib/src/utils/public.dart new file mode 100644 index 0000000..552cb07 --- /dev/null +++ b/packages/flutter_availability_data_interface/lib/src/utils/public.dart @@ -0,0 +1,14 @@ +/// Class that combines two dates +class DateRange { + /// Construct the DateRange + const DateRange({ + required this.start, + required this.end, + }); + + /// Start of the range + final DateTime start; + + /// End of the range + final DateTime end; +} diff --git a/packages/flutter_availability_data_interface/pubspec.yaml b/packages/flutter_availability_data_interface/pubspec.yaml index 41a7146..378b571 100644 --- a/packages/flutter_availability_data_interface/pubspec.yaml +++ b/packages/flutter_availability_data_interface/pubspec.yaml @@ -8,8 +8,12 @@ environment: sdk: ">=3.4.3 <4.0.0" flutter: ">=1.17.0" +dependencies: + rxdart: ^0.27.0 + dev_dependencies: test: ^1.16.0 + mocktail: ^1.0.4 flutter_iconica_analysis: git: url: https://github.com/Iconica-Development/flutter_iconica_analysis diff --git a/packages/flutter_availability_data_interface/test/mocks.dart b/packages/flutter_availability_data_interface/test/mocks.dart new file mode 100644 index 0000000..f73eaad --- /dev/null +++ b/packages/flutter_availability_data_interface/test/mocks.dart @@ -0,0 +1,8 @@ +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; +import "package:mocktail/mocktail.dart"; + +class DataInterfaceMock extends Mock implements AvailabilityDataInterface {} + +class MockTemplate extends Mock implements AvailabilityTemplateModel {} + +class MockAvailability extends Mock implements AvailabilityModel {} diff --git a/packages/flutter_availability/test/service/availability_service_test.dart b/packages/flutter_availability_data_interface/test/service/availability_service_test.dart similarity index 95% rename from packages/flutter_availability/test/service/availability_service_test.dart rename to packages/flutter_availability_data_interface/test/service/availability_service_test.dart index 43b9266..d10c376 100644 --- a/packages/flutter_availability/test/service/availability_service_test.dart +++ b/packages/flutter_availability_data_interface/test/service/availability_service_test.dart @@ -1,6 +1,6 @@ -import "package:flutter_availability/src/service/availability_service.dart"; -import "package:flutter_test/flutter_test.dart"; +import "package:flutter_availability_data_interface/src/service/availability_service.dart"; import "package:mocktail/mocktail.dart"; +import "package:test/test.dart"; import "../mocks.dart";