From be5eb3fd13e896f08696f24c35e1738459871e26 Mon Sep 17 00:00:00 2001 From: Dr-Blank <64108942+Dr-Blank@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:32:05 -0400 Subject: [PATCH] test: add TimeOfDay extension tests and enable test execution in CI --- .github/workflows/flutter_test.yaml | 4 +- test/shared/extensions/time_of_day_test.dart | 136 +++++++++++++++++++ 2 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 test/shared/extensions/time_of_day_test.dart diff --git a/.github/workflows/flutter_test.yaml b/.github/workflows/flutter_test.yaml index 245a489..56b3947 100644 --- a/.github/workflows/flutter_test.yaml +++ b/.github/workflows/flutter_test.yaml @@ -40,8 +40,8 @@ jobs: - name: Install dependencies run: flutter pub get - # - name: Run tests - # run: flutter test + - name: Run tests + run: flutter test - name: Build APK run: flutter build apk --release diff --git a/test/shared/extensions/time_of_day_test.dart b/test/shared/extensions/time_of_day_test.dart new file mode 100644 index 0000000..131ba6d --- /dev/null +++ b/test/shared/extensions/time_of_day_test.dart @@ -0,0 +1,136 @@ +// ignore_for_file: constant_identifier_names + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:vaani/shared/extensions/time_of_day.dart'; + +const TIME_08_30_AM = TimeOfDay(hour: 8, minute: 30); +const TIME_09_00_AM = TimeOfDay(hour: 9, minute: 0); +const TIME_10_30_AM = TimeOfDay(hour: 10, minute: 30); +const TIME_11_00_AM = TimeOfDay(hour: 11, minute: 0); +const TIME_12_00_PM = TimeOfDay(hour: 12, minute: 0); +const TIME_10_00_PM = TimeOfDay(hour: 22, minute: 0); +void main() { + group('ToTimeOfDay extension', () { + test('Duration to TimeOfDay conversion', () { + final duration = Duration(hours: 10, minutes: 30); + expect(duration.toTimeOfDay(), TIME_10_30_AM); + }); + + test('Duration to TimeOfDay conversion with more than 24 hours', () { + final duration = Duration(hours: 32, minutes: 30); + expect(duration.toTimeOfDay(), TIME_08_30_AM); + }); + }); + + group('ToDuration extension', () { + test('TimeOfDay to Duration conversion', () { + final duration = TIME_10_30_AM.toDuration(); + expect(duration.inHours, 10); + expect(duration.inMinutes % 60, 30); + }); + }); + + group('Compare TimeOfDay', () { + test('compareTo method', () { + expect(TIME_10_30_AM.compareTo(TIME_12_00_PM), -1); + expect(TIME_12_00_PM.compareTo(TIME_10_30_AM), 1); + expect(TIME_10_30_AM.compareTo(TIME_10_30_AM), 0); + }); + + test('operator <', () { + expect(TIME_10_30_AM < TIME_12_00_PM, true); + expect(TIME_12_00_PM < TIME_10_30_AM, false); + }); + + test('operator >', () { + expect(TIME_10_30_AM > TIME_10_00_PM, false); + expect(TIME_10_00_PM > TIME_10_30_AM, true); + }); + + test('operator <=', () { + expect(TIME_10_30_AM <= TIME_12_00_PM, true); + expect(TIME_12_00_PM <= TIME_10_30_AM, false); + expect(TIME_10_30_AM <= TIME_10_30_AM, true); + }); + + test('operator >=', () { + expect(TIME_10_30_AM >= TIME_10_00_PM, false); + expect(TIME_10_00_PM >= TIME_10_30_AM, true); + expect(TIME_10_30_AM >= TIME_10_30_AM, true); + }); + }); + + group('isBetween method', () { + void testIsBetween( + TimeOfDay time, + TimeOfDay start, + TimeOfDay end, + bool expectedResult, + ) { + test('TimeOfDay $time is between $start and $end', () { + expect(time.isBetween(start, end), expectedResult); + }); + } + + final testCases = [ + ( + time: TIME_10_30_AM, + start: TIME_09_00_AM, + end: TIME_11_00_AM, + expectedResult: true + ), + ( + time: TIME_08_30_AM, + start: TIME_09_00_AM, + end: TIME_11_00_AM, + expectedResult: false + ), + ( + time: TIME_10_30_AM, + start: TIME_11_00_AM, + end: TIME_09_00_AM, + expectedResult: false + ), + ( + time: TIME_08_30_AM, + start: TIME_10_00_PM, + end: TIME_09_00_AM, + expectedResult: true + ), + ( + time: TIME_12_00_PM, + start: TIME_11_00_AM, + end: TIME_09_00_AM, + expectedResult: true + ), + ( + time: TIME_10_00_PM, + start: TIME_11_00_AM, + end: TIME_09_00_AM, + expectedResult: true + ), + ( + time: TIME_09_00_AM, + start: TIME_09_00_AM, + end: TIME_09_00_AM, + expectedResult: true + ), + ( + time: TIME_10_00_PM, + start: TIME_09_00_AM, + end: TIME_09_00_AM, + expectedResult: false + ), + ]; + + for (var testCase in testCases) { + testIsBetween( + testCase.time, + testCase.start, + testCase.end, + testCase.expectedResult, + ); + } + }); +}