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,45 @@
import 'package:eatvio_app/features/chat/models/chat_message_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatMessageModel', () {
test('создает ChatMessageModel с правильными значениями', () {
final model = ChatMessageModel(
id: 1,
data: 'Test message',
mediaData: null,
authorId: 123,
updatedAt: DateTime(2024, 1, 1),
isRead: false,
isCurrentUserAuthor: true,
roomId: 'room-1',
);
expect(model.id, 1);
expect(model.data, 'Test message');
expect(model.authorId, 123);
expect(model.isRead, false);
expect(model.messageState, MessageState.sent);
});
test('fromJson создает ChatMessageModel из JSON', () {
final json = {
'id': 1,
'data': 'Test message',
'media_data': null,
'author_id': 123,
'updated_at': '2024-01-01T00:00:00Z',
'read_by_to_user': false,
'is_author_message_auth_user': true,
'room_id': 'room-1',
};
final model = ChatMessageModel.fromJson(json);
expect(model.id, 1);
expect(model.data, 'Test message');
expect(model.authorId, 123);
});
});
}

View File

@@ -0,0 +1,33 @@
import 'package:eatvio_app/features/chat/models/chat_message_model.dart';
import 'package:eatvio_app/features/chat/models/chat_meta_model.dart';
import 'package:eatvio_app/features/chat/models/chat_messages_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatMessagesModel', () {
test('создает ChatMessagesModel с правильными значениями', () {
final message = ChatMessageModel(
id: 1,
data: 'Test message',
mediaData: null,
authorId: 123,
updatedAt: DateTime(2024, 1, 1),
isRead: false,
isCurrentUserAuthor: true,
roomId: 'room-1',
);
const meta = ChatMetaModel(lastPage: 1);
final model = ChatMessagesModel(
messagesList: [message],
meta: meta,
);
expect(model.messagesList.length, 1);
expect(model.messagesList.first.id, 1);
expect(model.meta.lastPage, 1);
});
});
}

View File

@@ -0,0 +1,25 @@
import 'package:eatvio_app/features/chat/models/chat_meta_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatMetaModel', () {
test('создает ChatMetaModel с правильными значениями', () {
const model = ChatMetaModel(
lastPage: 5,
);
expect(model.lastPage, 5);
});
test('fromJson создает ChatMetaModel из JSON', () {
final json = {
'last_page': 5,
};
final model = ChatMetaModel.fromJson(json);
expect(model.lastPage, 5);
});
});
}

View File

@@ -0,0 +1,44 @@
import 'package:eatvio_app/features/chat/models/chat_room_model.dart';
import 'package:eatvio_app/features/chat/models/chat_room_settings_model.dart';
import 'package:eatvio_app/features/chat/models/chat_user_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatRoomModel', () {
test('создает ChatRoomModel с правильными значениями', () {
const settings = ChatRoomSettingsModel(
name: 'Room Name',
state: 'active',
);
const sender = ChatUserModel(
id: 1,
name: 'Sender',
slug: 'sender',
profilePhotoUrl: 'https://example.com/sender.jpg',
);
const receiver = ChatUserModel(
id: 2,
name: 'Receiver',
slug: 'receiver',
profilePhotoUrl: 'https://example.com/receiver.jpg',
);
const users = Users(sender: sender, receiver: receiver);
const model = ChatRoomModel(
id: 'room-1',
chatRoomSettings: settings,
users: users,
chosenPlanId: 1,
chosenPlan: null,
);
expect(model.id, 'room-1');
expect(model.chosenPlanId, 1);
expect(model.users.sender.id, 1);
});
});
}

View File

