Create Chat class + tests

This commit is contained in:
hunteraraujo
2023-08-20 20:57:29 +02:00
parent cf4aa4fe9c
commit fb946e3d57
3 changed files with 127 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
import 'package:auto_gpt_flutter_client/models/message_type.dart';
/// Represents a chat message related to a specific task.
class Chat {
final int id;
final int taskId;
final String message;
final DateTime timestamp;
final MessageType messageType;
Chat({
required this.id,
required this.taskId,
required this.message,
required this.timestamp,
required this.messageType,
});
// Convert a Map (usually from JSON) to a Chat object
factory Chat.fromMap(Map<String, dynamic> map) {
return Chat(
id: map['id'],
taskId: map['taskId'],
message: map['message'],
timestamp: DateTime.parse(map['timestamp']),
messageType: MessageType.values.firstWhere(
(e) => e.toString() == 'MessageType.${map['messageType']}'),
);
}
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Chat &&
runtimeType == other.runtimeType &&
id == other.id &&
taskId == other.taskId &&
message == other.message &&
timestamp == other.timestamp &&
messageType == other.messageType;
@override
int get hashCode =>
id.hashCode ^
taskId.hashCode ^
message.hashCode ^
timestamp.hashCode ^
messageType.hashCode;
@override
String toString() =>
'Chat(id: $id, taskId: $taskId, message: $message, timestamp: $timestamp, messageType: $messageType)';
}

View File

@@ -0,0 +1,5 @@
/// Enum representing the type of the chat message.
enum MessageType {
user,
agent,
}

69
test/chat_test.dart Normal file
View File

@@ -0,0 +1,69 @@
import 'package:auto_gpt_flutter_client/models/chat.dart';
import 'package:auto_gpt_flutter_client/models/message_type.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Chat', () {
// Test the properties of the Chat class
test('Chat properties', () {
final chat = Chat(
id: 1,
taskId: 1,
message: 'Test Message',
timestamp: DateTime.now(),
messageType: MessageType.user);
expect(chat.id, 1);
expect(chat.taskId, 1);
expect(chat.message, 'Test Message');
expect(chat.messageType, MessageType.user);
});
// Test Chat.fromMap method
test('Chat.fromMap', () {
final chat = Chat.fromMap({
'id': 1,
'taskId': 1,
'message': 'Test Message',
'timestamp': DateTime.now().toString(),
'messageType': 'user'
});
expect(chat.id, 1);
expect(chat.taskId, 1);
expect(chat.message, 'Test Message');
expect(chat.messageType, MessageType.user);
});
// Test that two Chat objects with the same properties are equal
test('Two chats with same properties are equal', () {
final chat1 = Chat(
id: 3,
taskId: 3,
message: 'Same Message',
timestamp: DateTime.now(),
messageType: MessageType.agent);
final chat2 = Chat(
id: 3,
taskId: 3,
message: 'Same Message',
timestamp: chat1.timestamp,
messageType: MessageType.agent);
expect(chat1, chat2);
});
// Test that toString() returns a string representation of the Chat
test('toString returns string representation', () {
final chat = Chat(
id: 4,
taskId: 4,
message: 'Test toString',
timestamp: DateTime.now(),
messageType: MessageType.user);
expect(chat.toString(),
'Chat(id: 4, taskId: 4, message: Test toString, timestamp: ${chat.timestamp}, messageType: MessageType.user)');
});
});
}