EmailItemTests.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597
  1. using qdr.app.studiou.orders2printpack.EmailStorage;
  2. using System.IO.Abstractions.TestingHelpers;
  3. namespace qdr.app.studiou.orders2printpack.Test
  4. {
  5. [TestFixture]
  6. public class EmailItemTests
  7. {
  8. private MockFileSystem _mockFileSystem;
  9. private string _basePath;
  10. private MetadataItem _testMetadata;
  11. [SetUp]
  12. public void SetUp()
  13. {
  14. _mockFileSystem = new MockFileSystem();
  15. _basePath = @"C:\TestBase";
  16. _testMetadata = new MetadataItem
  17. {
  18. DirectoryName = "test_user_at_example_dot_com",
  19. EmailAddress = "test.user@example.com",
  20. State = EmailStateEnum.Ready,
  21. Subject = "Test Subject",
  22. Body = "Test Body",
  23. FileNameAttachment = "test_attachment.zip",
  24. SizeAttachment = 1024,
  25. InternalFilesCount = 3,
  26. Orders = "1001,1002,1003"
  27. };
  28. // Create base directory
  29. _mockFileSystem.AddDirectory(_basePath);
  30. }
  31. #region Constructor Tests
  32. [Test]
  33. public void Constructor_WithValidParameters_ShouldInitializeCorrectly()
  34. {
  35. // Act
  36. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  37. // Assert
  38. Assert.That(emailItem.Metadata, Is.EqualTo(_testMetadata));
  39. Assert.That(emailItem.DirectoryPath, Is.EqualTo(Path.Combine(_basePath, _testMetadata.DirectoryName)));
  40. }
  41. [Test]
  42. public void Constructor_WithNullMetadata_ShouldThrowArgumentNullException()
  43. {
  44. // Act & Assert
  45. var ex = Assert.Throws<ArgumentNullException>(() => new EmailItem(null, _basePath, _mockFileSystem));
  46. Assert.That(ex.ParamName, Is.EqualTo("metadata"));
  47. }
  48. [Test]
  49. public void Constructor_WithNullBasePath_ShouldThrowArgumentNullException()
  50. {
  51. // Act & Assert
  52. var ex = Assert.Throws<ArgumentNullException>(() => new EmailItem(_testMetadata, null, _mockFileSystem));
  53. Assert.That(ex.ParamName, Is.EqualTo("basePath"));
  54. }
  55. #endregion
  56. #region Property Tests
  57. [Test]
  58. public void DirectoryPath_ShouldCombineBasePathWithDirectoryName()
  59. {
  60. // Arrange
  61. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  62. var expectedPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  63. // Act & Assert
  64. Assert.That(emailItem.DirectoryPath, Is.EqualTo(expectedPath));
  65. }
  66. [Test]
  67. public void DirectoryExists_WhenDirectoryExists_ShouldReturnTrue()
  68. {
  69. // Arrange
  70. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  71. _mockFileSystem.AddDirectory(directoryPath);
  72. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  73. // Act & Assert
  74. Assert.That(emailItem.DirectoryExists, Is.True);
  75. }
  76. [Test]
  77. public void DirectoryExists_WhenDirectoryDoesNotExist_ShouldReturnFalse()
  78. {
  79. // Arrange
  80. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  81. // Act & Assert
  82. Assert.That(emailItem.DirectoryExists, Is.False);
  83. }
  84. [Test]
  85. public void JpgFiles_WhenDirectoryExists_ShouldReturnJpgFiles()
  86. {
  87. // Arrange
  88. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  89. _mockFileSystem.AddDirectory(directoryPath);
  90. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  91. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image2.jpg"), new MockFileData("image2"));
  92. _mockFileSystem.AddFile(Path.Combine(directoryPath, "document.txt"), new MockFileData("text"));
  93. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  94. // Act
  95. var jpgFiles = emailItem.JpgFiles.ToList();
  96. // Assert
  97. Assert.That(jpgFiles.Count, Is.EqualTo(2));
  98. Assert.That(jpgFiles.Any(f => f.EndsWith("image1.jpg")), Is.True);
  99. Assert.That(jpgFiles.Any(f => f.EndsWith("image2.jpg")), Is.True);
  100. Assert.That(jpgFiles.Any(f => f.EndsWith("document.txt")), Is.False);
  101. }
  102. [Test]
  103. public void JpgFiles_WhenDirectoryDoesNotExist_ShouldReturnEmptyEnumerable()
  104. {
  105. // Arrange
  106. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  107. // Act
  108. var jpgFiles = emailItem.JpgFiles.ToList();
  109. // Assert
  110. Assert.That(jpgFiles, Is.Empty);
  111. }
  112. [Test]
  113. public void FileCount_WhenDirectoryHasJpgFiles_ShouldReturnCorrectCount()
  114. {
  115. // Arrange
  116. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  117. _mockFileSystem.AddDirectory(directoryPath);
  118. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  119. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image2.jpg"), new MockFileData("image2"));
  120. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image3.jpg"), new MockFileData("image3"));
  121. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  122. // Act & Assert
  123. Assert.That(emailItem.FileCount, Is.EqualTo(3));
  124. }
  125. [Test]
  126. public void FileCount_WhenDirectoryDoesNotExist_ShouldReturnZero()
  127. {
  128. // Arrange
  129. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  130. // Act & Assert
  131. Assert.That(emailItem.FileCount, Is.EqualTo(0));
  132. }
  133. [Test]
  134. public void TotalFileSize_WhenDirectoryHasJpgFiles_ShouldReturnCorrectTotalSize()
  135. {
  136. // Arrange
  137. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  138. _mockFileSystem.AddDirectory(directoryPath);
  139. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData(new byte[100])); // 100 bytes
  140. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image2.jpg"), new MockFileData(new byte[200])); // 200 bytes
  141. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image3.jpg"), new MockFileData(new byte[300])); // 300 bytes
  142. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  143. // Act & Assert
  144. Assert.That(emailItem.TotalFileSize, Is.EqualTo(600));
  145. }
  146. [Test]
  147. public void TotalFileSize_WhenDirectoryDoesNotExist_ShouldReturnZero()
  148. {
  149. // Arrange
  150. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  151. // Act & Assert
  152. Assert.That(emailItem.TotalFileSize, Is.EqualTo(0));
  153. }
  154. [Test]
  155. public void IsReadyForProcessing_WhenStateIsReadyAndDirectoryExistsWithFiles_ShouldReturnTrue()
  156. {
  157. // Arrange
  158. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  159. _mockFileSystem.AddDirectory(directoryPath);
  160. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  161. _testMetadata.State = EmailStateEnum.Ready;
  162. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  163. // Act & Assert
  164. Assert.That(emailItem.IsReadyForProcessing, Is.True);
  165. }
  166. [Test]
  167. public void IsReadyForProcessing_WhenStateIsNotReady_ShouldReturnFalse()
  168. {
  169. // Arrange
  170. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  171. _mockFileSystem.AddDirectory(directoryPath);
  172. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  173. _testMetadata.State = EmailStateEnum.Processing;
  174. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  175. // Act & Assert
  176. Assert.That(emailItem.IsReadyForProcessing, Is.False);
  177. }
  178. [Test]
  179. public void IsReadyForProcessing_WhenDirectoryDoesNotExist_ShouldReturnFalse()
  180. {
  181. // Arrange
  182. _testMetadata.State = EmailStateEnum.Ready;
  183. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  184. // Act & Assert
  185. Assert.That(emailItem.IsReadyForProcessing, Is.False);
  186. }
  187. [Test]
  188. public void IsReadyForProcessing_WhenDirectoryExistsButNoFiles_ShouldReturnFalse()
  189. {
  190. // Arrange
  191. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  192. _mockFileSystem.AddDirectory(directoryPath);
  193. _testMetadata.State = EmailStateEnum.Ready;
  194. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  195. // Act & Assert
  196. Assert.That(emailItem.IsReadyForProcessing, Is.False);
  197. }
  198. [Test]
  199. public void CanBeReset_WhenStateIsNotProcessingOrUploading_ShouldReturnTrue()
  200. {
  201. // Arrange
  202. var testCases = new[]
  203. {
  204. EmailStateEnum.Ready,
  205. EmailStateEnum.Sending,
  206. EmailStateEnum.Sent,
  207. EmailStateEnum.Error
  208. };
  209. foreach (var state in testCases)
  210. {
  211. _testMetadata.State = state;
  212. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  213. // Act & Assert
  214. Assert.That(emailItem.CanBeReset, Is.True, $"Failed for state: {state}");
  215. }
  216. }
  217. [Test]
  218. public void CanBeReset_WhenStateIsProcessingOrUploading_ShouldReturnFalse()
  219. {
  220. // Arrange
  221. var testCases = new[]
  222. {
  223. EmailStateEnum.Processing,
  224. EmailStateEnum.Uploading
  225. };
  226. foreach (var state in testCases)
  227. {
  228. _testMetadata.State = state;
  229. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  230. // Act & Assert
  231. Assert.That(emailItem.CanBeReset, Is.False, $"Failed for state: {state}");
  232. }
  233. }
  234. [Test]
  235. public void NormalizedRecipient_ShouldReplaceSpecialCharacters()
  236. {
  237. // Arrange
  238. _testMetadata.EmailAddress = "test.user@example.com";
  239. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  240. // Act & Assert
  241. Assert.That(emailItem.NormalizedRecipient, Is.EqualTo("test_dot_user_at_example_dot_com"));
  242. }
  243. [Test]
  244. public void NormalizedRecipient_WithComplexEmail_ShouldHandleMultipleSpecialCharacters()
  245. {
  246. // Arrange
  247. _testMetadata.EmailAddress = "test.user.name@sub.domain.example.com";
  248. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  249. // Act & Assert
  250. Assert.That(emailItem.NormalizedRecipient, Is.EqualTo("test_dot_user_dot_name_at_sub_dot_domain_dot_example_dot_com"));
  251. }
  252. #endregion
  253. #region Method Tests
  254. [Test]
  255. public void GenerateZipFileName_WithDefaultTimestamp_ShouldIncludeCurrentTime()
  256. {
  257. // Arrange
  258. _testMetadata.EmailAddress = "test.user@example.com";
  259. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  260. // Act
  261. var fileName = emailItem.GenerateZipFileName();
  262. // Assert
  263. Assert.That(fileName, Does.StartWith("studioufoto_test_dot_user_at_example_dot_com_"));
  264. Assert.That(fileName, Does.EndWith(".zip"));
  265. // Check that it contains a timestamp pattern (YYYYMMDD_HHMMSS)
  266. var timestampPattern = @"\d{8}_\d{6}";
  267. Assert.That(fileName, Does.Match($@"studioufoto_test_dot_user_at_example_dot_com_{timestampPattern}\.zip"));
  268. }
  269. [Test]
  270. public void GenerateZipFileName_WithSpecificTimestamp_ShouldUseProvidedTimestamp()
  271. {
  272. // Arrange
  273. _testMetadata.EmailAddress = "test.user@example.com";
  274. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  275. var timestamp = new DateTime(2024, 5, 30, 14, 30, 45);
  276. // Act
  277. var fileName = emailItem.GenerateZipFileName(timestamp);
  278. // Assert
  279. Assert.That(fileName, Is.EqualTo("studioufoto_test_dot_user_at_example_dot_com_20240530_143045.zip"));
  280. }
  281. [Test]
  282. public void Validate_WithAllValidData_ShouldReturnValid()
  283. {
  284. // Arrange
  285. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  286. _mockFileSystem.AddDirectory(directoryPath);
  287. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  288. _testMetadata.EmailAddress = "test.user@example.com";
  289. _testMetadata.Subject = "Valid Subject";
  290. _testMetadata.Body = "Valid Body";
  291. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  292. // Act
  293. var (isValid, issues) = emailItem.Validate();
  294. // Assert
  295. Assert.That(isValid, Is.True);
  296. Assert.That(issues, Is.Empty);
  297. }
  298. [Test]
  299. public void Validate_WithMissingEmailAddress_ShouldReturnInvalid()
  300. {
  301. // Arrange
  302. _testMetadata.EmailAddress = "";
  303. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  304. // Act
  305. var (isValid, issues) = emailItem.Validate();
  306. // Assert
  307. Assert.That(isValid, Is.False);
  308. Assert.That(issues, Contains.Item("Email address is required"));
  309. }
  310. [Test]
  311. public void Validate_WithNullEmailAddress_ShouldReturnInvalid()
  312. {
  313. // Arrange
  314. _testMetadata.EmailAddress = null;
  315. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  316. // Act
  317. var (isValid, issues) = emailItem.Validate();
  318. // Assert
  319. Assert.That(isValid, Is.False);
  320. Assert.That(issues, Contains.Item("Email address is required"));
  321. }
  322. [Test]
  323. public void Validate_WithNonExistentDirectory_ShouldReturnInvalid()
  324. {
  325. // Arrange
  326. _testMetadata.EmailAddress = "test.user@example.com";
  327. _testMetadata.Subject = "Valid Subject";
  328. _testMetadata.Body = "Valid Body";
  329. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  330. // Act
  331. var (isValid, issues) = emailItem.Validate();
  332. // Assert
  333. Assert.That(isValid, Is.False);
  334. Assert.That(issues, Contains.Item($"Directory does not exist: {emailItem.DirectoryPath}"));
  335. }
  336. [Test]
  337. public void Validate_WithDirectoryButNoJpgFiles_ShouldReturnInvalid()
  338. {
  339. // Arrange
  340. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  341. _mockFileSystem.AddDirectory(directoryPath);
  342. _testMetadata.EmailAddress = "test.user@example.com";
  343. _testMetadata.Subject = "Valid Subject";
  344. _testMetadata.Body = "Valid Body";
  345. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  346. // Act
  347. var (isValid, issues) = emailItem.Validate();
  348. // Assert
  349. Assert.That(isValid, Is.False);
  350. Assert.That(issues, Contains.Item("No JPG files found in directory"));
  351. }
  352. [Test]
  353. public void Validate_WithMissingSubject_ShouldReturnInvalid()
  354. {
  355. // Arrange
  356. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  357. _mockFileSystem.AddDirectory(directoryPath);
  358. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  359. _testMetadata.EmailAddress = "test.user@example.com";
  360. _testMetadata.Subject = "";
  361. _testMetadata.Body = "Valid Body";
  362. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  363. // Act
  364. var (isValid, issues) = emailItem.Validate();
  365. // Assert
  366. Assert.That(isValid, Is.False);
  367. Assert.That(issues, Contains.Item("Email subject is required"));
  368. }
  369. [Test]
  370. public void Validate_WithMissingBody_ShouldReturnInvalid()
  371. {
  372. // Arrange
  373. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  374. _mockFileSystem.AddDirectory(directoryPath);
  375. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  376. _testMetadata.EmailAddress = "test.user@example.com";
  377. _testMetadata.Subject = "Valid Subject";
  378. _testMetadata.Body = "";
  379. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  380. // Act
  381. var (isValid, issues) = emailItem.Validate();
  382. // Assert
  383. Assert.That(isValid, Is.False);
  384. Assert.That(issues, Contains.Item("Email body is required"));
  385. }
  386. [Test]
  387. public void Validate_WithMultipleIssues_ShouldReturnAllIssues()
  388. {
  389. // Arrange
  390. _testMetadata.EmailAddress = "";
  391. _testMetadata.Subject = "";
  392. _testMetadata.Body = "";
  393. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  394. // Act
  395. var (isValid, issues) = emailItem.Validate();
  396. // Assert
  397. Assert.That(isValid, Is.False);
  398. Assert.That(issues.Count, Is.EqualTo(4)); // Email, Directory, Subject, Body
  399. Assert.That(issues, Contains.Item("Email address is required"));
  400. Assert.That(issues, Contains.Item($"Directory does not exist: {emailItem.DirectoryPath}"));
  401. Assert.That(issues, Contains.Item("Email subject is required"));
  402. Assert.That(issues, Contains.Item("Email body is required"));
  403. }
  404. [Test]
  405. public void GetSummary_ShouldReturnFormattedSummary()
  406. {
  407. // Arrange
  408. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  409. _mockFileSystem.AddDirectory(directoryPath);
  410. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  411. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image2.jpg"), new MockFileData("image2"));
  412. _testMetadata.EmailAddress = "test.user@example.com";
  413. _testMetadata.State = EmailStateEnum.Ready;
  414. _testMetadata.Orders = "1001,1002";
  415. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  416. // Act
  417. var summary = emailItem.GetSummary();
  418. // Assert
  419. Assert.That(summary, Is.EqualTo("test.user@example.com - 2 files, Ready, Orders: 1001,1002"));
  420. }
  421. [Test]
  422. public void GetSummary_WithNoFiles_ShouldShowZeroFiles()
  423. {
  424. // Arrange
  425. _testMetadata.EmailAddress = "test.user@example.com";
  426. _testMetadata.State = EmailStateEnum.Error;
  427. _testMetadata.Orders = "1001";
  428. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  429. // Act
  430. var summary = emailItem.GetSummary();
  431. // Assert
  432. Assert.That(summary, Is.EqualTo("test.user@example.com - 0 files, Error, Orders: 1001"));
  433. }
  434. #endregion
  435. #region Edge Cases and Boundary Tests
  436. [Test]
  437. public void NormalizedRecipient_WithEmptyEmail_ShouldReturnEmpty()
  438. {
  439. // Arrange
  440. _testMetadata.EmailAddress = "";
  441. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  442. // Act & Assert
  443. Assert.That(emailItem.NormalizedRecipient, Is.EqualTo(""));
  444. }
  445. [Test]
  446. public void GenerateZipFileName_WithEmptyEmail_ShouldStillGenerateFileName()
  447. {
  448. // Arrange
  449. _testMetadata.EmailAddress = "";
  450. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  451. // Act
  452. var fileName = emailItem.GenerateZipFileName();
  453. // Assert
  454. Assert.That(fileName, Does.StartWith("studioufoto__"));
  455. Assert.That(fileName, Does.EndWith(".zip"));
  456. }
  457. [Test]
  458. public void JpgFiles_WithMixedCaseExtensions_ShouldReturnJpgFilesOnly()
  459. {
  460. // Arrange
  461. var directoryPath = Path.Combine(_basePath, _testMetadata.DirectoryName);
  462. _mockFileSystem.AddDirectory(directoryPath);
  463. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image1.jpg"), new MockFileData("image1"));
  464. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image2.JPG"), new MockFileData("image2"));
  465. _mockFileSystem.AddFile(Path.Combine(directoryPath, "image3.jpeg"), new MockFileData("image3"));
  466. _mockFileSystem.AddFile(Path.Combine(directoryPath, "document.txt"), new MockFileData("text"));
  467. var emailItem = new EmailItem(_testMetadata, _basePath, _mockFileSystem);
  468. // Act
  469. var jpgFiles = emailItem.JpgFiles.ToList();
  470. // Assert
  471. // Note: MockFileSystem's GetFiles with "*.jpg" pattern is case-sensitive
  472. // This test verifies the current behavior - adjust if case-insensitive matching is needed
  473. Assert.That(jpgFiles.Count, Is.EqualTo(2)); // Only lowercase .jpg
  474. Assert.That(jpgFiles.Any(f => f.EndsWith("image1.jpg")), Is.True);
  475. }
  476. #endregion
  477. }
  478. }