@@ -0,0 +1,49 @@
import 'package:eatvio_app/core/models/pagination_model.dart';
import 'package:eatvio_app/features/chat/models/chat_room_pagination_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatRoomPaginationModel', () {
test('создает ChatRoomPaginationModel с правильными значениями', () {
const chatRoom = ChatRoom(
id: 'room-1',
lastMessage: null,
users: Users(
fromChatUser: ChatUser(
id: 1,
name: 'User 1',
profilePhotoPath: null,
profilePhotoUrl: 'https://example.com/user1.jpg',
),
toChatUser: ChatUser(
id: 2,
name: 'User 2',
profilePhotoPath: null,
profilePhotoUrl: 'https://example.com/user2.jpg',
),
),
unreadMessagesCount: 5,
chosenPlan: null,
);
const pagination = ChatRoomPaginationModel(
data: [chatRoom],
unreadChatsCount: 1,
meta: Meta(
currentPage: 1,
from: 1,
lastPage: 1,
links: [],
perPage: 10,
to: 1,
total: 1,
),
);
expect(pagination.data.length, 1);
expect(pagination.data.first.id, 'room-1');
expect(pagination.unreadChatsCount, 1);
});
});
}

View File

@@ -0,0 +1,29 @@
import 'package:eatvio_app/features/chat/models/chat_room_settings_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatRoomSettingsModel', () {
test('создает ChatRoomSettingsModel с правильными значениями', () {
const model = ChatRoomSettingsModel(
name: 'Room Name',
state: 'active',
);
expect(model.name, 'Room Name');
expect(model.state, 'active');
});
test('fromJson создает ChatRoomSettingsModel из JSON', () {
final json = {
'room_name': 'Room Name',
'state': 'active',
};
final model = ChatRoomSettingsModel.fromJson(json);
expect(model.name, 'Room Name');
expect(model.state, 'active');
});
});
}

View File

@@ -0,0 +1,32 @@
import 'package:eatvio_app/features/chat/models/chat_user_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ChatUserModel', () {
test('создает ChatUserModel с правильными значениями', () {
const model = ChatUserModel(
id: 1,
name: 'User Name',
slug: 'user-slug',
profilePhotoUrl: 'https://example.com/photo.jpg',
);
expect(model.id, 1);
expect(model.name, 'User Name');
expect(model.slug, 'user-slug');
expect(model.profilePhotoUrl, 'https://example.com/photo.jpg');
});
test('создает ChatUserModel без фото', () {
const model = ChatUserModel(
id: 1,
name: 'User Name',
slug: 'user-slug',
profilePhotoUrl: null,
);
expect(model.profilePhotoUrl, isNull);
});
});
}

View File

@@ -0,0 +1,25 @@
import 'package:eatvio_app/features/chat/models/payment_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PaymentModel', () {
test('создает PaymentModel с правильными значениями', () {
final model = PaymentModel(
paymentUrl: 'https://example.com/payment',
);
expect(model.paymentUrl, 'https://example.com/payment');
});
test('fromJson создает PaymentModel из JSON', () {
final json = {
'checkout_url': 'https://example.com/payment',
};
final model = PaymentModel.fromJson(json);
expect(model.paymentUrl, 'https://example.com/payment');
});
});
}

View File

@@ -0,0 +1,25 @@
import 'package:eatvio_app/features/chat/models/plan_complain_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PlanComplainModel', () {
test('создает PlanComplainModel с правильными значениями', () {
final model = PlanComplainModel(
description: 'Test complaint',
);
expect(model.description, 'Test complaint');
});
test('fromJson создает PlanComplainModel из JSON', () {
final json = {
'description': 'Test complaint',
};
final model = PlanComplainModel.fromJson(json);
expect(model.description, 'Test complaint');
});
});
}

View File

@@ -0,0 +1,38 @@
import 'package:eatvio_app/features/chat/models/websocket_info_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('WebsocketInfoModel', () {
test('создает WebsocketInfoModel с правильными значениями', () {
const model = WebsocketInfoModel(
key: 'test-key',
host: 'localhost',
port: '6001',
cluster: 'mt1',
userId: 123,
);
expect(model.key, 'test-key');
expect(model.host, 'localhost');
expect(model.port, '6001');
expect(model.cluster, 'mt1');
expect(model.userId, 123);
});
test('fromJson создает WebsocketInfoModel из JSON', () {
final json = {
'key': 'test-key',
'host': 'localhost',
'port': '6001',
'cluster': 'mt1',
'user_id': 123,
};
final model = WebsocketInfoModel.fromJson(json);
expect(model.key, 'test-key');
expect(model.userId, 123);
});
});
}