A reactive, modern Notes Android application built with SQLDelight and Clean Architecture principles.
Notsi follows Modern Android Development (MAD) practices and uses MVVM with Clean Architecture.
- Language: Kotlin
- Local Database: SQLDelight - Type-safe SQL for Kotlin.
- Dependency Injection: Hilt
- Asynchronous Programming: Coroutines & Flow
- Jetpack Libraries:
The project is heavily tested across all layers to ensure stability and correctness:
- ViewModel Tests: Validates UI logic and state using
InstantTaskExecutorRule. - Data Source Tests: In-memory integration tests for SQLDelight queries using Robolectric.
- Mappers: Ensures data conversion between layers is accurate.
- Libraries:
- JUnit4 - The fundamental testing framework.
- Truth - Fluent assertions for Kotlin/Java.
- Turbine - A small testing library for Kotlin Flow.
- Robolectric - Industry-standard unit testing framework for Android.
- Mockito - Mocking framework for unit tests.
- Fragment Isolation Tests: Testing UI components in isolation using a custom Hilt container.
- End-to-End (E2E) Tests: Full user flow verification from adding a note to seeing it in the list.
- Libraries:
- Espresso - Native UI testing framework.
- Hilt Testing - For dependency injection in instrumented tests.
- Mockito-Android - Mockito support for Android instrumented tests.
The project uses GitHub Actions for automation:
- Continuous Integration: Every pull request/manual trigger triggers a full test suite run (
./gradlew testDebugUnitTest). - Continuous Deployment: On successful build and test completion, the debug APK is automatically distributed to Firebase App Distribution for testers.
