init
This commit is contained in:
@@ -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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user