Files
tatuchat/test/miniapp_meta_test.dart
Welton Moura 6c689d1f34
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
feat: tela de apps com logos/menu de exclusao, correcao de tema nas mini apps e sidebar de navegacao
2026-09-19 00:08:35 -03:00

94 lines
2.9 KiB
Dart

// SPDX-FileCopyrightText: 2026 TatuChat
//
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:flutter_test/flutter_test.dart';
import 'package:tatchat/utils/miniapp_meta.dart';
void main() {
test('Parses a valid manifest from meta tags', () {
const html = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="mini-app-id" content="myapp">
<meta name="mini-app-name" content="My App">
<meta name="mini-app-category" content="productivity">
<meta name="mini-app-description" content="Does things">
<meta name="mini-app-logo" content="data:image/png;base64,AAAA">
<meta name="mini-app-in-chat" content="TRUE">
</head>
<body></body>
</html>
''';
final meta = parseMiniAppMeta(html);
expect(meta.id, 'myapp');
expect(meta.name, 'My App');
expect(meta.category, 'productivity');
expect(meta.description, 'Does things');
expect(meta.logo, 'data:image/png;base64,AAAA');
expect(meta.inChat, isTrue);
});
test('Allows empty optional values and defaults inChat to false', () {
const html = '''
<html><head>
<meta name="mini-app-id" content="empty">
<meta name="mini-app-name" content="Empty">
<meta name="mini-app-category" content="">
<meta name="mini-app-description" content="">
<meta name="mini-app-logo" content="">
<meta name="mini-app-in-chat" content="">
</head></html>
''';
final meta = parseMiniAppMeta(html);
expect(meta.id, 'empty');
expect(meta.name, 'Empty');
expect(meta.category, '');
expect(meta.description, '');
expect(meta.logo, '');
expect(meta.inChat, isFalse);
});
test('Independent of attribute order and quoting style', () {
final tags = extractMetaTags(
'<meta content="x" name="mini-app-id">'
"<meta name='mini-app-name' content='N'>",
);
expect(tags['mini-app-id'], 'x');
expect(tags['mini-app-name'], 'N');
});
test('Rejects documents missing required meta tags', () {
expect(() => parseMiniAppMeta('<html><head></head></html>'),
throwsFormatException);
const missingOptional = '''
<meta name="mini-app-id" content="myapp">
<meta name="mini-app-name" content="My App">
''';
expect(() => parseMiniAppMeta(missingOptional), throwsFormatException);
});
test('Rejects empty or missing id/name', () {
const emptyId = '''
<meta name="mini-app-id" content="">
<meta name="mini-app-name" content="My App">
<meta name="mini-app-category" content="">
<meta name="mini-app-description" content="">
<meta name="mini-app-logo" content="">
<meta name="mini-app-in-chat" content="">
''';
expect(() => parseMiniAppMeta(emptyId), throwsFormatException);
const emptyName = '''
<meta name="mini-app-id" content="myapp">
<meta name="mini-app-name" content=" ">
<meta name="mini-app-category" content="">
<meta name="mini-app-description" content="">
<meta name="mini-app-logo" content="">
<meta name="mini-app-in-chat" content="">
''';
expect(() => parseMiniAppMeta(emptyName), throwsFormatException);
});
}