Add test solution and coverage script
Details
- PrivStack.Tests.sln: single solution referencing all 14 test projects +
TestUtilities, enabling `dotnet test` in one command
- tests/run-coverage.sh: runs all tests with coverlet, generates per-plugin
HTML + text summary via reportgenerator
- .gitignore: exclude coverage-results/ and coverage-report/ output dirs
Usage: ./tests/run-coverage.sh (runs tests + opens HTML report)
./tests/run-coverage.sh --no-open (CI-friendly, no browser)
Move page tree chevron to left-side fixed-width column
Details
Reorders tree item grid columns to Chevron | Icon | Title instead of
Icon | Title | Chevron. Hides the TreeViewItem's default expander container
(PART_ExpandCollapseChevronContainer) since we use a custom toggle. The
fixed 20px chevron column ensures consistent alignment across all tree
depth levels.
Add remaining test coverage: IngestionService, EntitySourceMaterializer, SmtpSendService
Details
- Finance/IngestionServiceTests: format routing, date filtering, dedup logic
- Data/EntitySourceMaterializerTests: RewriteSql, TempTableName, FormatSqlValue,
EscapeStringValue (extracted private → internal static for testability)
- Email/SmtpSendServiceTests: BuildMimeMessage with recipients, reply headers,
signatures, quoted text
- Journal: move SectionToolbar below section editors in new entry form
Extract pure logic tests for WikiSyncService, MediaLibraryWatcher, FileService
Details
- WikiSyncService: promote DeriveTitleFromFilename and SanitizeFilename from
private to internal static; add 7 tests covering extension stripping, dash-to-
space conversion, space-to-dash conversion, invalid char replacement, and
round-trip consistency.
- MediaLibraryWatcher: promote ShouldIgnore and ShouldIgnoreDir from private to
internal static; add 11 tests covering hidden files, .DS_Store, temp files,
tilde backups, hidden directory segments, empty/dot paths, and normal files.
- FileService.DetectMimeType: already internal static; add 20 tests via
TestCase attributes covering images, documents, media, text, unknown
extensions, no extension, and case insensitivity.
- Add InternalsVisibleTo for PrivStack.Plugin.Files.Tests in Files csproj
(Notes csproj already had it).
Add tests for TaskToNoteService.BuildBlocksFromMarkdown and DocxExportService image helpers
Details
Extract pure logic from infrastructure classes for testing:
- TaskToNoteService.BuildBlocksFromMarkdown: changed from private to internal static,
added InternalsVisibleTo for Tasks.Tests. 9 tests covering headings (all 3 levels),
paragraphs, multi-line joining, blank line separation, bullet lines as paragraph text,
empty input fallback, mixed content sequencing, and unique block IDs.
- DocxExportService.GetImageDimensions and ParseJpegDimensions: changed from private to
internal static. 4 tests covering valid PNG dimension parsing, valid JPEG SOF0 parsing,
unrecognized format defaults, and direct ParseJpegDimensions extraction.
Get notified about new releases