feat(tests): test coverage is 69.2

This commit is contained in:
misha
2026-01-21 09:19:41 +03:00
parent 775d4fb80f
commit f6809a06b3
16 changed files with 5274 additions and 333 deletions

View File

@@ -0,0 +1,139 @@
import 'package:eatvio_app/core/utils/markdown_utils.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MarkdownUtils', () {
test('processMarkdown - обрабатывает простой текст без изменений', () {
const text = 'Простой текст без форматирования';
final result = MarkdownUtils.processMarkdown(text);
expect(result, text);
});
test('processMarkdown - преобразует URL в markdown ссылки', () {
const text = 'Посетите https://example.com для получения информации';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com](https://example.com)'));
});
test('processMarkdown - преобразует www URL в markdown ссылки', () {
const text = 'Посетите www.example.com для получения информации';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[www.example.com](https://www.example.com)'));
});
test('processMarkdown - преобразует http URL в markdown ссылки', () {
const text = 'Посетите http://example.com для получения информации';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[http://example.com](http://example.com)'));
});
test('processMarkdown - не преобразует URL внутри существующих markdown ссылок', () {
const text = 'Ссылка [https://example.com](https://example.com) уже в формате markdown';
final result = MarkdownUtils.processMarkdown(text);
// URL не должен быть преобразован дважды
expect(result, contains('[https://example.com](https://example.com)'));
// Проверяем, что нет дублирования
final matches = RegExp(r'\[https://example\.com\]\(https://example\.com\)').allMatches(result);
expect(matches.length, 1);
});
test('processMarkdown - исправляет неправильный синтаксис markdown ссылок', () {
const text = 'Неправильная ссылка [https://example.com](url)';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com](https://example.com)'));
expect(result, isNot(contains('(url)')));
});
test('processMarkdown - исправляет неправильный синтаксис с www', () {
const text = 'Неправильная ссылка [www.example.com](url)';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[www.example.com](https://www.example.com)'));
});
test('processMarkdown - не исправляет ссылки без http или www', () {
const text = 'Ссылка [example.com](url) не должна быть исправлена';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[example.com](url)'));
});
test('processMarkdown - преобразует жирный текст **текст** в <b>текст</b>', () {
const text = 'Это **жирный текст** в markdown';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('<b>жирный текст</b>'));
expect(result, isNot(contains('**жирный текст**')));
});
test('processMarkdown - обрабатывает несколько жирных фрагментов', () {
const text = 'Это **первый** и **второй** жирный текст';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('<b>первый</b>'));
expect(result, contains('<b>второй</b>'));
});
test('processMarkdown - обрабатывает URL и жирный текст вместе', () {
const text = 'Посетите https://example.com для **важной** информации';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com](https://example.com)'));
expect(result, contains('<b>важной</b>'));
});
test('processMarkdown - обрабатывает несколько URL в тексте', () {
const text = 'Ссылки: https://example.com и www.test.com';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com](https://example.com)'));
expect(result, contains('[www.test.com](https://www.test.com)'));
});
test('processMarkdown - обрабатывает URL с параметрами', () {
const text = 'Ссылка https://example.com?param=value&other=test';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com?param=value&other=test](https://example.com?param=value&other=test)'));
});
test('processMarkdown - обрабатывает URL в конце предложения', () {
const text = 'Посетите https://example.com.';
final result = MarkdownUtils.processMarkdown(text);
// Точка включается в URL, так как регулярное выражение захватывает её
expect(result, contains('[https://example.com.](https://example.com.)'));
});
test('processMarkdown - обрабатывает URL в скобках', () {
const text = 'Ссылка (https://example.com) в скобках';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com](https://example.com)'));
});
test('processMarkdown - обрабатывает пустую строку', () {
const text = '';
final result = MarkdownUtils.processMarkdown(text);
expect(result, '');
});
test('processMarkdown - обрабатывает текст только с пробелами', () {
const text = ' ';
final result = MarkdownUtils.processMarkdown(text);
expect(result, ' ');
});
test('processMarkdown - обрабатывает URL с портом', () {
const text = 'Ссылка https://example.com:8080/path';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com:8080/path](https://example.com:8080/path)'));
});
test('processMarkdown - обрабатывает URL с якорем', () {
const text = 'Ссылка https://example.com#section';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('[https://example.com#section](https://example.com#section)'));
});
test('processMarkdown - обрабатывает сложный текст с множеством элементов', () {
const text = 'Это **важный** текст с https://example.com и **другим** жирным текстом. Также www.test.com';
final result = MarkdownUtils.processMarkdown(text);
expect(result, contains('<b>важный</b>'));
expect(result, contains('<b>другим</b>'));
expect(result, contains('[https://example.com](https://example.com)'));
expect(result, contains('[www.test.com](https://www.test.com)'));
});
});
}