104 lines
3.1 KiB
Dart
104 lines
3.1 KiB
Dart
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);
|
|
});
|
|
}
|