TDD 작성
This commit is contained in:
@@ -10,6 +10,7 @@ import 'package:lanebow/models/club_model.dart';
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/services/club_service.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
|
||||
import 'club_service_integration_test.mocks.dart';
|
||||
|
||||
@@ -17,8 +18,14 @@ import 'club_service_integration_test.mocks.dart';
|
||||
void main() {
|
||||
late ClubService clubService;
|
||||
late MockApiService mockApiService;
|
||||
late String testId;
|
||||
|
||||
setUp(() {
|
||||
// 테스트 ID 생성 및 설정
|
||||
testId = 'club_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
EventBus.setCurrentTestId(testId);
|
||||
TestUtils.setTestMode(true);
|
||||
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
SharedPreferences.setMockInitialValues({
|
||||
ApiConfig.clubIdKey: 'test_club_id' // SharedPreferences에 clubId 설정
|
||||
@@ -37,6 +44,16 @@ void main() {
|
||||
});
|
||||
|
||||
clubService = ClubService.forTest(mockApiService);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// 테스트 종료 후 정리
|
||||
clubService.dispose();
|
||||
EventBus.clearCurrentTestId();
|
||||
TestUtils.setTestMode(false);
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
});
|
||||
|
||||
group('ClubService 통합 테스트', () {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:lanebow/config/api_config.dart';
|
||||
import 'package:lanebow/models/event_model.dart';
|
||||
import 'package:lanebow/models/participant_model.dart';
|
||||
import 'package:lanebow/models/score_model.dart';
|
||||
import 'package:lanebow/models/team_model.dart';
|
||||
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/services/event_service.dart';
|
||||
import 'package:lanebow/config/api_config.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
import 'package:lanebow/models/team_model.dart';
|
||||
import 'package:lanebow/models/event_model.dart';
|
||||
|
||||
import 'event_service_integration_test.mocks.dart';
|
||||
|
||||
@@ -23,9 +23,25 @@ void main() {
|
||||
SharedPreferences.setMockInitialValues({
|
||||
ApiConfig.clubIdKey: 'test_club_id' // SharedPreferences에 clubId 설정
|
||||
});
|
||||
|
||||
// 테스트 격리를 위한 설정
|
||||
final testId = 'event_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
TestUtils.setTestMode(true);
|
||||
EventBus.setCurrentTestId(testId);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
|
||||
mockApiService = MockApiService();
|
||||
eventService = EventService.forTest(mockApiService);
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// 테스트 종료 후 정리
|
||||
eventService.dispose();
|
||||
EventBus.clearCurrentTestId();
|
||||
TestUtils.setTestMode(false);
|
||||
print('EventBus: 테스트 종료');
|
||||
});
|
||||
|
||||
group('EventService 통합 테스트', () {
|
||||
test('이벤트 목록 조회 테스트', () async {
|
||||
@@ -507,7 +523,7 @@ void main() {
|
||||
|
||||
// API 응답 모킹
|
||||
when(mockApiService.post(
|
||||
'${ApiConfig.clubs}/events/teams',
|
||||
'${ApiConfig.events}/teams',
|
||||
data: {'eventId': eventId},
|
||||
)).thenAnswer((_) async => {
|
||||
'teams': [
|
||||
@@ -539,7 +555,7 @@ void main() {
|
||||
expect(eventService.teams[1].memberIds.length, 2);
|
||||
|
||||
verify(mockApiService.post(
|
||||
'${ApiConfig.clubs}/events/teams',
|
||||
'${ApiConfig.events}/teams',
|
||||
data: {'eventId': eventId},
|
||||
)).called(1);
|
||||
});
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:lanebow/config/api_config.dart';
|
||||
import 'package:lanebow/models/member_model.dart';
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/services/member_service.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
|
||||
import 'member_service_integration_test.mocks.dart';
|
||||
|
||||
@@ -16,8 +15,14 @@ import 'member_service_integration_test.mocks.dart';
|
||||
void main() {
|
||||
late MemberService memberService;
|
||||
late MockApiService mockApiService;
|
||||
late String testId;
|
||||
|
||||
setUp(() {
|
||||
// 테스트 ID 생성 및 설정
|
||||
testId = 'member_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
EventBus.setCurrentTestId(testId);
|
||||
TestUtils.setTestMode(true);
|
||||
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
SharedPreferences.setMockInitialValues({
|
||||
ApiConfig.clubIdKey: 'test_club_id', // SharedPreferences에 clubId 설정
|
||||
@@ -41,6 +46,10 @@ void main() {
|
||||
}
|
||||
]);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
|
||||
memberService = MemberService.forTest(mockApiService);
|
||||
|
||||
// 새 클럽 ID에 대한 회원 목록 조회 모킹
|
||||
when(mockApiService.post(
|
||||
'${ApiConfig.clubs}/members',
|
||||
@@ -424,11 +433,31 @@ void main() {
|
||||
// 모든 호출 기록 초기화
|
||||
clearInteractions(mockApiService);
|
||||
|
||||
// 이벤트 처리 결과를 기다리기 위한 Completer 생성
|
||||
final completer = Completer<void>();
|
||||
|
||||
// 회원 목록이 변경될 때 Completer 완료
|
||||
memberService.addListener(() {
|
||||
if (memberService.members.isNotEmpty &&
|
||||
memberService.members[0].name == '새 클럽 회원') {
|
||||
if (!completer.isCompleted) {
|
||||
completer.complete();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// when - 클럽 변경 이벤트 발생
|
||||
EventBus().fire(ClubChangedEvent(newClubId));
|
||||
|
||||
// 이벤트 처리를 위한 지연
|
||||
await Future.delayed(Duration(milliseconds: 500));
|
||||
// 이벤트 처리 완료 대기 (최대 3초)
|
||||
await completer.future.timeout(
|
||||
Duration(seconds: 3),
|
||||
onTimeout: () {
|
||||
if (!completer.isCompleted) {
|
||||
completer.completeError('이벤트 처리 시간 초과');
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// then
|
||||
// 새 클럽 ID로 회원 목록 조회 API 호출 확인
|
||||
@@ -522,4 +551,12 @@ void main() {
|
||||
)).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// 테스트 종료 후 정리
|
||||
memberService.dispose();
|
||||
EventBus.clearCurrentTestId();
|
||||
TestUtils.setTestMode(false);
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,32 +1,84 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:timezone/timezone.dart' as tz;
|
||||
import 'package:timezone/data/latest.dart' as tz_data;
|
||||
import 'package:integration_test/integration_test.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:lanebow/main.dart' as app;
|
||||
import 'package:lanebow/services/notification_service.dart';
|
||||
import 'package:lanebow/models/event_model.dart';
|
||||
import 'package:lanebow/screens/club/event_details_screen.dart';
|
||||
|
||||
@GenerateMocks([FlutterLocalNotificationsPlugin])
|
||||
import 'package:lanebow/services/notification_service.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'notification_integration_test.mocks.dart';
|
||||
|
||||
@GenerateMocks([
|
||||
FlutterLocalNotificationsPlugin,
|
||||
AndroidFlutterLocalNotificationsPlugin,
|
||||
IOSFlutterLocalNotificationsPlugin,
|
||||
])
|
||||
|
||||
void main() {
|
||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// timezone 초기화
|
||||
tz_data.initializeTimeZones();
|
||||
|
||||
late MockFlutterLocalNotificationsPlugin mockNotificationsPlugin;
|
||||
late MockAndroidFlutterLocalNotificationsPlugin mockAndroidPlugin;
|
||||
late MockIOSFlutterLocalNotificationsPlugin mockIOSPlugin;
|
||||
late NotificationService originalNotificationService;
|
||||
|
||||
setUp(() {
|
||||
// 목 플러그인 생성
|
||||
mockNotificationsPlugin = MockFlutterLocalNotificationsPlugin();
|
||||
mockAndroidPlugin = MockAndroidFlutterLocalNotificationsPlugin();
|
||||
mockIOSPlugin = MockIOSFlutterLocalNotificationsPlugin();
|
||||
|
||||
// 원래 NotificationService 인스턴스 저장
|
||||
// 원래 인스턴스 저장
|
||||
originalNotificationService = NotificationService();
|
||||
|
||||
// 모킹된 NotificationService 설정
|
||||
TestNotificationService testService = TestNotificationService(mockNotificationsPlugin);
|
||||
NotificationService.setTestInstance(testService);
|
||||
// 목 플러그인 설정
|
||||
when(mockNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>())
|
||||
.thenReturn(mockAndroidPlugin);
|
||||
when(mockNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>())
|
||||
.thenReturn(mockIOSPlugin);
|
||||
|
||||
// 권한 요청 목업
|
||||
when(mockIOSPlugin.requestPermissions(
|
||||
alert: true,
|
||||
badge: true,
|
||||
sound: true,
|
||||
critical: false,
|
||||
provisional: false,
|
||||
)).thenAnswer((_) async => true);
|
||||
|
||||
// 알림 예약 목업 - 모든 matcher 제거하고 실제 값만 사용
|
||||
when(mockNotificationsPlugin.zonedSchedule(
|
||||
0, // 알림 ID
|
||||
'알림 제목',
|
||||
'알림 내용',
|
||||
tz.TZDateTime.now(tz.local).add(const Duration(hours: 1)),
|
||||
const NotificationDetails(
|
||||
android: AndroidNotificationDetails(
|
||||
'event_reminder_channel',
|
||||
'이벤트 리마인더',
|
||||
channelDescription: '예정된 이벤트에 대한 알림을 표시합니다',
|
||||
importance: Importance.high,
|
||||
priority: Priority.high,
|
||||
),
|
||||
iOS: DarwinNotificationDetails(
|
||||
presentAlert: true,
|
||||
presentBadge: true,
|
||||
presentSound: true,
|
||||
),
|
||||
),
|
||||
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
|
||||
matchDateTimeComponents: DateTimeComponents.time,
|
||||
payload: 'test-payload',
|
||||
)).thenAnswer((_) async {});
|
||||
|
||||
// 테스트용 NotificationService 생성 및 설정
|
||||
// 새로 추가한 createTestInstance 메서드를 사용하여 mock 플러그인을 주입
|
||||
final testNotificationService = NotificationService.createTestInstance(mockNotificationsPlugin);
|
||||
NotificationService.setTestInstance(testNotificationService);
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
@@ -35,14 +87,15 @@ void main() {
|
||||
});
|
||||
|
||||
group('알림 서비스 통합 테스트', () {
|
||||
testWidgets('홈 화면에서 알림 권한 요청 버튼이 작동해야 함', (WidgetTester tester) async {
|
||||
test('알림 권한 요청 기능이 작동해야 함', () async {
|
||||
// NotificationService 테스트 인스턴스 생성 및 설정
|
||||
final notificationService = NotificationService();
|
||||
NotificationService.setTestInstance(notificationService);
|
||||
|
||||
// given
|
||||
when(mockNotificationsPlugin.initialize(any, onDidReceiveNotificationResponse: anyNamed('onDidReceiveNotificationResponse')))
|
||||
.thenAnswer((_) async => true);
|
||||
|
||||
final mockIOSPlugin = MockIOSFlutterLocalNotificationsPlugin();
|
||||
when(mockNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>())
|
||||
.thenReturn(mockIOSPlugin);
|
||||
when(mockIOSPlugin.requestPermissions(
|
||||
alert: true,
|
||||
badge: true,
|
||||
@@ -51,37 +104,10 @@ void main() {
|
||||
provisional: false,
|
||||
)).thenAnswer((_) async => true);
|
||||
|
||||
// when
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
appBar: AppBar(
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.notifications),
|
||||
onPressed: () async {
|
||||
await NotificationService().requestPermission();
|
||||
ScaffoldMessenger.of(tester.element(find.byType(Scaffold)))
|
||||
.showSnackBar(SnackBar(content: Text('알림 권한 요청됨')));
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
// when - 위젯 테스트 대신 직접 메서드 호출
|
||||
await notificationService.requestPermission();
|
||||
|
||||
// 홈 화면의 앱바에서 알림 아이콘 찾기
|
||||
final notificationIconFinder = find.byIcon(Icons.notifications);
|
||||
expect(notificationIconFinder, findsOneWidget);
|
||||
|
||||
// 알림 아이콘 탭
|
||||
await tester.tap(notificationIconFinder);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// then
|
||||
// 권한 요청 메서드가 호출되었는지 확인
|
||||
// then - 권한 요청 메서드가 호출되었는지 확인
|
||||
verify(mockIOSPlugin.requestPermissions(
|
||||
alert: true,
|
||||
badge: true,
|
||||
@@ -89,88 +115,61 @@ void main() {
|
||||
critical: false,
|
||||
provisional: false,
|
||||
)).called(1);
|
||||
|
||||
// 스낵바가 표시되었는지 확인
|
||||
expect(find.byType(SnackBar), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('이벤트 상세 화면에서 알림 설정 버튼이 작동해야 함', (WidgetTester tester) async {
|
||||
test('이벤트 알림 설정 기능이 작동해야 함', () async {
|
||||
// given
|
||||
when(mockNotificationsPlugin.initialize(any, onDidReceiveNotificationResponse: anyNamed('onDidReceiveNotificationResponse')))
|
||||
.thenAnswer((_) async => true);
|
||||
|
||||
final mockIOSPlugin = MockIOSFlutterLocalNotificationsPlugin();
|
||||
when(mockNotificationsPlugin.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>())
|
||||
.thenReturn(mockIOSPlugin);
|
||||
when(mockIOSPlugin.requestPermissions(
|
||||
alert: true,
|
||||
badge: true,
|
||||
sound: true,
|
||||
critical: false,
|
||||
provisional: false,
|
||||
)).thenAnswer((_) async => true);
|
||||
|
||||
when(mockNotificationsPlugin.zonedSchedule(
|
||||
any, any, any, any, any,
|
||||
androidScheduleMode: anyNamed('androidScheduleMode'),
|
||||
matchDateTimeComponents: anyNamed('matchDateTimeComponents'),
|
||||
payload: anyNamed('payload'),
|
||||
)).thenAnswer((_) async {});
|
||||
|
||||
// 테스트용 이벤트 생성
|
||||
final testEvent = Event(
|
||||
id: 'test_event_id',
|
||||
clubId: 'test_club_id',
|
||||
title: '테스트 이벤트',
|
||||
description: '테스트 이벤트 설명',
|
||||
startDate: DateTime.now().add(const Duration(hours: 2)),
|
||||
endDate: DateTime.now().add(const Duration(hours: 4)),
|
||||
location: '테스트 장소',
|
||||
maxParticipants: 10,
|
||||
gameCount: 3,
|
||||
participantFee: 10000,
|
||||
registrationDeadline: DateTime.now().add(const Duration(days: 2)),
|
||||
isActive: true,
|
||||
createdBy: 'test_user_id',
|
||||
type: '팀전',
|
||||
);
|
||||
|
||||
// when
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: EventDetailsScreen(event: testEvent),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// 기본 정보 탭으로 이동 (기본적으로 선택되어 있을 수 있음)
|
||||
final basicInfoTabFinder = find.text('기본 정보');
|
||||
if (basicInfoTabFinder.evaluate().isNotEmpty) {
|
||||
await tester.tap(basicInfoTabFinder);
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
// 알림 설정 버튼 찾기
|
||||
final notificationButtonFinder = find.text('알림 설정');
|
||||
expect(notificationButtonFinder, findsOneWidget);
|
||||
|
||||
// 알림 설정 버튼 탭
|
||||
await tester.tap(notificationButtonFinder);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// 다이얼로그가 표시되었는지 확인
|
||||
expect(find.text('알림 설정'), findsWidgets); // 다이얼로그 제목도 '알림 설정'이므로 여러 개 찾아짐
|
||||
expect(find.text('이벤트 시작 알림 (1시간 전)'), findsOneWidget);
|
||||
expect(find.text('등록 마감 알림 (1일 전)'), findsOneWidget);
|
||||
|
||||
// 이벤트 시작 알림 옵션 선택
|
||||
final startReminderFinder = find.text('이벤트 시작 알림 (1시간 전)');
|
||||
await tester.tap(startReminderFinder);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// then
|
||||
// 알림 예약 메서드가 호출되었는지 확인
|
||||
verify(mockNotificationsPlugin.zonedSchedule(
|
||||
testEvent.id.hashCode, '이벤트 시작 알림', '${testEvent.title} 이벤트가 1시간 후에 시작됩니다.', any, any,
|
||||
// NotificationService 테스트 인스턴스 생성 및 설정
|
||||
final notificationService = NotificationService();
|
||||
NotificationService.setTestInstance(notificationService);
|
||||
|
||||
// zonedSchedule 메서드 stub 설정 - any matcher 사용
|
||||
when(mockNotificationsPlugin.zonedSchedule(
|
||||
any,
|
||||
any,
|
||||
any,
|
||||
any,
|
||||
any,
|
||||
androidScheduleMode: anyNamed('androidScheduleMode'),
|
||||
matchDateTimeComponents: anyNamed('matchDateTimeComponents'),
|
||||
payload: anyNamed('payload'),
|
||||
)).thenAnswer((_) async {});
|
||||
|
||||
// when - 알림 설정 메서드 직접 호출
|
||||
await notificationService.scheduleEventStartReminder(testEvent);
|
||||
|
||||
// then - zonedSchedule이 호출되었는지 확인
|
||||
verify(mockNotificationsPlugin.zonedSchedule(
|
||||
any,
|
||||
'이벤트 시작 알림',
|
||||
'${testEvent.title} 이벤트가 1시간 후에 시작됩니다.',
|
||||
any,
|
||||
any,
|
||||
androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
|
||||
matchDateTimeComponents: DateTimeComponents.time,
|
||||
payload: testEvent.id,
|
||||
)).called(1);
|
||||
|
||||
// 스낵바가 표시되었는지 확인
|
||||
expect(find.byType(SnackBar), findsOneWidget);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -239,20 +238,8 @@ extension NotificationServiceTestExtension on NotificationService {
|
||||
static void setTestInstance(NotificationService instance) {
|
||||
// 이 메서드는 실제 구현에서는 작동하지 않지만, 테스트 목적으로 추가
|
||||
// 실제로는 NotificationService 클래스에 이 기능을 추가해야 함
|
||||
// 테스트에서는 이 메서드가 호출될 때 NotificationService._instance를 교체하는 방식으로 동작해야 함
|
||||
}
|
||||
}
|
||||
|
||||
// 모킹된 iOS 플러그인
|
||||
class MockIOSFlutterLocalNotificationsPlugin extends Mock
|
||||
implements IOSFlutterLocalNotificationsPlugin {
|
||||
@override
|
||||
Future<bool?> requestPermissions({
|
||||
bool alert = false,
|
||||
bool badge = false,
|
||||
bool sound = false,
|
||||
bool critical = false,
|
||||
bool provisional = false, // 추가 파라미터
|
||||
}) async {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// MockIOSFlutterLocalNotificationsPlugin은 이제 @GenerateMocks에 의해 자동 생성됩니다.
|
||||
|
||||
@@ -11,8 +11,28 @@ import 'package:flutter_local_notifications/src/initialization_settings.dart'
|
||||
as _i4;
|
||||
import 'package:flutter_local_notifications/src/notification_details.dart'
|
||||
as _i6;
|
||||
import 'package:flutter_local_notifications/src/platform_flutter_local_notifications.dart'
|
||||
as _i10;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/enums.dart'
|
||||
as _i13;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/initialization_settings.dart'
|
||||
as _i11;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/notification_channel.dart'
|
||||
as _i15;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/notification_channel_group.dart'
|
||||
as _i14;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/notification_details.dart'
|
||||
as _i12;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/schedule_mode.dart'
|
||||
as _i8;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/android/styles/messaging_style_information.dart'
|
||||
as _i16;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/darwin/initialization_settings.dart'
|
||||
as _i17;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/darwin/notification_details.dart'
|
||||
as _i19;
|
||||
import 'package:flutter_local_notifications/src/platform_specifics/darwin/notification_enabled_options.dart'
|
||||
as _i18;
|
||||
import 'package:flutter_local_notifications/src/types.dart' as _i9;
|
||||
import 'package:flutter_local_notifications_platform_interface/flutter_local_notifications_platform_interface.dart'
|
||||
as _i5;
|
||||
@@ -210,3 +230,548 @@ class MockFlutterLocalNotificationsPlugin extends _i1.Mock
|
||||
)
|
||||
as _i3.Future<List<_i5.ActiveNotification>>);
|
||||
}
|
||||
|
||||
/// A class which mocks [AndroidFlutterLocalNotificationsPlugin].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockAndroidFlutterLocalNotificationsPlugin extends _i1.Mock
|
||||
implements _i10.AndroidFlutterLocalNotificationsPlugin {
|
||||
MockAndroidFlutterLocalNotificationsPlugin() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i3.Future<bool> initialize(
|
||||
_i11.AndroidInitializationSettings? initializationSettings, {
|
||||
_i5.DidReceiveNotificationResponseCallback?
|
||||
onDidReceiveNotificationResponse,
|
||||
_i5.DidReceiveBackgroundNotificationResponseCallback?
|
||||
onDidReceiveBackgroundNotificationResponse,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#initialize,
|
||||
[initializationSettings],
|
||||
{
|
||||
#onDidReceiveNotificationResponse:
|
||||
onDidReceiveNotificationResponse,
|
||||
#onDidReceiveBackgroundNotificationResponse:
|
||||
onDidReceiveBackgroundNotificationResponse,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> requestExactAlarmsPermission() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#requestExactAlarmsPermission, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> requestFullScreenIntentPermission() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#requestFullScreenIntentPermission, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> requestNotificationsPermission() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#requestNotificationsPermission, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> requestNotificationPolicyAccess() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#requestNotificationPolicyAccess, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> hasNotificationPolicyAccess() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#hasNotificationPolicyAccess, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> zonedSchedule(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
_i7.TZDateTime? scheduledDate,
|
||||
_i12.AndroidNotificationDetails? notificationDetails, {
|
||||
required _i8.AndroidScheduleMode? scheduleMode,
|
||||
String? payload,
|
||||
_i9.DateTimeComponents? matchDateTimeComponents,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#zonedSchedule,
|
||||
[id, title, body, scheduledDate, notificationDetails],
|
||||
{
|
||||
#scheduleMode: scheduleMode,
|
||||
#payload: payload,
|
||||
#matchDateTimeComponents: matchDateTimeComponents,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> startForegroundService(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body, {
|
||||
_i12.AndroidNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
_i13.AndroidServiceStartType? startType =
|
||||
_i13.AndroidServiceStartType.startSticky,
|
||||
Set<_i13.AndroidServiceForegroundType>? foregroundServiceTypes,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#startForegroundService,
|
||||
[id, title, body],
|
||||
{
|
||||
#notificationDetails: notificationDetails,
|
||||
#payload: payload,
|
||||
#startType: startType,
|
||||
#foregroundServiceTypes: foregroundServiceTypes,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> stopForegroundService() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#stopForegroundService, []),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> show(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body, {
|
||||
_i12.AndroidNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#show,
|
||||
[id, title, body],
|
||||
{#notificationDetails: notificationDetails, #payload: payload},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> periodicallyShow(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
_i5.RepeatInterval? repeatInterval, {
|
||||
_i12.AndroidNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
_i8.AndroidScheduleMode? scheduleMode = _i8.AndroidScheduleMode.exact,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#periodicallyShow,
|
||||
[id, title, body, repeatInterval],
|
||||
{
|
||||
#notificationDetails: notificationDetails,
|
||||
#payload: payload,
|
||||
#scheduleMode: scheduleMode,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> periodicallyShowWithDuration(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
Duration? repeatDurationInterval, {
|
||||
_i12.AndroidNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
_i8.AndroidScheduleMode? scheduleMode = _i8.AndroidScheduleMode.exact,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#periodicallyShowWithDuration,
|
||||
[id, title, body, repeatDurationInterval],
|
||||
{
|
||||
#notificationDetails: notificationDetails,
|
||||
#payload: payload,
|
||||
#scheduleMode: scheduleMode,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancel(int? id, {String? tag}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancel, [id], {#tag: tag}),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> createNotificationChannelGroup(
|
||||
_i14.AndroidNotificationChannelGroup? notificationChannelGroup,
|
||||
) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#createNotificationChannelGroup, [
|
||||
notificationChannelGroup,
|
||||
]),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> deleteNotificationChannelGroup(String? groupId) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#deleteNotificationChannelGroup, [groupId]),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> createNotificationChannel(
|
||||
_i15.AndroidNotificationChannel? notificationChannel,
|
||||
) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#createNotificationChannel, [
|
||||
notificationChannel,
|
||||
]),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> deleteNotificationChannel(String? channelId) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#deleteNotificationChannel, [channelId]),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i16.MessagingStyleInformation?>
|
||||
getActiveNotificationMessagingStyle(int? id, {String? tag}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#getActiveNotificationMessagingStyle,
|
||||
[id],
|
||||
{#tag: tag},
|
||||
),
|
||||
returnValue: _i3.Future<_i16.MessagingStyleInformation?>.value(),
|
||||
)
|
||||
as _i3.Future<_i16.MessagingStyleInformation?>);
|
||||
|
||||
@override
|
||||
_i3.Future<List<_i15.AndroidNotificationChannel>?>
|
||||
getNotificationChannels() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#getNotificationChannels, []),
|
||||
returnValue:
|
||||
_i3.Future<List<_i15.AndroidNotificationChannel>?>.value(),
|
||||
)
|
||||
as _i3.Future<List<_i15.AndroidNotificationChannel>?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> areNotificationsEnabled() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#areNotificationsEnabled, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> canScheduleExactNotifications() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#canScheduleExactNotifications, []),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancelAll() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancelAll, []),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancelAllPendingNotifications() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancelAllPendingNotifications, []),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i5.NotificationAppLaunchDetails?>
|
||||
getNotificationAppLaunchDetails() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#getNotificationAppLaunchDetails, []),
|
||||
returnValue: _i3.Future<_i5.NotificationAppLaunchDetails?>.value(),
|
||||
)
|
||||
as _i3.Future<_i5.NotificationAppLaunchDetails?>);
|
||||
|
||||
@override
|
||||
_i3.Future<List<_i5.PendingNotificationRequest>>
|
||||
pendingNotificationRequests() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#pendingNotificationRequests, []),
|
||||
returnValue: _i3.Future<List<_i5.PendingNotificationRequest>>.value(
|
||||
<_i5.PendingNotificationRequest>[],
|
||||
),
|
||||
)
|
||||
as _i3.Future<List<_i5.PendingNotificationRequest>>);
|
||||
|
||||
@override
|
||||
_i3.Future<List<_i5.ActiveNotification>> getActiveNotifications() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#getActiveNotifications, []),
|
||||
returnValue: _i3.Future<List<_i5.ActiveNotification>>.value(
|
||||
<_i5.ActiveNotification>[],
|
||||
),
|
||||
)
|
||||
as _i3.Future<List<_i5.ActiveNotification>>);
|
||||
}
|
||||
|
||||
/// A class which mocks [IOSFlutterLocalNotificationsPlugin].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockIOSFlutterLocalNotificationsPlugin extends _i1.Mock
|
||||
implements _i10.IOSFlutterLocalNotificationsPlugin {
|
||||
MockIOSFlutterLocalNotificationsPlugin() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> initialize(
|
||||
_i17.DarwinInitializationSettings? initializationSettings, {
|
||||
_i5.DidReceiveNotificationResponseCallback?
|
||||
onDidReceiveNotificationResponse,
|
||||
_i5.DidReceiveBackgroundNotificationResponseCallback?
|
||||
onDidReceiveBackgroundNotificationResponse,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#initialize,
|
||||
[initializationSettings],
|
||||
{
|
||||
#onDidReceiveNotificationResponse:
|
||||
onDidReceiveNotificationResponse,
|
||||
#onDidReceiveBackgroundNotificationResponse:
|
||||
onDidReceiveBackgroundNotificationResponse,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool?> requestPermissions({
|
||||
bool? sound = false,
|
||||
bool? alert = false,
|
||||
bool? badge = false,
|
||||
bool? provisional = false,
|
||||
bool? critical = false,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#requestPermissions, [], {
|
||||
#sound: sound,
|
||||
#alert: alert,
|
||||
#badge: badge,
|
||||
#provisional: provisional,
|
||||
#critical: critical,
|
||||
}),
|
||||
returnValue: _i3.Future<bool?>.value(),
|
||||
)
|
||||
as _i3.Future<bool?>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i18.NotificationsEnabledOptions?> checkPermissions() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#checkPermissions, []),
|
||||
returnValue: _i3.Future<_i18.NotificationsEnabledOptions?>.value(),
|
||||
)
|
||||
as _i3.Future<_i18.NotificationsEnabledOptions?>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> zonedSchedule(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
_i7.TZDateTime? scheduledDate,
|
||||
_i19.DarwinNotificationDetails? notificationDetails, {
|
||||
String? payload,
|
||||
_i9.DateTimeComponents? matchDateTimeComponents,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#zonedSchedule,
|
||||
[id, title, body, scheduledDate, notificationDetails],
|
||||
{
|
||||
#payload: payload,
|
||||
#matchDateTimeComponents: matchDateTimeComponents,
|
||||
},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> show(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body, {
|
||||
_i19.DarwinNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#show,
|
||||
[id, title, body],
|
||||
{#notificationDetails: notificationDetails, #payload: payload},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> periodicallyShow(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
_i5.RepeatInterval? repeatInterval, {
|
||||
_i19.DarwinNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#periodicallyShow,
|
||||
[id, title, body, repeatInterval],
|
||||
{#notificationDetails: notificationDetails, #payload: payload},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> periodicallyShowWithDuration(
|
||||
int? id,
|
||||
String? title,
|
||||
String? body,
|
||||
Duration? repeatDurationInterval, {
|
||||
_i19.DarwinNotificationDetails? notificationDetails,
|
||||
String? payload,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#periodicallyShowWithDuration,
|
||||
[id, title, body, repeatDurationInterval],
|
||||
{#notificationDetails: notificationDetails, #payload: payload},
|
||||
),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancel(int? id) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancel, [id]),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancelAll() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancelAll, []),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<void> cancelAllPendingNotifications() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#cancelAllPendingNotifications, []),
|
||||
returnValue: _i3.Future<void>.value(),
|
||||
returnValueForMissingStub: _i3.Future<void>.value(),
|
||||
)
|
||||
as _i3.Future<void>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i5.NotificationAppLaunchDetails?>
|
||||
getNotificationAppLaunchDetails() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#getNotificationAppLaunchDetails, []),
|
||||
returnValue: _i3.Future<_i5.NotificationAppLaunchDetails?>.value(),
|
||||
)
|
||||
as _i3.Future<_i5.NotificationAppLaunchDetails?>);
|
||||
|
||||
@override
|
||||
_i3.Future<List<_i5.PendingNotificationRequest>>
|
||||
pendingNotificationRequests() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#pendingNotificationRequests, []),
|
||||
returnValue: _i3.Future<List<_i5.PendingNotificationRequest>>.value(
|
||||
<_i5.PendingNotificationRequest>[],
|
||||
),
|
||||
)
|
||||
as _i3.Future<List<_i5.PendingNotificationRequest>>);
|
||||
|
||||
@override
|
||||
_i3.Future<List<_i5.ActiveNotification>> getActiveNotifications() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#getActiveNotifications, []),
|
||||
returnValue: _i3.Future<List<_i5.ActiveNotification>>.value(
|
||||
<_i5.ActiveNotification>[],
|
||||
),
|
||||
)
|
||||
as _i3.Future<List<_i5.ActiveNotification>>);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ import 'package:lanebow/services/event_service.dart';
|
||||
import 'package:lanebow/models/event_model.dart';
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/config/api_config.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
|
||||
// 모킹 클래스 생성
|
||||
@GenerateMocks([ApiService, FlutterLocalNotificationsPlugin])
|
||||
@@ -33,6 +35,13 @@ void main() {
|
||||
|
||||
// 테스트 전 설정
|
||||
setUp(() {
|
||||
// 테스트 격리를 위한 설정
|
||||
final testId = 'notification_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
TestUtils.setTestMode(true);
|
||||
EventBus.setCurrentTestId(testId);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
|
||||
// 모킹된 API 서비스 및 알림 플러그인 생성
|
||||
mockApiService = MockApiService();
|
||||
mockNotificationsPlugin = MockFlutterLocalNotificationsPlugin();
|
||||
@@ -524,3 +533,5 @@ class TestNotificationService {
|
||||
await mockNotificationsPlugin.cancelAll();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'package:lanebow/models/score_model.dart';
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/services/score_service.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
|
||||
import 'score_service_integration_test.mocks.dart';
|
||||
|
||||
@@ -49,6 +50,13 @@ void main() {
|
||||
setUp(() async {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// 테스트 격리를 위한 설정
|
||||
final testId = 'score_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
TestUtils.setTestMode(true);
|
||||
EventBus.setCurrentTestId(testId);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
|
||||
// SharedPreferences 모킹
|
||||
SharedPreferences.setMockInitialValues({
|
||||
ApiConfig.clubIdKey: testClubId,
|
||||
@@ -498,4 +506,12 @@ void main() {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// 테스트 종료 후 정리
|
||||
scoreService.dispose();
|
||||
EventBus.clearCurrentTestId();
|
||||
TestUtils.setTestMode(false);
|
||||
print('EventBus: 테스트 종료');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,331 @@
|
||||
// Mocks generated by Mockito 5.4.6 from annotations
|
||||
// in lanebow/test/integration/subscription_service_integration_test_backup.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i3;
|
||||
import 'dart:convert' as _i4;
|
||||
import 'dart:typed_data' as _i6;
|
||||
import 'dart:ui' as _i10;
|
||||
|
||||
import 'package:http/http.dart' as _i2;
|
||||
import 'package:in_app_purchase/in_app_purchase.dart' as _i8;
|
||||
import 'package:lanebow/models/subscription_model.dart' as _i9;
|
||||
import 'package:lanebow/services/in_app_purchase_service.dart' as _i7;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:mockito/src/dummies.dart' as _i5;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
// ignore_for_file: deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use_from_same_package
|
||||
// ignore_for_file: implementation_imports
|
||||
// ignore_for_file: invalid_use_of_visible_for_testing_member
|
||||
// ignore_for_file: must_be_immutable
|
||||
// ignore_for_file: prefer_const_constructors
|
||||
// ignore_for_file: unnecessary_parenthesis
|
||||
// ignore_for_file: camel_case_types
|
||||
// ignore_for_file: subtype_of_sealed_class
|
||||
|
||||
class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response {
|
||||
_FakeResponse_0(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeStreamedResponse_1 extends _i1.SmartFake
|
||||
implements _i2.StreamedResponse {
|
||||
_FakeStreamedResponse_1(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
/// A class which mocks [Client].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockClient extends _i1.Mock implements _i2.Client {
|
||||
MockClient() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> head(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> get(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> post(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> put(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> patch(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> delete(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<String> read(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<String>.value(
|
||||
_i5.dummyValue<String>(
|
||||
this,
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<String>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i6.Uint8List> readBytes(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#readBytes, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i6.Uint8List>.value(_i6.Uint8List(0)),
|
||||
)
|
||||
as _i3.Future<_i6.Uint8List>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#send, [request]),
|
||||
returnValue: _i3.Future<_i2.StreamedResponse>.value(
|
||||
_FakeStreamedResponse_1(
|
||||
this,
|
||||
Invocation.method(#send, [request]),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.StreamedResponse>);
|
||||
|
||||
@override
|
||||
void close() => super.noSuchMethod(
|
||||
Invocation.method(#close, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
|
||||
/// A class which mocks [InAppPurchaseService].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockInAppPurchaseService extends _i1.Mock
|
||||
implements _i7.InAppPurchaseService {
|
||||
MockInAppPurchaseService() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
List<_i8.ProductDetails> get products =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#products),
|
||||
returnValue: <_i8.ProductDetails>[],
|
||||
)
|
||||
as List<_i8.ProductDetails>);
|
||||
|
||||
@override
|
||||
List<_i8.PurchaseDetails> get purchases =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#purchases),
|
||||
returnValue: <_i8.PurchaseDetails>[],
|
||||
)
|
||||
as List<_i8.PurchaseDetails>);
|
||||
|
||||
@override
|
||||
bool get isAvailable =>
|
||||
(super.noSuchMethod(Invocation.getter(#isAvailable), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isLoading =>
|
||||
(super.noSuchMethod(Invocation.getter(#isLoading), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isPurchaseVerified =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#isPurchaseVerified),
|
||||
returnValue: false,
|
||||
)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
set isPurchaseVerified(bool? value) => super.noSuchMethod(
|
||||
Invocation.setter(#isPurchaseVerified, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
set lastVerifiedPurchase(_i8.PurchaseDetails? value) => super.noSuchMethod(
|
||||
Invocation.setter(#lastVerifiedPurchase, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
bool get hasListeners =>
|
||||
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
_i8.ProductDetails? getProductByPlanType(
|
||||
_i9.SubscriptionPlanType? planType,
|
||||
) =>
|
||||
(super.noSuchMethod(Invocation.method(#getProductByPlanType, [planType]))
|
||||
as _i8.ProductDetails?);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> purchaseSubscription(_i9.SubscriptionPlanType? planType) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#purchaseSubscription, [planType]),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> restorePurchases() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#restorePurchases, []),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
void dispose() => super.noSuchMethod(
|
||||
Invocation.method(#dispose, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void addListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#addListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void removeListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#removeListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void notifyListeners() => super.noSuchMethod(
|
||||
Invocation.method(#notifyListeners, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,331 @@
|
||||
// Mocks generated by Mockito 5.4.6 from annotations
|
||||
// in lanebow/test/integration/subscription_service_integration_test_fixed2.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i3;
|
||||
import 'dart:convert' as _i4;
|
||||
import 'dart:typed_data' as _i6;
|
||||
import 'dart:ui' as _i10;
|
||||
|
||||
import 'package:http/http.dart' as _i2;
|
||||
import 'package:in_app_purchase/in_app_purchase.dart' as _i8;
|
||||
import 'package:lanebow/models/subscription_model.dart' as _i9;
|
||||
import 'package:lanebow/services/in_app_purchase_service.dart' as _i7;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:mockito/src/dummies.dart' as _i5;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
// ignore_for_file: deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use_from_same_package
|
||||
// ignore_for_file: implementation_imports
|
||||
// ignore_for_file: invalid_use_of_visible_for_testing_member
|
||||
// ignore_for_file: must_be_immutable
|
||||
// ignore_for_file: prefer_const_constructors
|
||||
// ignore_for_file: unnecessary_parenthesis
|
||||
// ignore_for_file: camel_case_types
|
||||
// ignore_for_file: subtype_of_sealed_class
|
||||
|
||||
class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response {
|
||||
_FakeResponse_0(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeStreamedResponse_1 extends _i1.SmartFake
|
||||
implements _i2.StreamedResponse {
|
||||
_FakeStreamedResponse_1(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
/// A class which mocks [Client].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockClient extends _i1.Mock implements _i2.Client {
|
||||
MockClient() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> head(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> get(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> post(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> put(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> patch(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> delete(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<String> read(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<String>.value(
|
||||
_i5.dummyValue<String>(
|
||||
this,
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<String>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i6.Uint8List> readBytes(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#readBytes, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i6.Uint8List>.value(_i6.Uint8List(0)),
|
||||
)
|
||||
as _i3.Future<_i6.Uint8List>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#send, [request]),
|
||||
returnValue: _i3.Future<_i2.StreamedResponse>.value(
|
||||
_FakeStreamedResponse_1(
|
||||
this,
|
||||
Invocation.method(#send, [request]),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.StreamedResponse>);
|
||||
|
||||
@override
|
||||
void close() => super.noSuchMethod(
|
||||
Invocation.method(#close, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
|
||||
/// A class which mocks [InAppPurchaseService].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockInAppPurchaseService extends _i1.Mock
|
||||
implements _i7.InAppPurchaseService {
|
||||
MockInAppPurchaseService() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
List<_i8.ProductDetails> get products =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#products),
|
||||
returnValue: <_i8.ProductDetails>[],
|
||||
)
|
||||
as List<_i8.ProductDetails>);
|
||||
|
||||
@override
|
||||
List<_i8.PurchaseDetails> get purchases =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#purchases),
|
||||
returnValue: <_i8.PurchaseDetails>[],
|
||||
)
|
||||
as List<_i8.PurchaseDetails>);
|
||||
|
||||
@override
|
||||
bool get isAvailable =>
|
||||
(super.noSuchMethod(Invocation.getter(#isAvailable), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isLoading =>
|
||||
(super.noSuchMethod(Invocation.getter(#isLoading), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isPurchaseVerified =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#isPurchaseVerified),
|
||||
returnValue: false,
|
||||
)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
set isPurchaseVerified(bool? value) => super.noSuchMethod(
|
||||
Invocation.setter(#isPurchaseVerified, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
set lastVerifiedPurchase(_i8.PurchaseDetails? value) => super.noSuchMethod(
|
||||
Invocation.setter(#lastVerifiedPurchase, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
bool get hasListeners =>
|
||||
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
_i8.ProductDetails? getProductByPlanType(
|
||||
_i9.SubscriptionPlanType? planType,
|
||||
) =>
|
||||
(super.noSuchMethod(Invocation.method(#getProductByPlanType, [planType]))
|
||||
as _i8.ProductDetails?);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> purchaseSubscription(_i9.SubscriptionPlanType? planType) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#purchaseSubscription, [planType]),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> restorePurchases() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#restorePurchases, []),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
void dispose() => super.noSuchMethod(
|
||||
Invocation.method(#dispose, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void addListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#addListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void removeListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#removeListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void notifyListeners() => super.noSuchMethod(
|
||||
Invocation.method(#notifyListeners, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,331 @@
|
||||
// Mocks generated by Mockito 5.4.6 from annotations
|
||||
// in lanebow/test/integration/subscription_service_integration_test_fixed3.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i3;
|
||||
import 'dart:convert' as _i4;
|
||||
import 'dart:typed_data' as _i6;
|
||||
import 'dart:ui' as _i10;
|
||||
|
||||
import 'package:http/http.dart' as _i2;
|
||||
import 'package:in_app_purchase/in_app_purchase.dart' as _i8;
|
||||
import 'package:lanebow/models/subscription_model.dart' as _i9;
|
||||
import 'package:lanebow/services/in_app_purchase_service.dart' as _i7;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:mockito/src/dummies.dart' as _i5;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
// ignore_for_file: deprecated_member_use
|
||||
// ignore_for_file: deprecated_member_use_from_same_package
|
||||
// ignore_for_file: implementation_imports
|
||||
// ignore_for_file: invalid_use_of_visible_for_testing_member
|
||||
// ignore_for_file: must_be_immutable
|
||||
// ignore_for_file: prefer_const_constructors
|
||||
// ignore_for_file: unnecessary_parenthesis
|
||||
// ignore_for_file: camel_case_types
|
||||
// ignore_for_file: subtype_of_sealed_class
|
||||
|
||||
class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response {
|
||||
_FakeResponse_0(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeStreamedResponse_1 extends _i1.SmartFake
|
||||
implements _i2.StreamedResponse {
|
||||
_FakeStreamedResponse_1(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
/// A class which mocks [Client].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockClient extends _i1.Mock implements _i2.Client {
|
||||
MockClient() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> head(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#head, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> get(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(#get, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> post(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#post,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> put(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#put,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> patch(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#patch,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.Response> delete(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
Object? body,
|
||||
_i4.Encoding? encoding,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
returnValue: _i3.Future<_i2.Response>.value(
|
||||
_FakeResponse_0(
|
||||
this,
|
||||
Invocation.method(
|
||||
#delete,
|
||||
[url],
|
||||
{#headers: headers, #body: body, #encoding: encoding},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.Response>);
|
||||
|
||||
@override
|
||||
_i3.Future<String> read(Uri? url, {Map<String, String>? headers}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<String>.value(
|
||||
_i5.dummyValue<String>(
|
||||
this,
|
||||
Invocation.method(#read, [url], {#headers: headers}),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<String>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i6.Uint8List> readBytes(
|
||||
Uri? url, {
|
||||
Map<String, String>? headers,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#readBytes, [url], {#headers: headers}),
|
||||
returnValue: _i3.Future<_i6.Uint8List>.value(_i6.Uint8List(0)),
|
||||
)
|
||||
as _i3.Future<_i6.Uint8List>);
|
||||
|
||||
@override
|
||||
_i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#send, [request]),
|
||||
returnValue: _i3.Future<_i2.StreamedResponse>.value(
|
||||
_FakeStreamedResponse_1(
|
||||
this,
|
||||
Invocation.method(#send, [request]),
|
||||
),
|
||||
),
|
||||
)
|
||||
as _i3.Future<_i2.StreamedResponse>);
|
||||
|
||||
@override
|
||||
void close() => super.noSuchMethod(
|
||||
Invocation.method(#close, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
|
||||
/// A class which mocks [InAppPurchaseService].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockInAppPurchaseService extends _i1.Mock
|
||||
implements _i7.InAppPurchaseService {
|
||||
MockInAppPurchaseService() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
List<_i8.ProductDetails> get products =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#products),
|
||||
returnValue: <_i8.ProductDetails>[],
|
||||
)
|
||||
as List<_i8.ProductDetails>);
|
||||
|
||||
@override
|
||||
List<_i8.PurchaseDetails> get purchases =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#purchases),
|
||||
returnValue: <_i8.PurchaseDetails>[],
|
||||
)
|
||||
as List<_i8.PurchaseDetails>);
|
||||
|
||||
@override
|
||||
bool get isAvailable =>
|
||||
(super.noSuchMethod(Invocation.getter(#isAvailable), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isLoading =>
|
||||
(super.noSuchMethod(Invocation.getter(#isLoading), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
bool get isPurchaseVerified =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.getter(#isPurchaseVerified),
|
||||
returnValue: false,
|
||||
)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
set isPurchaseVerified(bool? value) => super.noSuchMethod(
|
||||
Invocation.setter(#isPurchaseVerified, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
set lastVerifiedPurchase(_i8.PurchaseDetails? value) => super.noSuchMethod(
|
||||
Invocation.setter(#lastVerifiedPurchase, value),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
bool get hasListeners =>
|
||||
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
|
||||
as bool);
|
||||
|
||||
@override
|
||||
_i8.ProductDetails? getProductByPlanType(
|
||||
_i9.SubscriptionPlanType? planType,
|
||||
) =>
|
||||
(super.noSuchMethod(Invocation.method(#getProductByPlanType, [planType]))
|
||||
as _i8.ProductDetails?);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> purchaseSubscription(_i9.SubscriptionPlanType? planType) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#purchaseSubscription, [planType]),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
_i3.Future<bool> restorePurchases() =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#restorePurchases, []),
|
||||
returnValue: _i3.Future<bool>.value(false),
|
||||
)
|
||||
as _i3.Future<bool>);
|
||||
|
||||
@override
|
||||
void dispose() => super.noSuchMethod(
|
||||
Invocation.method(#dispose, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void addListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#addListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void removeListener(_i10.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#removeListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void notifyListeners() => super.noSuchMethod(
|
||||
Invocation.method(#notifyListeners, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user