forked from eatvio/eatvio_app
feat(dependencies): add rxdart package and improve string extension methods for better handling of empty strings and gender parsing
This commit is contained in:
125
test/core/utils/pagination_utils_test.dart
Normal file
125
test/core/utils/pagination_utils_test.dart
Normal file
@@ -0,0 +1,125 @@
|
||||
import 'package:eatvio_app/core/utils/pagination_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
class TestScrollNotification extends ScrollNotification {
|
||||
final ScrollMetrics _metrics;
|
||||
|
||||
TestScrollNotification(this._metrics) : super(
|
||||
metrics: _metrics,
|
||||
context: null,
|
||||
);
|
||||
|
||||
@override
|
||||
ScrollMetrics get metrics => _metrics;
|
||||
}
|
||||
|
||||
class TestScrollMetrics extends FixedScrollMetrics {
|
||||
@override
|
||||
final bool outOfRange;
|
||||
|
||||
TestScrollMetrics({
|
||||
required super.minScrollExtent,
|
||||
required super.maxScrollExtent,
|
||||
required super.pixels,
|
||||
required super.viewportDimension,
|
||||
required super.axisDirection,
|
||||
required super.devicePixelRatio,
|
||||
required this.outOfRange,
|
||||
});
|
||||
}
|
||||
|
||||
void main() {
|
||||
group('PaginationUtils', () {
|
||||
test('loadNewContent - вызывает load когда достигнут порог', () {
|
||||
bool loadCalled = false;
|
||||
|
||||
final metrics = FixedScrollMetrics(
|
||||
minScrollExtent: 0.0,
|
||||
maxScrollExtent: 1000.0,
|
||||
pixels: 850.0, // 1000 - 150 = 850 (порог)
|
||||
viewportDimension: 100.0,
|
||||
axisDirection: AxisDirection.down,
|
||||
devicePixelRatio: 1.0,
|
||||
);
|
||||
|
||||
final notification = TestScrollNotification(metrics);
|
||||
|
||||
loadNewContent(notification, () {
|
||||
loadCalled = true;
|
||||
return Future.value();
|
||||
});
|
||||
|
||||
expect(loadCalled, isTrue);
|
||||
});
|
||||
|
||||
test('loadNewContent - не вызывает load когда не достигнут порог', () {
|
||||
bool loadCalled = false;
|
||||
|
||||
final metrics = FixedScrollMetrics(
|
||||
minScrollExtent: 0.0,
|
||||
maxScrollExtent: 1000.0,
|
||||
pixels: 700.0, // меньше порога
|
||||
viewportDimension: 100.0,
|
||||
axisDirection: AxisDirection.down,
|
||||
devicePixelRatio: 1.0,
|
||||
);
|
||||
|
||||
final notification = TestScrollNotification(metrics);
|
||||
|
||||
loadNewContent(notification, () {
|
||||
loadCalled = true;
|
||||
return Future.value();
|
||||
});
|
||||
|
||||
expect(loadCalled, isFalse);
|
||||
});
|
||||
|
||||
test('loadNewContent - не вызывает load когда outOfRange', () {
|
||||
bool loadCalled = false;
|
||||
|
||||
// Создаем метрики с outOfRange = true
|
||||
final metrics = TestScrollMetrics(
|
||||
minScrollExtent: 0.0,
|
||||
maxScrollExtent: 1000.0,
|
||||
pixels: 850.0, // на пороге, но outOfRange = true
|
||||
viewportDimension: 100.0,
|
||||
axisDirection: AxisDirection.down,
|
||||
devicePixelRatio: 1.0,
|
||||
outOfRange: true,
|
||||
);
|
||||
|
||||
final notification = TestScrollNotification(metrics);
|
||||
|
||||
loadNewContent(notification, () {
|
||||
loadCalled = true;
|
||||
return Future.value();
|
||||
});
|
||||
|
||||
expect(loadCalled, isFalse);
|
||||
});
|
||||
|
||||
test('loadNewContent - вызывает load точно на пороге', () {
|
||||
bool loadCalled = false;
|
||||
|
||||
final metrics = FixedScrollMetrics(
|
||||
minScrollExtent: 0.0,
|
||||
maxScrollExtent: 1000.0,
|
||||
pixels: 850.0, // точно на пороге (1000 - 150)
|
||||
viewportDimension: 100.0,
|
||||
axisDirection: AxisDirection.down,
|
||||
devicePixelRatio: 1.0,
|
||||
);
|
||||
|
||||
final notification = TestScrollNotification(metrics);
|
||||
|
||||
loadNewContent(notification, () {
|
||||
loadCalled = true;
|
||||
return Future.value();
|
||||
});
|
||||
|
||||
expect(loadCalled, isTrue);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
43
test/core/utils/string_extentions_test.dart
Normal file
43
test/core/utils/string_extentions_test.dart
Normal file
@@ -0,0 +1,43 @@
|
||||
import 'package:eatvio_app/core/utils/string_extentions.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
group('String Capitalization Extension', () {
|
||||
test('capitalize - делает первую букву заглавной, остальные строчными', () {
|
||||
expect('hello'.capitalize(), 'Hello');
|
||||
expect('WORLD'.capitalize(), 'World');
|
||||
expect('tEsT'.capitalize(), 'Test');
|
||||
expect('a'.capitalize(), 'A');
|
||||
});
|
||||
|
||||
test('capitalize - работает с пустой строкой', () {
|
||||
expect(''.capitalize(), '');
|
||||
});
|
||||
|
||||
test('capitalize - работает с одной буквой', () {
|
||||
expect('h'.capitalize(), 'H');
|
||||
expect('H'.capitalize(), 'H');
|
||||
});
|
||||
|
||||
test('parseGender - преобразует "male" в "Мужской"', () {
|
||||
expect('male'.parseGender(), 'Мужской');
|
||||
});
|
||||
|
||||
test('parseGender - преобразует "female" в "Женский"', () {
|
||||
expect('female'.parseGender(), 'Женский');
|
||||
});
|
||||
|
||||
test('parseGender - возвращает исходную строку для других значений', () {
|
||||
expect('other'.parseGender(), 'other');
|
||||
expect('unknown'.parseGender(), 'unknown');
|
||||
expect(''.parseGender(), '');
|
||||
});
|
||||
|
||||
test('parseGender - регистрозависимый', () {
|
||||
expect('Male'.parseGender(), 'Male');
|
||||
expect('FEMALE'.parseGender(), 'FEMALE');
|
||||
expect('Male'.parseGender(), isNot('Мужской'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user