feat(03-01): create Phase 3 export stubs and test scaffolds
- Add StorageCsvExportService, StorageHtmlExportService stub (Plan 03-03) - Add SearchCsvExportService, SearchHtmlExportService stub (Plan 03-05) - Add DuplicatesHtmlExportService stub (Plan 03-05) - Add StorageServiceTests, SearchServiceTests, DuplicatesServiceTests scaffolds - Add export test scaffolds for all 4 Phase 3 export services - 7 pure-logic tests pass (VersionSizeBytes + MakeKey); 4 CSOM stubs skip
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using SharepointToolbox.Core.Models;
|
||||
using SharepointToolbox.Services.Export;
|
||||
using Xunit;
|
||||
|
||||
namespace SharepointToolbox.Tests.Services.Export;
|
||||
|
||||
public class SearchExportServiceTests
|
||||
{
|
||||
private static SearchResult MakeSample() => new()
|
||||
{
|
||||
Title = "Q1 Budget.xlsx",
|
||||
Path = "https://contoso.sharepoint.com/sites/Finance/Shared Documents/Q1 Budget.xlsx",
|
||||
FileExtension = "xlsx",
|
||||
Created = new DateTime(2024, 1, 10),
|
||||
LastModified = new DateTime(2024, 3, 20),
|
||||
Author = "Alice Smith",
|
||||
ModifiedBy = "Bob Jones",
|
||||
SizeBytes = 48_000
|
||||
};
|
||||
|
||||
// -- CSV tests -----------------------------------------------------------
|
||||
|
||||
[Fact]
|
||||
public void BuildCsv_WithKnownResults_ContainsExpectedHeader()
|
||||
{
|
||||
var svc = new SearchCsvExportService();
|
||||
var csv = svc.BuildCsv(new List<SearchResult> { MakeSample() });
|
||||
Assert.Contains("File Name", csv);
|
||||
Assert.Contains("Extension", csv);
|
||||
Assert.Contains("Created", csv);
|
||||
Assert.Contains("Created By", csv);
|
||||
Assert.Contains("Modified By", csv);
|
||||
Assert.Contains("Size", csv);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildCsv_WithEmptyList_ReturnsHeaderOnly()
|
||||
{
|
||||
var svc = new SearchCsvExportService();
|
||||
var csv = svc.BuildCsv(new List<SearchResult>());
|
||||
Assert.NotEmpty(csv);
|
||||
var lines = csv.Split('\n', StringSplitOptions.RemoveEmptyEntries);
|
||||
Assert.Single(lines);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildCsv_ResultValues_AppearInOutput()
|
||||
{
|
||||
var svc = new SearchCsvExportService();
|
||||
var csv = svc.BuildCsv(new List<SearchResult> { MakeSample() });
|
||||
Assert.Contains("Alice Smith", csv);
|
||||
Assert.Contains("xlsx", csv);
|
||||
}
|
||||
|
||||
// -- HTML tests ----------------------------------------------------------
|
||||
|
||||
[Fact]
|
||||
public void BuildHtml_WithResults_ContainsSortableColumnScript()
|
||||
{
|
||||
var svc = new SearchHtmlExportService();
|
||||
var html = svc.BuildHtml(new List<SearchResult> { MakeSample() });
|
||||
Assert.Contains("<!DOCTYPE html>", html);
|
||||
Assert.Contains("sort", html); // sortable columns JS
|
||||
Assert.Contains("Q1 Budget.xlsx", html);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildHtml_WithResults_ContainsFilterInput()
|
||||
{
|
||||
var svc = new SearchHtmlExportService();
|
||||
var html = svc.BuildHtml(new List<SearchResult> { MakeSample() });
|
||||
Assert.Contains("filter", html); // filter input element
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BuildHtml_WithEmptyList_ReturnsValidHtml()
|
||||
{
|
||||
var svc = new SearchHtmlExportService();
|
||||
var html = svc.BuildHtml(new List<SearchResult>());
|
||||
Assert.Contains("<!DOCTYPE html>", html);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user