feat(dependencies): add rxdart package and improve string extension methods for better handling of empty strings and gender parsing

This commit is contained in:
mso7nueh
2025-12-04 15:45:54 +03:00
parent 0cd8e662d9
commit 953230b387
100 changed files with 7202 additions and 14 deletions

View File

@@ -0,0 +1,37 @@
import 'package:eatvio_app/features/profile/models/badge_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BadgeModel', () {
test('создает BadgeModel с правильными значениями', () {
const model = BadgeModel(
id: 1,
title: 'Test Badge',
description: 'Test description',
image: 'https://example.com/badge.jpg',
type: 'achievement',
);
expect(model.id, 1);
expect(model.title, 'Test Badge');
expect(model.description, 'Test description');
expect(model.type, 'achievement');
});
test('fromJson создает BadgeModel из JSON', () {
final json = {
'id': 1,
'title': 'Test Badge',
'description': 'Test description',
'image': 'https://example.com/badge.jpg',
'type': 'achievement',
};
final model = BadgeModel.fromJson(json);
expect(model.id, 1);
expect(model.title, 'Test Badge');
});
});
}

View File

@@ -0,0 +1,37 @@
import 'package:eatvio_app/features/profile/models/chosen_diets_pagination_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChosenDietsPaginationModel', () {
test('создает ChosenDietsPaginationModel с правильными значениями', () {
final chosenDiet = ChosenDietModel(
chosenDietID: 1,
chosenPlanId: 1,
state: 'inited',
startDate: DateTime(2024, 1, 1),
dietId: 1,
);
final pagination = ChosenDietsPaginationModel(diets: [chosenDiet]);
expect(pagination.diets.length, 1);
expect(pagination.diets.first.chosenDietID, 1);
expect(pagination.diets.first.state, 'inited');
});
});
group('ChosenDietModel', () {
test('создает ChosenDietModel с null dietId', () {
final chosenDiet = ChosenDietModel(
chosenDietID: 1,
chosenPlanId: 1,
state: 'inited',
startDate: DateTime(2024, 1, 1),
dietId: null,
);
expect(chosenDiet.dietId, isNull);
});
});
}

View File

@@ -0,0 +1,26 @@
import 'package:eatvio_app/features/profile/models/pass_key_params.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PassKeyParams', () {
test('создает PassKeyParams с правильными значениями', () {
final model = PassKeyParams(
routeName: '/profile',
routeParams: {'id': 1},
);
expect(model.routeName, '/profile');
expect(model.routeParams, {'id': 1});
});
test('создает PassKeyParams без routeParams', () {
final model = PassKeyParams(
routeName: '/profile',
routeParams: null,
);
expect(model.routeParams, isNull);
});
});
}

View File

@@ -0,0 +1,62 @@
import 'package:eatvio_app/core/models/pagination_model.dart';
import 'package:eatvio_app/features/profile/models/sub_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('SubModel', () {
test('создает SubModel с правильными значениями', () {
final model = SubModel(
slug: 'user-slug',
name: 'User Name',
city: 'Moscow',
birthdate: DateTime(1990, 1, 1),
isEntitySubscribedByMe: true,
profilePhotoUrl: 'https://example.com/photo.jpg',
roles: ['consultant'],
);
expect(model.slug, 'user-slug');
expect(model.name, 'User Name');
expect(model.city, 'Moscow');
expect(model.isEntitySubscribedByMe, isTrue);
expect(model.roles, ['consultant']);
});
});
group('SubPaginationModel', () {
test('создает SubPaginationModel с правильными значениями', () {
final sub = SubModel(
slug: 'user-slug',
name: 'User Name',
city: 'Moscow',
birthdate: DateTime(1990, 1, 1),
isEntitySubscribedByMe: true,
profilePhotoUrl: 'https://example.com/photo.jpg',
roles: ['consultant'],
);
final pagination = SubPaginationModel(
data: [sub],
links: const Links(
first: 'https://example.com?page=1',
last: 'https://example.com?page=1',
prev: null,
next: null,
),
meta: const Meta(
currentPage: 1,
from: 1,
lastPage: 1,
links: [],
perPage: 10,
to: 1,
total: 1,
),
);
expect(pagination.data.length, 1);
expect(pagination.data.first.slug, 'user-slug');
});
});
}