The purpose of this technical project is to showcase my test driven development capabilities
Project by Ikramul Hasan
To run it manually in you local machine, follow the steps below:
Manual build process
- Clone the repository
git clone https://github.com/ikramhasan/absence-manager.git- Navigate to the project directory
cd absence-manager- Install the dependencies
flutter pub get- Run the project
flutter run- I want to see a list of absences including the names of the employees.
- I want to see the first 10 absences, with the ability to paginate.
- I want to see a total number of absences.
- For each absence I want to see:
- Member name
- Type of absence
- Period
- Member note (when available)
- Status (can be 'Requested', 'Confirmed' or 'Rejected')
- Admitter note (when available)
- I want to filter absences by type.
- I want to filter absences by date.
- I want to see a loading state until the list is available.
- I want to see an error state if the list is unavailable.
- I want to see an empty state if there are no results.
- I can generate an iCal file and import it into outlook.
- Dark Mode, and Light Mode support
- Mobile and desktop responsive design
- Settings page
- Localization support (English and German)
- Haptic feedback
Almost all the lines of this project has been tested with unit and widget tests. The project has 98% test coverage. Here's the test coverage report:
Verify
You can verify the test coverage by
-
Using the lcov.info file generated by flutter, or
-
By running the following command:
flutter test --coverageand navigating to the generated /coverage directory.
There are two types of pagination implemented in the project:
-
Infinite Scroll Pagination: The absence list is paginated with infinite scroll. When the user reaches the end of the list, the next page is loaded automatically. This pagination will show up in mobile devices.
-
Manual Pagination: The user can manually change the page number from the settings page. This pagination will show up in desktop devices.
The codebase goes through a very strict linting process. You can find all the custom linting rules in the analysis_options.yaml file.
All the public functions, classes, variables, and enums are documented with Dartdoc.
The project is set up with Github Actions for CI/CD. The workflow is defined in the .github/workflows/gh-pages.yaml file.
- Framework: Flutter
- State Management: Flutter Bloc
- Persistance: Hive
