feat: tela de apps com logos/menu de exclusao, correcao de tema nas mini apps e sidebar de navegacao
This commit is contained in:
94
test/miniapp_meta_test.dart
Normal file
94
test/miniapp_meta_test.dart
Normal file
@@ -0,0 +1,94 @@
|
||||
// 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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user