forked from eatvio/eatvio_app
feat(tests): test coverage is 69.2
This commit is contained in:
139
test/core/utils/markdown_utils_test.dart
Normal file
139
test/core/utils/markdown_utils_test.dart
Normal 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)'));
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user