Files
eatvio_app/test/core/app_router_test.dart

226 lines
9.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 - blog_post', () {
test('ru/blog_post/{id} → /blog-post-screen?id=', () {
final target = AppRouter.resolveDeepLinkTarget(
Uri.parse('https://eatvio.ru/ru/blog_post/123'),
);
expect(target, '/blog-post-screen?id=123');
});
test('en/blog_post/{id} → /blog-post-screen?id=', () {
final target = AppRouter.resolveDeepLinkTarget(
Uri.parse('https://eatvio.com/en/blog_post/456'),
);
expect(target, '/blog-post-screen?id=456');
});
test('eatvio.com/blog_post/{id} without locale → /blog-post-screen?id=', () {
final target = AppRouter.resolveDeepLinkTarget(
Uri.parse('https://eatvio.com/blog_post/789'),
);
expect(target, '/blog-post-screen?id=789');
});
});
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);
});
});
}