ProcessFilesTests.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using Xunit;
  5. namespace ProcessFilesTests
  6. {
  7. public class ProcessFilesTests
  8. {
  9. private readonly string testFolder = "./testFiles";
  10. private readonly string testFile = "./testFiles/test1.txt";
  11. private readonly List<string> expectedInSubFolder =
  12. [
  13. "test2.txt",
  14. "test3.txt"
  15. ];
  16. private readonly List<string> expectedInSubFolderMultipleExtensions = ["test.json"];
  17. private const string expectedInFolder = "test1.txt";
  18. public ProcessFilesTests()
  19. {
  20. expectedInSubFolder.Add(expectedInFolder);
  21. expectedInSubFolderMultipleExtensions.AddRange(expectedInSubFolder);
  22. }
  23. [Fact]
  24. public void ProcessFolderTest()
  25. {
  26. var result = string.Empty;
  27. void TestAction(string value)
  28. {
  29. result = Path.GetFileName(value);
  30. }
  31. var test = new ProcessFiles.ProcessFiles();
  32. var errors = test.Process([testFolder], "txt", TestAction);
  33. Assert.Empty(errors);
  34. Assert.Equal(expectedInFolder, result);
  35. }
  36. private static bool CheckResult(List<string> result, List<string> expected)
  37. {
  38. if (!result.Count.Equals(expected.Count))
  39. return false;
  40. foreach (var item in result)
  41. {
  42. if (!expected.Contains(item))
  43. return false;
  44. }
  45. return true;
  46. }
  47. [Fact]
  48. public void ProcessFolderRecursiveTest()
  49. {
  50. var result = new List<string>();
  51. void TestAction(string value)
  52. {
  53. result.Add(Path.GetFileName(value));
  54. }
  55. var test = new ProcessFiles.ProcessFiles();
  56. var errors = test.Process([testFolder], "txt", TestAction, true);
  57. Assert.Empty(errors);
  58. Assert.True(CheckResult(result, expectedInSubFolder));
  59. }
  60. [Fact]
  61. public void ProcessFolderAndFileTest()
  62. {
  63. var result = new List<string>();
  64. void TestAction(string value)
  65. {
  66. result.Add(Path.GetFileName(value));
  67. }
  68. var test = new ProcessFiles.ProcessFiles();
  69. var errors = test.Process(["./testFiles/subFolder", testFile], "txt", TestAction);
  70. Assert.Empty(errors);
  71. Assert.True(CheckResult(result, expectedInSubFolder));
  72. }
  73. [Fact]
  74. public void ProcessFileTest()
  75. {
  76. var result = string.Empty;
  77. void TestAction(string value)
  78. {
  79. result = Path.GetFileName(value);
  80. }
  81. var test = new ProcessFiles.ProcessFiles();
  82. var errors = test.Process([testFile], "txt", TestAction);
  83. Assert.Empty(errors);
  84. Assert.Equal(expectedInFolder, result);
  85. }
  86. [Fact]
  87. public void ProcessFileNotExistTest()
  88. {
  89. var result = string.Empty;
  90. void TestAction(string value)
  91. {
  92. result = value;
  93. }
  94. var test = new ProcessFiles.ProcessFiles();
  95. var errors = test.Process(["./testFiles/test.txt"], "txt", TestAction);
  96. Assert.NotEmpty(errors);
  97. Assert.Empty(result);
  98. }
  99. [Fact]
  100. public void ProcessFileNotMatchExtensionTest()
  101. {
  102. var result = string.Empty;
  103. void TestAction(string value)
  104. {
  105. result = value;
  106. }
  107. var test = new ProcessFiles.ProcessFiles();
  108. var errors = test.Process([testFile], "abc", TestAction);
  109. Assert.NotEmpty(errors);
  110. Assert.Empty(result);
  111. }
  112. [Fact]
  113. public void ProcessFolderRecursiveMultipleExtensionsTest()
  114. {
  115. var result = new List<string>();
  116. void TestAction(string value)
  117. {
  118. result.Add(Path.GetFileName(value));
  119. }
  120. var test = new ProcessFiles.ProcessFiles();
  121. var errors = test.Process([testFolder], ["txt", "json"], TestAction, true);
  122. Assert.Empty(errors);
  123. Assert.True(CheckResult(result, expectedInSubFolderMultipleExtensions));
  124. }
  125. [Fact]
  126. public void ProcessWhenActionInvokesProcessShouldPreserveOuterErrors()
  127. {
  128. var missingPath = Path.Combine(testFolder, "missing.txt");
  129. var nestedMissingPath = Path.Combine(testFolder, "nested-missing.txt");
  130. var test = new ProcessFiles.ProcessFiles();
  131. var errors = test.Process(
  132. [missingPath, testFile],
  133. "txt",
  134. _ => test.Process([nestedMissingPath], "txt", _ => { })).ToList();
  135. Assert.True(errors.Exists(x => x.StartsWith($"Problem getting attributes of {missingPath}")));
  136. Assert.True(errors.Exists(x => x.StartsWith($"Problem getting attributes of {nestedMissingPath}")));
  137. }
  138. [Fact]
  139. public void ProcessDirectoryEnumerationFailureShouldBeReportedAsError()
  140. {
  141. var test = new ProcessFiles.ProcessFiles();
  142. var errors = test.Process(
  143. [testFolder],
  144. ["txt["], // invalid search pattern forces Directory.GetFiles to throw
  145. _ => { }).ToList();
  146. Assert.Single(errors);
  147. Assert.Contains(testFolder, errors[0]);
  148. Assert.Contains("txt[", errors[0]);
  149. }
  150. }
  151. }