This commit is contained in:
2026-10-16 01:25:50 +05:30
commit c60ea2d370
89 changed files with 4661 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:kickkings_support/config.dart';
import 'package:kickkings_support/models/login_result.dart';
import 'package:kickkings_support/models/support_message.dart';
import 'package:kickkings_support/models/support_ticket.dart';
void main() {
test('normalizes a base url', () {
expect(
normalizeBaseUrl('https://kickkings.playpoolstudios.com/'),
'https://kickkings.playpoolstudios.com',
);
expect(normalizeBaseUrl(' https://example.com/// '), 'https://example.com');
});
test('ticket query omits empty filters', () {
expect(ticketListQuery(status: 'open'), {'status': 'open'});
expect(ticketListQuery(status: 'closed', category: 'bug'), {
'status': 'closed',
'category': 'bug',
});
expect(ticketListQuery(), isEmpty);
});
test('parses a ticket and a thread', () {
final ticket = SupportTicket.fromJson({
'id': 'ticket-1',
'userId': 42,
'username': 'playername',
'category': 'bug',
'categoryLabel': 'Report Bug',
'status': 'open',
'createdAt': '2026-10-15T12:00:00.000Z',
'updatedAt': '2026-10-15T12:00:00.000Z',
'lastMessageAt': '2026-10-15T12:05:00.000Z',
'lastMessagePreview': 'The match froze',
});
expect(ticket.userId, 42);
expect(ticket.displayCategory, 'Report Bug');
expect(ticket.isClosed, isFalse);
expect(
ticket.lastMessageAt.toUtc().toIso8601String(),
'2026-10-15T12:05:00.000Z',
);
final thread = SupportThread.fromJson({
'ticket': {
'id': 'ticket-1',
'userId': 42,
'username': 'playername',
'category': 'bug',
'categoryLabel': 'Report Bug',
'status': 'closed',
'createdAt': '2026-10-15T12:00:00.000Z',
'updatedAt': '2026-10-15T12:10:00.000Z',
'lastMessageAt': '2026-10-15T12:10:00.000Z',
'lastMessagePreview': 'We are looking into this.',
},
'messages': [
{
'id': 'message-1',
'ticketId': 'ticket-1',
'authorKind': 'player',
'authorName': 'playername',
'body': 'The match froze',
'createdAt': '2026-10-15T12:00:00.000Z',
},
{
'id': 'message-2',
'ticketId': 'ticket-1',
'authorKind': 'staff',
'authorName': 'ada',
'body': 'We are looking into this.',
'createdAt': '2026-10-15T12:10:00.000Z',
},
],
});
expect(thread.ticket.isClosed, isTrue);
expect(thread.messages, hasLength(2));
expect(thread.messages.first.isStaff, isFalse);
expect(thread.messages.last.isStaff, isTrue);
});
test('parses a login result', () {
final result = LoginResult.fromJson({
'ok': true,
'token': 'session-token',
'account': {
'id': 'acct',
'username': 'ada',
'isAdmin': false,
'permissions': {
'support': {'read': true, 'write': true},
},
},
});
expect(result.token, 'session-token');
expect(result.account.canWriteSupport, isTrue);
});
}