|
1 | 1 | using FluentAssertions; |
2 | 2 | using Melodee.Common.Models; |
3 | 3 | using Melodee.Common.Models.Extensions; |
| 4 | +using NodaTime; |
4 | 5 |
|
5 | 6 | namespace Melodee.Tests.Common.Models.Extensions; |
6 | 7 |
|
@@ -311,6 +312,68 @@ public void AllAlbumMediaDirectories_WithMediaDirectories_ReturnsMediaDirs() |
311 | 312 | mediaDirs.Should().Contain(d => d.Name == "CD2"); |
312 | 313 | } |
313 | 314 |
|
| 315 | + [Fact] |
| 316 | + public void GetFileSystemDirectoryInfosToProcess_WithOldUnprocessedMediaDirectory_ReturnsDirectory() |
| 317 | + { |
| 318 | + var root = CreateTestDirectory(); |
| 319 | + var albumPath = Path.Combine(root.FullName(), "Album"); |
| 320 | + Directory.CreateDirectory(albumPath); |
| 321 | + var mediaPath = Path.Combine(albumPath, "song.mp3"); |
| 322 | + File.WriteAllText(mediaPath, "fake media"); |
| 323 | + var oldWriteTime = DateTime.UtcNow.AddDays(-10); |
| 324 | + File.SetLastWriteTimeUtc(mediaPath, oldWriteTime); |
| 325 | + Directory.SetLastWriteTimeUtc(albumPath, oldWriteTime); |
| 326 | + |
| 327 | + var modifiedSince = Instant.FromDateTimeUtc(DateTime.UtcNow.AddDays(-1)); |
| 328 | + var directories = root.GetFileSystemDirectoryInfosToProcess(modifiedSince, SearchOption.AllDirectories).ToList(); |
| 329 | + |
| 330 | + directories.Should().ContainSingle(d => d.Name == "Album"); |
| 331 | + } |
| 332 | + |
| 333 | + [Fact] |
| 334 | + public void GetFileSystemDirectoryInfosToProcess_WithOldProcessedMediaDirectory_SkipsDirectory() |
| 335 | + { |
| 336 | + var root = CreateTestDirectory(); |
| 337 | + var albumPath = Path.Combine(root.FullName(), "Album"); |
| 338 | + Directory.CreateDirectory(albumPath); |
| 339 | + var mediaPath = Path.Combine(albumPath, "song.mp3"); |
| 340 | + var metadataPath = Path.Combine(albumPath, Album.JsonFileName); |
| 341 | + File.WriteAllText(mediaPath, "fake media"); |
| 342 | + File.WriteAllText(metadataPath, "{}"); |
| 343 | + var oldWriteTime = DateTime.UtcNow.AddDays(-10); |
| 344 | + File.SetLastWriteTimeUtc(mediaPath, oldWriteTime); |
| 345 | + File.SetLastWriteTimeUtc(metadataPath, oldWriteTime); |
| 346 | + Directory.SetLastWriteTimeUtc(albumPath, oldWriteTime); |
| 347 | + |
| 348 | + var modifiedSince = Instant.FromDateTimeUtc(DateTime.UtcNow.AddDays(-1)); |
| 349 | + var directories = root.GetFileSystemDirectoryInfosToProcess(modifiedSince, SearchOption.AllDirectories).ToList(); |
| 350 | + |
| 351 | + directories.Should().NotContain(d => d.Name == "Album"); |
| 352 | + } |
| 353 | + |
| 354 | + [Fact] |
| 355 | + public void GetFileSystemDirectoryInfosToProcess_WithModifiedMediaFileInOldProcessedDirectory_ReturnsDirectory() |
| 356 | + { |
| 357 | + var root = CreateTestDirectory(); |
| 358 | + var albumPath = Path.Combine(root.FullName(), "Album"); |
| 359 | + Directory.CreateDirectory(albumPath); |
| 360 | + var mediaPath = Path.Combine(albumPath, "song.mp3"); |
| 361 | + var metadataPath = Path.Combine(albumPath, Album.JsonFileName); |
| 362 | + File.WriteAllText(mediaPath, "fake media"); |
| 363 | + File.WriteAllText(metadataPath, "{}"); |
| 364 | + var oldWriteTime = DateTime.UtcNow.AddDays(-10); |
| 365 | + var modifiedSince = DateTime.UtcNow.AddDays(-1); |
| 366 | + File.SetLastWriteTimeUtc(metadataPath, oldWriteTime); |
| 367 | + Directory.SetLastWriteTimeUtc(albumPath, oldWriteTime); |
| 368 | + File.SetLastWriteTimeUtc(mediaPath, DateTime.UtcNow); |
| 369 | + |
| 370 | + var directories = root |
| 371 | + .GetFileSystemDirectoryInfosToProcess(Instant.FromDateTimeUtc(modifiedSince), SearchOption.AllDirectories) |
| 372 | + .ToList(); |
| 373 | + |
| 374 | + directories.Should().ContainSingle(d => d.Name == "Album"); |
| 375 | + } |
| 376 | + |
314 | 377 | [Fact] |
315 | 378 | public void GetParent_DirectoryWithParent_ReturnsParent() |
316 | 379 | { |
|
0 commit comments