refactor(app,learn): people's files on the device shared in halkyon_app
ADR 0043's recommendation, for Todo's attachments: what Learn had for its files on the device moves into halkyon_app, unchanged but for its names, and Learn uses it from there. - FileCache, DirectoryFileCache (Learn's AssetFileCache): the files by their SHA-256 in a folder of the person's, and which wait to be uploaded. - FileServerGateway, ServerpodFileServerGateway (Learn's AssetServerGateway): halkyon_base's files endpoint, taking the module's caller rather than Learn's client; FileLimitReached, FileRoom. - Their fakes in halkyon_app's testing: MemoryFileCache, FakeFileServerGateway, sha256Of. - SealedFile: the format every app seals a file in (HLKF, version 1), sealing with halkyon_app's ContentCipher; Learn's Privacy seals and opens its files with it, for the same context as before, so every file sealed so far opens as it did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
b7f0aaaec7
commit
5dd7575dd6
6 changed files with 272 additions and 235 deletions
|
|
@ -2,6 +2,8 @@ import 'dart:convert';
|
|||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_app/testing.dart'
|
||||
show FakeFileServerGateway, MemoryFileCache;
|
||||
import 'package:halkyon_editor/halkyon_editor.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/asset/data/asset_repository.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/card/data/card_repository.dart';
|
||||
|
|
@ -14,11 +16,9 @@ import 'package:halkyon_learn_flutter/src/feature/pdf_source/data/pdf_source_rep
|
|||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_card_gateway.dart';
|
||||
import '../../../support/fake_note_gateway.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
|
||||
Uint8List pdf(String text) => Uint8List.fromList(utf8.encode('%PDF-1.7 $text'));
|
||||
|
||||
|
|
@ -33,8 +33,8 @@ void main() {
|
|||
setUp(() {
|
||||
assets = AssetRepository(
|
||||
FakeAssetGateway(),
|
||||
FakeAssetServerGateway(),
|
||||
MemoryAssetFileCache(),
|
||||
FakeFileServerGateway(),
|
||||
MemoryFileCache(),
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
pdfs = PdfSourceRepository(FakePdfSourceGateway(), assets);
|
||||
|
|
|
|||
|
|
@ -2,31 +2,31 @@ import 'dart:convert';
|
|||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_app/testing.dart'
|
||||
show FakeFileServerGateway, MemoryFileCache;
|
||||
import 'package:halkyon_learn_flutter/src/core/asset/data/asset_repository.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pdf_source/bloc/pdf_reader_bloc.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pdf_source/data/pdf_source_repository.dart';
|
||||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_pdf_engine.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
|
||||
Uint8List pdf(String text) => Uint8List.fromList(utf8.encode('%PDF-1.7 $text'));
|
||||
|
||||
void main() {
|
||||
late MemoryAssetFileCache files;
|
||||
late MemoryFileCache files;
|
||||
late AssetRepository assets;
|
||||
late PdfSourceRepository pdfs;
|
||||
late FakePdfEngine engine;
|
||||
late PdfReaderBloc bloc;
|
||||
|
||||
setUp(() {
|
||||
files = MemoryAssetFileCache();
|
||||
files = MemoryFileCache();
|
||||
assets = AssetRepository(
|
||||
FakeAssetGateway(),
|
||||
FakeAssetServerGateway(),
|
||||
FakeFileServerGateway(),
|
||||
files,
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ import 'dart:typed_data';
|
|||
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_app/testing.dart'
|
||||
show FakeFileServerGateway, MemoryFileCache;
|
||||
import 'package:halkyon_learn_flutter/src/core/asset/data/asset_repository.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/content/payload.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pdf_source/data/pdf_source_payload.dart';
|
||||
|
|
@ -11,9 +13,7 @@ import 'package:halkyon_learn_flutter/src/feature/pdf_source/model/pdf_source.da
|
|||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
|
||||
/// A PDF's bytes: its signature, then [text].
|
||||
Uint8List pdf(String text) => Uint8List.fromList(utf8.encode('%PDF-1.7 $text'));
|
||||
|
|
@ -29,8 +29,8 @@ void main() {
|
|||
assetGateway = FakeAssetGateway();
|
||||
assets = AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
MemoryAssetFileCache(),
|
||||
FakeFileServerGateway(),
|
||||
MemoryFileCache(),
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
pdfs = PdfSourceRepository(gateway, assets);
|
||||
|
|
|
|||
|
|
@ -15,10 +15,8 @@ import 'package:material_ui/material_ui.dart';
|
|||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/fake_studyset_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
import '../../../support/pump_app.dart';
|
||||
import '../../../support/test_dependencies.dart';
|
||||
|
||||
|
|
@ -29,7 +27,7 @@ void main() {
|
|||
late FakePdfSourceGateway pdfGateway;
|
||||
late FakeAssetGateway assetGateway;
|
||||
late FakeFilePicker files;
|
||||
late MemoryAssetFileCache cache;
|
||||
late MemoryFileCache cache;
|
||||
|
||||
setUp(() {
|
||||
studysets = FakeStudysetGateway()
|
||||
|
|
@ -40,7 +38,7 @@ void main() {
|
|||
pdfGateway = FakePdfSourceGateway();
|
||||
assetGateway = FakeAssetGateway();
|
||||
files = FakeFilePicker();
|
||||
cache = MemoryAssetFileCache();
|
||||
cache = MemoryFileCache();
|
||||
});
|
||||
|
||||
/// A repository of the test's own on the app's fake gateways, to store
|
||||
|
|
@ -48,7 +46,7 @@ void main() {
|
|||
PdfSourceRepository repository() {
|
||||
final assets = AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
FakeFileServerGateway(),
|
||||
cache,
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import 'dart:typed_data';
|
|||
import 'package:appflowy_editor/appflowy_editor.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_app/testing.dart'
|
||||
show FakeFileServerGateway, MemoryFileCache;
|
||||
import 'package:halkyon_editor/halkyon_editor.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/asset/data/asset_repository.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/device_settings/model/device_settings.dart';
|
||||
|
|
@ -21,14 +23,12 @@ import 'package:material_ui/material_ui.dart' hide Card;
|
|||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_card_gateway.dart';
|
||||
import '../../../support/fake_note_gateway.dart';
|
||||
import '../../../support/fake_pdf_engine.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/fake_studyset_gateway.dart';
|
||||
import '../../../support/fake_tag_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
import '../../../support/memory_device_settings_store.dart';
|
||||
import '../../../support/pump_app.dart';
|
||||
import '../../../support/test_dependencies.dart';
|
||||
|
|
@ -37,7 +37,7 @@ void main() {
|
|||
late FakeStudysetGateway studysets;
|
||||
late FakePdfSourceGateway pdfGateway;
|
||||
late FakeAssetGateway assetGateway;
|
||||
late MemoryAssetFileCache files;
|
||||
late MemoryFileCache files;
|
||||
late FakeCardGateway cardGateway;
|
||||
late FakeNoteGateway noteGateway;
|
||||
late FakeTagGateway tagGateway;
|
||||
|
|
@ -51,7 +51,7 @@ void main() {
|
|||
);
|
||||
pdfGateway = FakePdfSourceGateway();
|
||||
assetGateway = FakeAssetGateway();
|
||||
files = MemoryAssetFileCache();
|
||||
files = MemoryFileCache();
|
||||
cardGateway = FakeCardGateway();
|
||||
noteGateway = FakeNoteGateway();
|
||||
tagGateway = FakeTagGateway();
|
||||
|
|
@ -62,7 +62,7 @@ void main() {
|
|||
Future<String> stored({int? readTo}) async {
|
||||
final assets = AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
FakeFileServerGateway(),
|
||||
files,
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
|
|
@ -120,7 +120,7 @@ void main() {
|
|||
pdfGateway,
|
||||
AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
FakeFileServerGateway(),
|
||||
files,
|
||||
FakeAssetSealing(),
|
||||
),
|
||||
|
|
@ -452,7 +452,7 @@ void main() {
|
|||
Future<String> storedMarkdown({int? paragraphs, int? readTo}) async {
|
||||
final assets = AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
FakeFileServerGateway(),
|
||||
files,
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ import 'dart:typed_data';
|
|||
|
||||
import 'package:clock/clock.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:halkyon_app/testing.dart'
|
||||
show FakeFileServerGateway, MemoryFileCache;
|
||||
import 'package:halkyon_learn_flutter/src/core/asset/data/asset_repository.dart';
|
||||
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
||||
import 'package:halkyon_learn_flutter/src/feature/pdf_source/data/pdf_source_repository.dart';
|
||||
|
|
@ -13,10 +15,8 @@ import 'package:material_ui/material_ui.dart';
|
|||
|
||||
import '../../../support/fake_asset_gateway.dart';
|
||||
import '../../../support/fake_asset_sealing.dart';
|
||||
import '../../../support/fake_asset_server_gateway.dart';
|
||||
import '../../../support/fake_pdf_source_gateway.dart';
|
||||
import '../../../support/fake_studyset_gateway.dart';
|
||||
import '../../../support/memory_asset_file_cache.dart';
|
||||
import '../../../support/pump_app.dart';
|
||||
import '../../../support/test_dependencies.dart';
|
||||
|
||||
|
|
@ -32,8 +32,8 @@ void main() {
|
|||
Future<PdfSourceRepository> repository() async {
|
||||
final assets = AssetRepository(
|
||||
assetGateway,
|
||||
FakeAssetServerGateway(),
|
||||
MemoryAssetFileCache(),
|
||||
FakeFileServerGateway(),
|
||||
MemoryFileCache(),
|
||||
FakeAssetSealing(),
|
||||
);
|
||||
final pdfs = PdfSourceRepository(pdfGateway, assets);
|
||||
|
|
|
|||
Loading…
Reference in a new issue