forked from eatvio/eatvio_app
200 lines
9.0 KiB
Dart
200 lines
9.0 KiB
Dart
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<GlobalKey<NavigatorState>>());
|
||
});
|
||
|
||
test('appRouter инициализирован', () {
|
||
expect(AppRouter.appRouter, isNotNull);
|
||
expect(AppRouter.appRouter, isA<GoRouter>());
|
||
});
|
||
|
||
test('appRouter инициализирован с правильной конфигурацией', () {
|
||
expect(AppRouter.appRouter.configuration, isNotNull);
|
||
});
|
||
|
||
test('appRouter имеет правильный navigatorKey', () {
|
||
expect(AppRouter.appRouter.configuration.navigatorKey, AppRouter.navigatorKey);
|
||
});
|
||
|
||
test('navigateToRegisterViaSocial - метод существует', () {
|
||
expect(AppRouter.navigateToRegisterViaSocial, isA<Function>());
|
||
});
|
||
|
||
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);
|
||
});
|
||
});
|
||
}
|