From d9c8c1e1f3401a119270fd666d377ba996d60743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6sche?= Date: Mon, 12 Jan 2026 00:39:36 +0100 Subject: [PATCH] STYLE: Refactor code for improved readability and consistency --- .../lib/models/document_capabilities.dart | 5 +- b0esche_cloud/lib/pages/document_viewer.dart | 30 ++--- b0esche_cloud/lib/services/file_service.dart | 6 +- .../test/document_viewer_bloc_test.dart | 118 ------------------ go_cloud/internal/http/routes.go | 1 - go_cloud/internal/storage/webdav.go | 3 +- 6 files changed, 23 insertions(+), 140 deletions(-) delete mode 100644 b0esche_cloud/test/document_viewer_bloc_test.dart diff --git a/b0esche_cloud/lib/models/document_capabilities.dart b/b0esche_cloud/lib/models/document_capabilities.dart index b3db140..1f722e6 100644 --- a/b0esche_cloud/lib/models/document_capabilities.dart +++ b/b0esche_cloud/lib/models/document_capabilities.dart @@ -27,5 +27,8 @@ class DocumentCapabilities extends Equatable { bool get isImage => mimeType.startsWith('image/'); bool get isText => mimeType.startsWith('text/'); - bool get isOffice => mimeType.contains('word') || mimeType.contains('spreadsheet') || mimeType.contains('presentation'); + bool get isOffice => + mimeType.contains('word') || + mimeType.contains('spreadsheet') || + mimeType.contains('presentation'); } diff --git a/b0esche_cloud/lib/pages/document_viewer.dart b/b0esche_cloud/lib/pages/document_viewer.dart index 2fb3496..fd17b00 100644 --- a/b0esche_cloud/lib/pages/document_viewer.dart +++ b/b0esche_cloud/lib/pages/document_viewer.dart @@ -217,7 +217,8 @@ class _DocumentViewerModalState extends State { state.token, ), builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { + if (snapshot.connectionState == + ConnectionState.waiting) { return Center( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( @@ -263,8 +264,8 @@ class _DocumentViewerModalState extends State { state.caps.mimeType.contains('word') ? Icons.description : state.caps.mimeType.contains('sheet') - ? Icons.table_chart - : Icons.folder_open, + ? Icons.table_chart + : Icons.folder_open, size: 64, color: AppTheme.accentColor, ), @@ -351,11 +352,10 @@ class _DocumentViewerModalState extends State { Future _fetchTextContent(String url, String token) async { try { - final response = await http.get( - Uri.parse(url), - headers: {'Authorization': 'Bearer $token'}, - ).timeout(const Duration(seconds: 30)); - + final response = await http + .get(Uri.parse(url), headers: {'Authorization': 'Bearer $token'}) + .timeout(const Duration(seconds: 30)); + if (response.statusCode == 200) { return response.body; } else { @@ -546,7 +546,8 @@ class _DocumentViewerState extends State { token ?? '', ), builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { + if (snapshot.connectionState == + ConnectionState.waiting) { return Center( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( @@ -592,8 +593,8 @@ class _DocumentViewerState extends State { state.caps.mimeType.contains('word') ? Icons.description : state.caps.mimeType.contains('sheet') - ? Icons.table_chart - : Icons.folder_open, + ? Icons.table_chart + : Icons.folder_open, size: 64, color: AppTheme.accentColor, ), @@ -675,10 +676,9 @@ class _DocumentViewerState extends State { Future _fetchTextContent(String url, String token) async { try { - final response = await http.get( - Uri.parse(url), - headers: {'Authorization': 'Bearer $token'}, - ).timeout(const Duration(seconds: 30)); + final response = await http + .get(Uri.parse(url), headers: {'Authorization': 'Bearer $token'}) + .timeout(const Duration(seconds: 30)); if (response.statusCode == 200) { return response.body; diff --git a/b0esche_cloud/lib/services/file_service.dart b/b0esche_cloud/lib/services/file_service.dart index 92b4645..5a570ec 100644 --- a/b0esche_cloud/lib/services/file_service.dart +++ b/b0esche_cloud/lib/services/file_service.dart @@ -161,9 +161,9 @@ class FileService { String sourcePath, String targetPath, ) async { - final endpoint = orgId.isEmpty - ? '/user/files/move' - : '/orgs/$orgId/files/move'; + final endpoint = orgId.isEmpty + ? '/user/files/move' + : '/orgs/$orgId/files/move'; await _apiClient.post( endpoint, data: {'sourcePath': sourcePath, 'targetPath': targetPath}, diff --git a/b0esche_cloud/test/document_viewer_bloc_test.dart b/b0esche_cloud/test/document_viewer_bloc_test.dart deleted file mode 100644 index 5b9df96..0000000 --- a/b0esche_cloud/test/document_viewer_bloc_test.dart +++ /dev/null @@ -1,118 +0,0 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:b0esche_cloud/blocs/document_viewer/document_viewer_bloc.dart'; -import 'package:b0esche_cloud/blocs/document_viewer/document_viewer_event.dart'; -import 'package:b0esche_cloud/blocs/document_viewer/document_viewer_state.dart'; -import 'package:b0esche_cloud/services/file_service.dart'; -import 'package:b0esche_cloud/models/viewer_session.dart'; -import 'package:b0esche_cloud/models/document_capabilities.dart'; -import 'package:b0esche_cloud/models/api_error.dart'; - -class MockFileService extends Mock implements FileService { - Future? _viewerResponse; - - void setViewerResponse(Future response) { - _viewerResponse = response; - } - - void resetMock() { - _viewerResponse = null; - } - - @override - Future requestViewerSession(String orgId, String fileId) { - return _viewerResponse ?? - super.noSuchMethod( - Invocation.method(#requestViewerSession, [orgId, fileId]), - returnValue: Future.value(null), - ); - } -} - -// @override -// Future requestViewerSession(String orgId, String fileId) { -// return _viewerResponse ?? -// super.noSuchMethod( -// Invocation.method(#requestViewerSession, [orgId, fileId]), -// returnValue: Future.value(null), -// ); -// } -// } - -void main() { - late MockFileService mockFileService; - - setUp(() { - mockFileService = MockFileService(); - }); - - tearDown(() { - reset(mockFileService); - mockFileService.resetMock(); - }); - - group('DocumentViewerBloc', () { - blocTest( - 'emits [DocumentViewerLoading, DocumentViewerError] when DocumentOpened fails', - build: () { - mockFileService.setViewerResponse( - Future.error( - ApiError( - code: 'server_error', - message: 'Server error', - status: 500, - ), - ), - ); - return DocumentViewerBloc(mockFileService); - }, - act: (bloc) => bloc.add(DocumentOpened(orgId: 'org1', fileId: 'file1')), - expect: () => [ - DocumentViewerLoading(), - DocumentViewerError(message: 'Failed to open document: Server error'), - ], - ); - - blocTest( - 'emits [DocumentViewerLoading, DocumentViewerReady] when DocumentOpened succeeds', - build: () { - mockFileService.setViewerResponse( - Future.value( - ViewerSession( - viewUrl: Uri.parse('https://example.com/view'), - capabilities: DocumentCapabilities( - canEdit: true, - canAnnotate: false, - isPdf: false, - ), - token: 'mock-token', - expiresAt: DateTime.now().add(const Duration(minutes: 30)), - ), - ), - ); - return DocumentViewerBloc(mockFileService); - }, - act: (bloc) => bloc.add(DocumentOpened(orgId: 'org1', fileId: 'file1')), - expect: () => [ - DocumentViewerLoading(), - DocumentViewerReady( - viewUrl: Uri.parse('https://example.com/view'), - caps: DocumentCapabilities( - canEdit: true, - canAnnotate: false, - isPdf: false, - ), - token: 'mock-token', - ), - ], - ); - - blocTest( - 'emits [DocumentViewerInitial] when DocumentClosed', - build: () => DocumentViewerBloc(mockFileService), - act: (bloc) => bloc.add(DocumentClosed()), - expect: () => [DocumentViewerInitial()], - ); - }); -} diff --git a/go_cloud/internal/http/routes.go b/go_cloud/internal/http/routes.go index 783a9c3..cdcbf94 100644 --- a/go_cloud/internal/http/routes.go +++ b/go_cloud/internal/http/routes.go @@ -1587,7 +1587,6 @@ func moveUserFileHandler(w http.ResponseWriter, r *http.Request, db *database.DB w.Write([]byte(`{"status":"ok"}`)) } - // deleteUserFileHandler deletes a file/folder in user's personal workspace by path func deleteUserFileHandler(w http.ResponseWriter, r *http.Request, db *database.DB, auditLogger *audit.Logger, cfg *config.Config) { userIDStr, ok := middleware.GetUserID(r.Context()) diff --git a/go_cloud/internal/storage/webdav.go b/go_cloud/internal/storage/webdav.go index 35fdcea..a020319 100644 --- a/go_cloud/internal/storage/webdav.go +++ b/go_cloud/internal/storage/webdav.go @@ -225,7 +225,7 @@ func (c *WebDAVClient) Move(ctx context.Context, sourcePath, targetPath string) sourceRel := strings.TrimLeft(sourcePath, "/") targetRel := strings.TrimLeft(targetPath, "/") - + u := c.basePrefix if u == "/" || u == "" { u = "" @@ -272,4 +272,3 @@ func (c *WebDAVClient) Move(ctx context.Context, sourcePath, targetPath string) body, _ := io.ReadAll(resp.Body) return fmt.Errorf("webdav move failed: %d %s", resp.StatusCode, string(body)) } -