import 'package:eatvio_app/core/app_router.dart'; import 'package:eatvio_app/core/routing/route_constants.dart'; import 'package:eatvio_app/features/auth/entities/auth_result_entity.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:go_router/go_router.dart'; void main() { group('AppRouter', () { group('resolveDeepLinkTarget - finance/alfa/return', () { const orderId = 'alfa_c29_k15138_t1712345678_r1234'; test('finance/alfa/return/{orderId} → chat-screen?orderId=', () { final target = AppRouter.resolveDeepLinkTarget( Uri.parse('https://eatvio.ru/finance/alfa/return/$orderId'), ); expect(target, '${RouteConstants.chatScreen}?orderId=$orderId'); }); test('ru/finance/alfa/return/{orderId} → chat-screen?orderId= (metaSegments)', () { final target = AppRouter.resolveDeepLinkTarget( Uri.parse('https://eatvio.ru/ru/finance/alfa/return/$orderId'), ); expect(target, '${RouteConstants.chatScreen}?orderId=$orderId'); }); test('неполный path /finance/alfa → feed', () { final target = AppRouter.resolveDeepLinkTarget( Uri.parse('https://eatvio.ru/finance/alfa'), ); expect(target, RouteConstants.feedScreen); }); test('неполный path /finance → feed', () { final target = AppRouter.resolveDeepLinkTarget( Uri.parse('https://eatvio.ru/finance'), ); expect(target, RouteConstants.feedScreen); }); test('регресс: chat/{uuid} → chat-screen?uuid=', () { final target = AppRouter.resolveDeepLinkTarget( Uri.parse('https://eatvio.ru/ru/chat/uuid-1'), ); expect(target, '${RouteConstants.chatScreen}?uuid=uuid-1'); }); }); test('navigatorKey инициализирован', () { expect(AppRouter.navigatorKey, isNotNull); expect(AppRouter.navigatorKey, isA>()); }); test('appRouter инициализирован', () { expect(AppRouter.appRouter, isNotNull); expect(AppRouter.appRouter, isA()); }); test('appRouter инициализирован с правильной конфигурацией', () { expect(AppRouter.appRouter.configuration, isNotNull); }); test('appRouter имеет правильный navigatorKey', () { expect(AppRouter.appRouter.configuration.navigatorKey, AppRouter.navigatorKey); }); test('navigateToRegisterViaSocial - метод существует', () { expect(AppRouter.navigateToRegisterViaSocial, isA()); }); test('navigateToRegisterViaSocial - принимает правильные параметры', () { const authResult = AuthResultEntity(accessToken: 'test_token', refreshToken: 'refresh_token', userId: '1', clientId: 'test_client_id'); const provider = 'yandex'; expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: provider), returnsNormally); }); test('appRouter содержит маршруты', () { final routes = AppRouter.appRouter.configuration.routes; expect(routes, isNotEmpty); }); test('appRouter имеет правильную конфигурацию', () { expect(AppRouter.appRouter.configuration, isNotNull); expect(AppRouter.appRouter.configuration.routes, isNotEmpty); }); test('appRouter имеет redirect функцию', () { expect(AppRouter.appRouter.configuration.redirect, isNotNull); }); test('navigateToRegisterViaSocial вызывает pushNamed с правильными параметрами', () { const authResult = AuthResultEntity(accessToken: 'test_token', refreshToken: 'refresh_token', userId: '1', clientId: 'test_client_id'); const provider = 'yandex'; expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: provider), returnsNormally); }); test('appRouter configuration routes содержит маршруты разных типов', () { final routes = AppRouter.appRouter.configuration.routes; expect(routes.length, greaterThan(0)); }); test('appRouter имеет правильную конфигурацию маршрутов', () { expect(AppRouter.appRouter.configuration.routes, isNotEmpty); }); test('navigateToRegisterViaSocial - создает правильный extra map', () { const authResult = AuthResultEntity(accessToken: 'test_token', refreshToken: 'refresh_token', userId: '1', clientId: 'test_client_id'); const provider = 'yandex'; expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: provider), returnsNormally); }); test('appRouter содержит все типы маршрутов', () { final routes = AppRouter.appRouter.configuration.routes; // Проверяем, что есть маршруты разных типов expect(routes, isNotEmpty); // Проверяем, что есть хотя бы один маршрут expect(routes.length, greaterThan(0)); }); test('appRouter имеет правильную конфигурацию', () { expect(AppRouter.appRouter.configuration, isNotNull); expect(AppRouter.appRouter.configuration.routes, isNotEmpty); }); test('navigateToRegisterViaSocial создает правильную структуру extra', () { const authResult = AuthResultEntity( accessToken: 'test_token', refreshToken: 'refresh_token', userId: '1', clientId: 'test_client_id', ); const provider = 'yandex'; expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: provider), returnsNormally); }); test('navigateToRegisterViaSocial работает с разными провайдерами', () { const authResult = AuthResultEntity( accessToken: 'test_token', refreshToken: 'refresh_token', userId: '1', clientId: 'test_client_id', ); expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: 'yandex'), returnsNormally); expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: 'vk'), returnsNormally); expect(() => AppRouter.navigateToRegisterViaSocial(authResult: authResult, provider: 'google'), returnsNormally); }); test('navigateByDeepLinkUrl handles empty and invalid urls', () { expect(() => AppRouter.navigateByDeepLinkUrl(''), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://unknown-host.example/foo'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('%%%'), returnsNormally); }); test('navigateByDeepLinkUrl handles supported recipe and blog links', () { expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/recipe/test-recipe'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.com/en/blog_post/123'), returnsNormally); }); test('navigateByDeepLinkUrl handles plan links', () { expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/plan/plan-slug'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/plan/42'), returnsNormally); }); test('navigateByDeepLinkUrl handles diet links', () { expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/diet/99'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/diet/diet-slug'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/diet'), returnsNormally); }); test('navigateByDeepLinkUrl handles chat links', () { expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/chat/uuid-1'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/chat/show/uuid-2'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/chat'), returnsNormally); }); test('navigateByDeepLinkUrl handles profile and misc links', () { expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/profile/some-user'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/profile'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/badge/1'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/diary'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/consultant_diary_comment/7'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/consultations/status/11'), returnsNormally); expect(() => AppRouter.navigateByDeepLinkUrl('https://eatvio.ru/ru/consultations'), returnsNormally); }); }); }