Skip to content

Commit

Permalink
Bz/task/add unit tests (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
banghuazhao authored Sep 28, 2024
1 parent 75c90ec commit 9c14443
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 3 deletions.
33 changes: 33 additions & 0 deletions .github/workflows/flutter_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Flutter Test

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
test:
name: Run Flutter Tests
runs-on: ubuntu-latest

steps:
# Checkout the repository
- name: Checkout Repository
uses: actions/checkout@v3

# Set up Flutter with a specified version
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.19.0' # Specify Flutter version >= 3.19.0

# Run flutter pub get to fetch dependencies
- name: Install Dependencies
run: flutter pub get

# Run flutter tests
- name: Run Tests
run: flutter test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,5 @@ ios/fastlane/.env
ios/fastlane/report.xml

lib/home/Chat/chat_config.dart

coverage
6 changes: 3 additions & 3 deletions lib/home/more/feature_flag_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class FeatureFlagProvider extends ChangeNotifier {
};

FeatureFlagProvider() {
_loadFeatureFlags();
loadFeatureFlags();
}

bool getFeatureFlag(String feature) {
Expand All @@ -18,15 +18,15 @@ class FeatureFlagProvider extends ChangeNotifier {
return _featureFlags;
}

Future<void> _loadFeatureFlags() async {
Future<void> loadFeatureFlags() async {
final prefs = await SharedPreferences.getInstance();
_featureFlags.forEach((key, value) {
_featureFlags[key] = prefs.getBool(key) ?? false;
});
notifyListeners();
}

void toggleFeatureFlag(String feature) async {
Future<void> toggleFeatureFlag(String feature) async {
final prefs = await SharedPreferences.getInstance();
_featureFlags[feature] = !_featureFlags[feature]!;
prefs.setBool(feature, _featureFlags[feature]!);
Expand Down
96 changes: 96 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev"
source: hosted
version: "67.0.0"
amplify_analytics_pinpoint:
dependency: "direct main"
description:
Expand Down Expand Up @@ -81,6 +89,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.4"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev"
source: hosted
version: "6.4.1"
app_tracking_transparency:
dependency: "direct main"
description:
Expand Down Expand Up @@ -137,6 +153,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.1"
build:
dependency: transitive
description:
name: build
sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
built_collection:
dependency: transitive
description:
Expand Down Expand Up @@ -169,6 +193,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
code_builder:
dependency: transitive
description:
name: code_builder
sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
url: "https://pub.dev"
source: hosted
version: "4.10.0"
collection:
dependency: transitive
description:
Expand Down Expand Up @@ -209,6 +241,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_style:
dependency: transitive
description:
name: dart_style
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.dev"
source: hosted
version: "2.3.6"
device_info:
dependency: "direct main"
description:
Expand Down Expand Up @@ -365,6 +405,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "8.2.5"
glob:
dependency: transitive
description:
name: glob
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
graphs:
dependency: transitive
description:
Expand Down Expand Up @@ -525,6 +573,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.5"
mockito:
dependency: "direct dev"
description:
name: mockito
sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917"
url: "https://pub.dev"
source: hosted
version: "5.4.4"
nested:
dependency: transitive
description:
Expand All @@ -549,6 +605,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.1"
package_config:
dependency: transitive
description:
name: package_config
sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_info_plus:
dependency: "direct main"
description:
Expand Down Expand Up @@ -661,6 +725,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.2"
pub_semver:
dependency: transitive
description:
name: pub_semver
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
retry:
dependency: transitive
description:
Expand Down Expand Up @@ -762,6 +834,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.6.3"
source_gen:
dependency: transitive
description:
name: source_gen
sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
source_span:
dependency: transitive
description:
Expand Down Expand Up @@ -962,6 +1042,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "13.0.0"
watcher:
dependency: transitive
description:
name: watcher
sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
web:
dependency: transitive
description:
Expand Down Expand Up @@ -1010,6 +1098,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.5.0"
yaml:
dependency: transitive
description:
name: yaml
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.3.0 <4.0.0"
flutter: ">=3.19.0"
2 changes: 2 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ dependencies:
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ^5.0.17
shared_preferences: any
# flutter_native_splash: ^2.3.11
# flutter_launcher_icons: ^0.13.1

Expand Down
34 changes: 34 additions & 0 deletions test/feature_flag_provider_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:mockito/mockito.dart';
import 'package:swiftcomp/home/more/feature_flag_provider.dart';

void main() {
group('FeatureFlagProvider Tests', () {
late FeatureFlagProvider featureFlagProvider;

setUp(() async {
SharedPreferences.setMockInitialValues({}); // Initialize with no values
featureFlagProvider = FeatureFlagProvider();
await featureFlagProvider.loadFeatureFlags();
});

test('Initial feature flag values should be false', () async {
expect(featureFlagProvider.getFeatureFlag('Chat'), false);
});

test('Feature flag toggles and persists the new value', () async {
await featureFlagProvider.toggleFeatureFlag('Chat');

expect(featureFlagProvider.getFeatureFlag('Chat'), true);
});

test('Loading feature flags from SharedPreferences', () async {
SharedPreferences.setMockInitialValues({'Chat': true});
featureFlagProvider = FeatureFlagProvider();
await featureFlagProvider.loadFeatureFlags();

expect(featureFlagProvider.getFeatureFlag('Chat'), true);
});
});
}

0 comments on commit 9c14443

Please sign in to comment.