mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-19 13:13:44 +02:00
fix: improve template deviation logic and remove it from the flutter_availability UI files
This commit is contained in:
parent
1671c90a78
commit
ea6fbc4668
7 changed files with 519 additions and 185 deletions
|
@ -240,7 +240,7 @@ class AvailabilityViewModel {
|
||||||
var startDate = DateTime(0, 0, 0, startTime!.hour, startTime!.minute);
|
var startDate = DateTime(0, 0, 0, startTime!.hour, startTime!.minute);
|
||||||
var endDate = DateTime(0, 0, 0, endTime!.hour, endTime!.minute);
|
var endDate = DateTime(0, 0, 0, endTime!.hour, endTime!.minute);
|
||||||
|
|
||||||
return template.availabilityDeviatesFromTemplate(
|
return template.availabilityTimeDeviatesFromTemplate(
|
||||||
availability,
|
availability,
|
||||||
startDate,
|
startDate,
|
||||||
endDate,
|
endDate,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/flutter_availability.dart";
|
import "package:flutter_availability/flutter_availability.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/calendar_grid.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";
|
import "package:flutter_availability/src/util/scope.dart";
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -170,11 +169,21 @@ List<CalendarDay> _mapAvailabilitiesToCalendarDays(
|
||||||
) =>
|
) =>
|
||||||
availabilitySnapshot.data?.map(
|
availabilitySnapshot.data?.map(
|
||||||
(availability) {
|
(availability) {
|
||||||
var templateIsDeviated = availability.template != null &&
|
var availabilityModel = availability.availabilityModel;
|
||||||
isTemplateDeviated(
|
var templateTimeIsDeviated =
|
||||||
availability.availabilityModel,
|
availability.template?.availabilityTimeDeviatesFromTemplate(
|
||||||
availability.template!,
|
availabilityModel,
|
||||||
);
|
availabilityModel.startDate,
|
||||||
|
availabilityModel.endDate,
|
||||||
|
) ??
|
||||||
|
false;
|
||||||
|
var templateBreaksAreDeviated =
|
||||||
|
availability.template?.availabilityBreaksDeviatesFromTemplate(
|
||||||
|
availabilityModel,
|
||||||
|
) ??
|
||||||
|
false;
|
||||||
|
var templateIsDeviated =
|
||||||
|
templateTimeIsDeviated || templateBreaksAreDeviated;
|
||||||
return CalendarDay(
|
return CalendarDay(
|
||||||
date: DateUtils.dateOnly(availability.availabilityModel.startDate),
|
date: DateUtils.dateOnly(availability.availabilityModel.startDate),
|
||||||
color: availability.template != null
|
color: availability.template != null
|
||||||
|
|
|
@ -48,6 +48,7 @@ class _TemplateLegendState extends State<TemplateLegend> {
|
||||||
false;
|
false;
|
||||||
|
|
||||||
var templatesVisible = templatesAvailable && _templateDrawerOpen;
|
var templatesVisible = templatesAvailable && _templateDrawerOpen;
|
||||||
|
|
||||||
if (!templatesAvailable &&
|
if (!templatesAvailable &&
|
||||||
!featureSet.require(AvailabilityFeature.templates)) {
|
!featureSet.require(AvailabilityFeature.templates)) {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
|
@ -193,14 +194,12 @@ class _TemplateLegendState extends State<TemplateLegend> {
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
if (templatesLoading) ...[
|
if (templatesLoading) ...[
|
||||||
options.loadingIndicatorBuilder(context),
|
options.loadingIndicatorBuilder(context),
|
||||||
] else ...[
|
] else if (templates.isEmpty) ...[
|
||||||
if (templates.isEmpty) ...[
|
|
||||||
createNewTemplateButton,
|
createNewTemplateButton,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
import "package:flutter_availability/src/util/utils.dart";
|
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
|
||||||
|
|
||||||
/// Determines if the availability is deviated from the template that it is
|
|
||||||
/// based on
|
|
||||||
bool isTemplateDeviated(
|
|
||||||
AvailabilityModel availability,
|
|
||||||
AvailabilityTemplateModel template,
|
|
||||||
) {
|
|
||||||
var dayOfWeek = availability.startDate.weekday;
|
|
||||||
var templateStartDate =
|
|
||||||
template.getStartTimeForDayOfWeek(WeekDay.values[dayOfWeek - 1]);
|
|
||||||
var templateEndDate =
|
|
||||||
template.getEndTimeForDayOfWeek(WeekDay.values[dayOfWeek - 1]);
|
|
||||||
|
|
||||||
if (templateStartDate == null || templateEndDate == null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var templateIsDeviated =
|
|
||||||
!isAtSameTime(availability.startDate, templateStartDate) ||
|
|
||||||
!isAtSameTime(availability.endDate, templateEndDate);
|
|
||||||
return templateIsDeviated;
|
|
||||||
}
|
|
|
@ -1,143 +0,0 @@
|
||||||
import "package:flutter_availability/src/util/availability_deviation.dart";
|
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
|
||||||
import "package:flutter_test/flutter_test.dart";
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
group("isTemplateDeviated", () {
|
|
||||||
group("day templates", () {
|
|
||||||
test("returns false when availability matches the day template", () {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endDate: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Day Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.day,
|
|
||||||
templateData: DayTemplateData(
|
|
||||||
startTime: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endTime: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isFalse);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("returns true when availability does not match the day template",
|
|
||||||
() {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 9, 10, 0),
|
|
||||||
endDate: DateTime(2023, 7, 9, 18, 0),
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Day Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.day,
|
|
||||||
templateData: DayTemplateData(
|
|
||||||
startTime: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endTime: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isTrue);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
group("week templates", () {
|
|
||||||
test("returns false when availability matches the week template", () {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endDate: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Week Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.week,
|
|
||||||
templateData: WeekTemplateData.forDays(
|
|
||||||
sunday: DayTemplateData(
|
|
||||||
startTime: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endTime: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isFalse);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("returns true when availability does not match the week template",
|
|
||||||
() {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 9, 10, 0), // sunday
|
|
||||||
endDate: DateTime(2023, 7, 9, 18, 0), // sunday
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Week Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.week,
|
|
||||||
templateData: WeekTemplateData.forDays(
|
|
||||||
sunday: DayTemplateData(
|
|
||||||
startTime: DateTime(2023, 7, 9, 9, 0),
|
|
||||||
endTime: DateTime(2023, 7, 9, 17, 0),
|
|
||||||
breaks: [],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isTrue);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(
|
|
||||||
"returns true when the template is missing the "
|
|
||||||
"day of the availability", () {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 10, 10, 0), // monday
|
|
||||||
endDate: DateTime(2023, 7, 10, 18, 0), // monday
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = const AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Week Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.week,
|
|
||||||
templateData: WeekTemplateData(data: {}),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isTrue);
|
|
||||||
});
|
|
||||||
|
|
||||||
test("returns true when the template is fully null", () {
|
|
||||||
var availability = AvailabilityModel(
|
|
||||||
userId: "user1",
|
|
||||||
startDate: DateTime(2023, 7, 10, 10, 0),
|
|
||||||
endDate: DateTime(2023, 7, 10, 18, 0),
|
|
||||||
breaks: [],
|
|
||||||
);
|
|
||||||
var template = const AvailabilityTemplateModel(
|
|
||||||
userId: "user1",
|
|
||||||
name: "Week Template",
|
|
||||||
color: 0,
|
|
||||||
templateType: AvailabilityTemplateType.week,
|
|
||||||
templateData: WeekTemplateData(data: {}),
|
|
||||||
);
|
|
||||||
var result = isTemplateDeviated(availability, template);
|
|
||||||
expect(result, isTrue);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -123,12 +123,18 @@ class AvailabilityTemplateModel {
|
||||||
|
|
||||||
/// check if an availability's day corresponds to the template with the given
|
/// check if an availability's day corresponds to the template with the given
|
||||||
/// [availability] and [start] and [end] dates
|
/// [availability] and [start] and [end] dates
|
||||||
bool availabilityDeviatesFromTemplate(
|
bool availabilityTimeDeviatesFromTemplate(
|
||||||
AvailabilityModel availability,
|
AvailabilityModel availability,
|
||||||
DateTime start,
|
DateTime start,
|
||||||
DateTime end,
|
DateTime end,
|
||||||
) =>
|
) =>
|
||||||
templateData.availabilityDeviates(availability, start, end);
|
templateData.availabilityTimeDeviates(availability, start, end);
|
||||||
|
|
||||||
|
/// check if an availability's breaks correspond to the template
|
||||||
|
bool availabilityBreaksDeviatesFromTemplate(
|
||||||
|
AvailabilityModel availability,
|
||||||
|
) =>
|
||||||
|
templateData.availabilityBreaksDeviates(availability);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used as the key for defining week-based templates
|
/// Used as the key for defining week-based templates
|
||||||
|
@ -198,12 +204,15 @@ abstract interface class TemplateData {
|
||||||
void validate();
|
void validate();
|
||||||
|
|
||||||
/// Check if an availability's day corresponds to the template with the given
|
/// Check if an availability's day corresponds to the template with the given
|
||||||
/// [availability] and [start] and [end] dates
|
/// [availability]
|
||||||
bool availabilityDeviates(
|
bool availabilityTimeDeviates(
|
||||||
AvailabilityModel availability,
|
AvailabilityModel availability,
|
||||||
DateTime start,
|
DateTime start,
|
||||||
DateTime end,
|
DateTime end,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/// Check if an availability's breaks correspond to the template
|
||||||
|
bool availabilityBreaksDeviates(AvailabilityModel availability);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A week based template data structure
|
/// A week based template data structure
|
||||||
|
@ -307,12 +316,12 @@ class WeekTemplateData implements TemplateData {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool availabilityDeviates(
|
bool availabilityTimeDeviates(
|
||||||
AvailabilityModel availability,
|
AvailabilityModel availability,
|
||||||
DateTime start,
|
DateTime start,
|
||||||
DateTime end,
|
DateTime end,
|
||||||
) {
|
) {
|
||||||
var dayOfWeek = WeekDay.values[availability.startDate.weekday];
|
var dayOfWeek = WeekDay.values[availability.startDate.weekday - 1];
|
||||||
var data = _data[dayOfWeek];
|
var data = _data[dayOfWeek];
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
// if the day of the week is not in the template, it deviates
|
// if the day of the week is not in the template, it deviates
|
||||||
|
@ -321,6 +330,17 @@ class WeekTemplateData implements TemplateData {
|
||||||
// compare the start and end with the template
|
// compare the start and end with the template
|
||||||
return !start.timeMatches(data.startTime) || !end.timeMatches(data.endTime);
|
return !start.timeMatches(data.startTime) || !end.timeMatches(data.endTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool availabilityBreaksDeviates(AvailabilityModel availability) {
|
||||||
|
var dayOfWeek = WeekDay.values[availability.startDate.weekday - 1];
|
||||||
|
var data = _data[dayOfWeek];
|
||||||
|
if (data == null) {
|
||||||
|
// if the day of the week is not in the template, it deviates
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return checkAvailabilityBreaksDeviates(data.breaks, availability.breaks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A day based template data structure
|
/// A day based template data structure
|
||||||
|
@ -452,12 +472,16 @@ class DayTemplateData implements TemplateData {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool availabilityDeviates(
|
bool availabilityTimeDeviates(
|
||||||
AvailabilityModel availability,
|
AvailabilityModel availability,
|
||||||
DateTime start,
|
DateTime start,
|
||||||
DateTime end,
|
DateTime end,
|
||||||
) =>
|
) =>
|
||||||
!start.timeMatches(startTime) || !end.timeMatches(endTime);
|
!start.timeMatches(startTime) || !end.timeMatches(endTime);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool availabilityBreaksDeviates(AvailabilityModel availability) =>
|
||||||
|
checkAvailabilityBreaksDeviates(breaks, availability.breaks);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<DateTime> _getDatesBetween(DateTime startDate, DateTime endDate) {
|
List<DateTime> _getDatesBetween(DateTime startDate, DateTime endDate) {
|
||||||
|
@ -473,3 +497,20 @@ extension _MergeTime on DateTime {
|
||||||
DateTime mergeTime(DateTime time) =>
|
DateTime mergeTime(DateTime time) =>
|
||||||
DateTime(year, month, day, time.hour, time.minute);
|
DateTime(year, month, day, time.hour, time.minute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if the availability breaks deviate from the template breaks
|
||||||
|
/// If there are any differences in the breaks, this will return true
|
||||||
|
/// If all the breaks are the same, this will return false
|
||||||
|
bool checkAvailabilityBreaksDeviates(
|
||||||
|
List<AvailabilityBreakModel> templateBreaks,
|
||||||
|
List<AvailabilityBreakModel> availabilityBreaks,
|
||||||
|
) =>
|
||||||
|
templateBreaks.length != availabilityBreaks.length ||
|
||||||
|
templateBreaks.any(
|
||||||
|
(templateBreak) => !availabilityBreaks.any(
|
||||||
|
(breakData) =>
|
||||||
|
breakData.startTime.timeMatches(templateBreak.startTime) &&
|
||||||
|
breakData.endTime.timeMatches(templateBreak.endTime) &&
|
||||||
|
breakData.submittedDuration == templateBreak.submittedDuration,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
|
@ -182,6 +182,458 @@ void main() {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group("availabilityTimeDeviates", () {
|
||||||
|
group("day templates", () {
|
||||||
|
test("returns false when availability matches the day template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns true when availability does not match the day template",
|
||||||
|
() {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 10, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 18, 0),
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group("week templates", () {
|
||||||
|
test("returns false when availability matches the week template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns true when availability does not match the week template",
|
||||||
|
() {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 10, 0), // sunday
|
||||||
|
endDate: DateTime(2023, 7, 9, 18, 0), // sunday
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when the template is missing the "
|
||||||
|
"day of the availability", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 10, 10, 0), // monday
|
||||||
|
endDate: DateTime(2023, 7, 10, 18, 0), // monday
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = const AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData(data: {}),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns true when the template is fully null", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 10, 10, 0),
|
||||||
|
endDate: DateTime(2023, 7, 10, 18, 0),
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = const AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData(data: {}),
|
||||||
|
);
|
||||||
|
var result = template.availabilityTimeDeviatesFromTemplate(
|
||||||
|
availability,
|
||||||
|
availability.startDate,
|
||||||
|
availability.endDate,
|
||||||
|
);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group("availabilityBreaksDeviates", () {
|
||||||
|
group("day templates", () {
|
||||||
|
test("returns false when availability matches the day template breaks",
|
||||||
|
() {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability breaks do not match the day template",
|
||||||
|
() {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability has more breaks than "
|
||||||
|
"the day template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 15, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 15, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability has fewer breaks than "
|
||||||
|
"the day template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Day Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.day,
|
||||||
|
templateData: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
group("week templates", () {
|
||||||
|
test("returns false when availability matches the week template breaks",
|
||||||
|
() {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0), // Sunday
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0), // Sunday
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability breaks do not match the "
|
||||||
|
"week template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0), // Sunday
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0), // Sunday
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
endTime: DateTime(2023, 7, 9, 13, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability has more breaks than the "
|
||||||
|
"week template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0), // Sunday
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0), // Sunday
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 15, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 15, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"returns true when availability has fewer breaks than "
|
||||||
|
"the week template", () {
|
||||||
|
var availability = AvailabilityModel(
|
||||||
|
userId: "user1",
|
||||||
|
startDate: DateTime(2023, 7, 9, 9, 0), // Sunday
|
||||||
|
endDate: DateTime(2023, 7, 9, 17, 0), // Sunday
|
||||||
|
breaks: [],
|
||||||
|
);
|
||||||
|
var template = AvailabilityTemplateModel(
|
||||||
|
userId: "user1",
|
||||||
|
name: "Week Template",
|
||||||
|
color: 0,
|
||||||
|
templateType: AvailabilityTemplateType.week,
|
||||||
|
templateData: WeekTemplateData.forDays(
|
||||||
|
sunday: DayTemplateData(
|
||||||
|
startTime: DateTime(2023, 7, 9, 9, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 17, 0),
|
||||||
|
breaks: [
|
||||||
|
AvailabilityBreakModel(
|
||||||
|
startTime: DateTime(2023, 7, 9, 12, 0),
|
||||||
|
endTime: DateTime(2023, 7, 9, 12, 30),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
var result =
|
||||||
|
template.availabilityBreaksDeviatesFromTemplate(availability);
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue