Flutter desktop app for building Marp presentations via structured slide editors, with live preview, fullscreen presenter, and PDF/PPTX export. Includes Makefile quality gate, CI workflow, and full test suite. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 lines
1.4 KiB
Dart
40 lines
1.4 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:ocideck/models/deck.dart';
|
|
import 'package:ocideck/models/settings.dart';
|
|
import 'package:ocideck/models/slide.dart';
|
|
import 'package:ocideck/services/file_service.dart';
|
|
import 'package:ocideck/services/image_service.dart';
|
|
import 'package:ocideck/services/markdown_service.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
test('saveDeck copies logo into project logos directory', () async {
|
|
final temp = await Directory.systemTemp.createTemp('ocideck_logo_test_');
|
|
addTearDown(() async {
|
|
if (await temp.exists()) await temp.delete(recursive: true);
|
|
});
|
|
|
|
final sourceLogo = File(p.join(temp.path, 'client.png'));
|
|
await sourceLogo.writeAsBytes([1, 2, 3]);
|
|
|
|
final service = FileService(
|
|
MarkdownService(),
|
|
ImageService(),
|
|
() => ThemeProfile(logoPath: sourceLogo.path),
|
|
);
|
|
final deck = Deck(
|
|
title: 'Logo test',
|
|
themeProfile: ThemeProfile(logoPath: sourceLogo.path),
|
|
slides: [Slide.create(SlideType.title).copyWith(title: 'Logo test')],
|
|
);
|
|
|
|
final saved = await service.saveDeck(deck, p.join(temp.path, 'deck.md'));
|
|
|
|
expect(saved.themeProfile.logoPath, 'logos/client.png');
|
|
expect(await File(p.join(temp.path, 'logos', 'client.png')).exists(), true);
|
|
});
|
|
}
|