Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

133 строки
4.2KB

  1. using EnvelopeRenderer.Desktop.Core.Csv;
  2. namespace EnvelopeRenderer.Desktop.Tests;
  3. public sealed class CsvPreviewLoaderTests : IDisposable
  4. {
  5. private readonly string _tempDirectory =
  6. Path.Combine(Path.GetTempPath(), "EnvelopeRenderer.Desktop.Tests", Guid.NewGuid().ToString("N"));
  7. public CsvPreviewLoaderTests()
  8. {
  9. Directory.CreateDirectory(_tempDirectory);
  10. }
  11. public void Dispose()
  12. {
  13. if (Directory.Exists(_tempDirectory))
  14. {
  15. Directory.Delete(_tempDirectory, recursive: true);
  16. }
  17. }
  18. private string WriteCsv(string contents)
  19. {
  20. var path = Path.Combine(_tempDirectory, $"{Guid.NewGuid():N}.csv");
  21. File.WriteAllText(path, contents);
  22. return path;
  23. }
  24. [Fact]
  25. public void TryLoad_ValidHeaderAndRows_ReturnsHeadersAndSampleRows()
  26. {
  27. var path = WriteCsv(
  28. "Full Name,Address1,City\r\n" +
  29. "Jane Doe,123 Main St,Springfield\r\n" +
  30. "John Smith,456 Oak Ave,Shelbyville\r\n");
  31. var loaded = CsvPreviewLoader.TryLoad(path, out var result, out var errors);
  32. Assert.True(loaded);
  33. Assert.Empty(errors);
  34. Assert.NotNull(result);
  35. Assert.Equal(new[] { "Full Name", "Address1", "City" }, result!.Headers);
  36. Assert.Equal(2, result.SampleRows.Count);
  37. Assert.Equal(new[] { "Jane Doe", "123 Main St", "Springfield" }, result.SampleRows[0]);
  38. Assert.Equal(new[] { "John Smith", "456 Oak Ave", "Shelbyville" }, result.SampleRows[1]);
  39. }
  40. [Fact]
  41. public void TryLoad_MoreRowsThanMaxSample_ReturnsOnlyTheBoundedSample()
  42. {
  43. var lines = new List<string> { "Col1,Col2" };
  44. for (var i = 0; i < 50; i++)
  45. {
  46. lines.Add($"value{i}a,value{i}b");
  47. }
  48. var path = WriteCsv(string.Join("\r\n", lines) + "\r\n");
  49. var loaded = CsvPreviewLoader.TryLoad(path, out var result, out var errors, maxSampleRows: 10);
  50. Assert.True(loaded);
  51. Assert.Empty(errors);
  52. Assert.Equal(10, result!.SampleRows.Count);
  53. Assert.Equal(new[] { "value0a", "value0b" }, result.SampleRows[0]);
  54. Assert.Equal(new[] { "value9a", "value9b" }, result.SampleRows[9]);
  55. }
  56. [Fact]
  57. public void TryLoad_EmptyFile_ReturnsClearError()
  58. {
  59. var path = WriteCsv(string.Empty);
  60. var loaded = CsvPreviewLoader.TryLoad(path, out var result, out var errors);
  61. Assert.False(loaded);
  62. Assert.Null(result);
  63. Assert.Contains(errors, e => e.Contains("empty", StringComparison.OrdinalIgnoreCase));
  64. }
  65. [Fact]
  66. public void TryLoad_MalformedCsv_ReturnsClearErrorInsteadOfThrowing()
  67. {
  68. // An unterminated quoted field is invalid CSV that CsvHelper detects and rejects rather
  69. // than silently misparsing.
  70. var path = WriteCsv("Full Name,Address1\r\n\"Jane Doe,123 Main St\r\n");
  71. var exception = Record.Exception(() => CsvPreviewLoader.TryLoad(path, out var result, out var errors));
  72. Assert.Null(exception);
  73. var loaded = CsvPreviewLoader.TryLoad(path, out var loadedResult, out var loadedErrors);
  74. Assert.False(loaded);
  75. Assert.Null(loadedResult);
  76. Assert.NotEmpty(loadedErrors);
  77. }
  78. [Fact]
  79. public void TryLoad_MissingFile_ReturnsClearError()
  80. {
  81. var path = Path.Combine(_tempDirectory, "does-not-exist.csv");
  82. var loaded = CsvPreviewLoader.TryLoad(path, out var result, out var errors);
  83. Assert.False(loaded);
  84. Assert.Null(result);
  85. Assert.Contains(errors, e => e.Contains("not found", StringComparison.OrdinalIgnoreCase));
  86. }
  87. [Fact]
  88. public void TryLoad_BlankPath_ReturnsClearError()
  89. {
  90. var loaded = CsvPreviewLoader.TryLoad(string.Empty, out var result, out var errors);
  91. Assert.False(loaded);
  92. Assert.Null(result);
  93. Assert.NotEmpty(errors);
  94. }
  95. [Fact]
  96. public void TryLoad_HeaderOnlyFile_ReturnsHeadersWithNoSampleRows()
  97. {
  98. var path = WriteCsv("Full Name,Address1\r\n");
  99. var loaded = CsvPreviewLoader.TryLoad(path, out var result, out var errors);
  100. Assert.True(loaded);
  101. Assert.Empty(errors);
  102. Assert.Equal(new[] { "Full Name", "Address1" }, result!.Headers);
  103. Assert.Empty(result.SampleRows);
  104. }
  105. }

Powered by TurnKey Linux.