Files
Qlyra/test/bot_start_control_test.dart
T
sevenhill f74057ce9b
Build Android (FCM) / build-android-fcm (push) Canceled after 0s
Build Android / build-android (push) Canceled after 0s
Build iOS / build-ios (push) Canceled after 0s
Build Linux / build-linux (push) Canceled after 0s
Build macOS / build-macos (push) Canceled after 0s
Build Windows / build-windows (push) Canceled after 0s
Release (main) / android (oneme) (push) Canceled after 0s
Release (main) / android (qlyra) (push) Canceled after 0s
Release (main) / windows (push) Canceled after 0s
Release (main) / linux (push) Canceled after 0s
Release (main) / macos (push) Canceled after 0s
Release (main) / ios (push) Canceled after 0s
Release (main) / release (push) Canceled after 0s
Rebrand application as Qlyra
2026-08-30 13:16:17 +03:00

139 lines
4.1 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:qlyra/backend/modules/messages.dart';
import 'package:qlyra/models/attachment.dart';
import 'package:qlyra/models/bot_info.dart';
void main() {
group('botStarted control message', () {
CachedMessage parse(Map<String, dynamic> message) =>
CachedMessage.fromPushPayload(1001, 2002, message);
test('is control and shows the payload the server put into text', () {
final message = parse({
'id': '3003',
'time': 1700000000000,
'type': 'USER',
'sender': 1001,
'text': 'abc123',
'attaches': [
{'_type': 'CONTROL', 'event': 'botStarted'},
],
});
expect(message.isControl, isTrue);
expect(message.botStartPayload, 'abc123');
expect(message.isSilentBotStart, isFalse);
});
test('reads the payload off the attach when it is there', () {
final message = parse({
'id': '3006',
'time': 1700000000000,
'type': 'USER',
'sender': 1001,
'attaches': [
{'_type': 'CONTROL', 'event': 'botStarted', 'startPayload': 'abc123'},
],
});
expect(message.botStartPayload, 'abc123');
expect(message.isSilentBotStart, isFalse);
});
test('a start without a payload stays hidden', () {
final message = parse({
'id': '3007',
'time': 1700000000000,
'type': 'USER',
'sender': 1001,
'text': '',
'attaches': [
{'_type': 'CONTROL', 'event': 'botStarted'},
],
});
expect(message.isControl, isTrue);
expect(message.botStartPayload, isNull);
expect(message.isSilentBotStart, isTrue);
});
test('other control events are untouched', () {
final message = parse({
'id': '3004',
'time': 1700000000000,
'type': 'USER',
'sender': 1001,
'attaches': [
{
'_type': 'CONTROL',
'event': 'add',
'userIds': [1002],
},
],
});
expect(message.isControl, isTrue);
expect(message.botStartPayload, isNull);
expect(message.isSilentBotStart, isFalse);
});
test('a plain message is not a start at all', () {
final message = parse({
'id': '3005',
'time': 1700000000000,
'type': 'USER',
'sender': 1001,
'text': 'привет',
'attaches': const [],
});
expect(message.isControl, isFalse);
expect(message.botStartPayload, isNull);
expect(message.isSilentBotStart, isFalse);
});
test('the event name used on the wire stays stable', () {
expect(ControlAttachment.botStartedEvent, 'botStarted');
});
});
group('BotInfo', () {
test('parses commands and the bot contact', () {
final info = BotInfo.fromPayload(4004, {
'commands': [
{'botId': 4004, 'name': 'start', 'description': 'Главное меню'},
{'botId': 4004, 'name': 'stats', 'description': ' '},
{'botId': 4004, 'description': 'без имени'},
],
'contact': {
'id': 4004,
'names': [
{'name': 'Тестовый бот', 'type': 'ONEME'},
],
'options': ['BOT'],
'description': 'Описание бота',
'link': 'https://max.ru/id100000000001_bot',
},
});
expect(info.botId, 4004);
expect(info.commands.map((c) => c.name), ['start', 'stats']);
expect(info.commands.first.slash, '/start');
expect(info.commands.first.description, 'Главное меню');
expect(info.commands.last.description, isNull);
expect(info.contact?.isBot, isTrue);
expect(info.contact?.displayName, 'Тестовый бот');
expect(info.description, 'Описание бота');
expect(info.link, 'https://max.ru/id100000000001_bot');
});
test('tolerates a payload without commands or contact', () {
final info = BotInfo.fromPayload(4005, const {});
expect(info.commands, isEmpty);
expect(info.contact, isNull);
expect(info.link, isNull);
});
});
}