128 lines
3.0 KiB
Dart
128 lines
3.0 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:marianum_mobile/api/emergency/emergency_notice.dart';
|
|
|
|
void main() {
|
|
group('EmergencyNotice.parse', () {
|
|
test('parses an active, dismissible notice', () {
|
|
final notice = EmergencyNotice.parse('''
|
|
---
|
|
active: true
|
|
dismissible: true
|
|
title: Störung
|
|
---
|
|
# Ausfall
|
|
Der Server ist **down**.
|
|
''');
|
|
|
|
expect(notice, isNotNull);
|
|
expect(notice!.dismissible, isTrue);
|
|
expect(notice.title, 'Störung');
|
|
expect(notice.body, '# Ausfall\nDer Server ist **down**.');
|
|
});
|
|
|
|
test('parses a full-screen (dismissible: false) notice', () {
|
|
final notice = EmergencyNotice.parse('''
|
|
---
|
|
active: true
|
|
dismissible: false
|
|
---
|
|
Wichtige Meldung
|
|
''');
|
|
|
|
expect(notice, isNotNull);
|
|
expect(notice!.dismissible, isFalse);
|
|
expect(notice.title, isNull);
|
|
});
|
|
|
|
test('defaults dismissible to true when absent', () {
|
|
final notice = EmergencyNotice.parse('''
|
|
---
|
|
active: true
|
|
---
|
|
Body
|
|
''');
|
|
|
|
expect(notice!.dismissible, isTrue);
|
|
});
|
|
|
|
test('returns null when active is false', () {
|
|
expect(
|
|
EmergencyNotice.parse('---\nactive: false\n---\nBody'),
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('returns null when active is missing', () {
|
|
expect(
|
|
EmergencyNotice.parse('---\ntitle: Hallo\n---\nBody'),
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('ignores comment lines in the frontmatter', () {
|
|
final notice = EmergencyNotice.parse('''
|
|
---
|
|
# dismissible: false <- example config, disabled
|
|
active: true
|
|
dismissible: true
|
|
---
|
|
Body
|
|
''');
|
|
|
|
expect(notice, isNotNull);
|
|
expect(notice!.dismissible, isTrue);
|
|
});
|
|
|
|
test('returns null without a frontmatter', () {
|
|
expect(EmergencyNotice.parse('Just some **markdown** text'), isNull);
|
|
});
|
|
|
|
test('returns null when the closing delimiter is missing', () {
|
|
expect(EmergencyNotice.parse('---\nactive: true\nBody'), isNull);
|
|
});
|
|
|
|
test('returns null on empty input', () {
|
|
expect(EmergencyNotice.parse(''), isNull);
|
|
expect(EmergencyNotice.parse(' \n '), isNull);
|
|
});
|
|
|
|
test('returns null when the body is empty', () {
|
|
expect(EmergencyNotice.parse('---\nactive: true\n---\n '), isNull);
|
|
});
|
|
|
|
test('preserves the markdown body verbatim', () {
|
|
final notice = EmergencyNotice.parse('''
|
|
---
|
|
active: true
|
|
---
|
|
# Titel
|
|
|
|
- Punkt 1
|
|
- Punkt 2
|
|
|
|
Mehr [Info](https://example.org).
|
|
''');
|
|
|
|
expect(
|
|
notice!.body,
|
|
'# Titel\n\n- Punkt 1\n- Punkt 2\n\nMehr [Info](https://example.org).',
|
|
);
|
|
});
|
|
|
|
test('handles CRLF line endings', () {
|
|
final notice = EmergencyNotice.parse(
|
|
'---\r\nactive: true\r\n---\r\nHallo\r\n',
|
|
);
|
|
|
|
expect(notice, isNotNull);
|
|
expect(notice!.body, 'Hallo');
|
|
});
|
|
|
|
test('accepts alternative truthy values for active', () {
|
|
expect(EmergencyNotice.parse('---\nactive: yes\n---\nB'), isNotNull);
|
|
expect(EmergencyNotice.parse('---\nactive: 1\n---\nB'), isNotNull);
|
|
expect(EmergencyNotice.parse('---\nactive: on\n---\nB'), isNotNull);
|
|
});
|
|
});
|
|
}
|