RemoveSystemDriveUseCaseTests.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.ComponentModel.DataAnnotations;
  2. using NSubstitute;
  3. using RackPeek.Domain.Helpers;
  4. using RackPeek.Domain.Resources.Hardware.Models;
  5. using RackPeek.Domain.Resources.SystemResources;
  6. using RackPeek.Domain.Resources.SystemResources.UseCases;
  7. namespace Tests.HardwareResources.Systems;
  8. public class RemoveSystemDriveUseCaseTests
  9. {
  10. [Fact]
  11. public async Task ExecuteAsync_Removes_drive_when_found()
  12. {
  13. // Arrange
  14. var repo = Substitute.For<ISystemRepository>();
  15. var drive = new Drive { Type = "ssd", Size = 256 };
  16. var system = new SystemResource { Name = "sys1", Drives = new List<Drive> { drive } };
  17. repo.GetByNameAsync("sys1").Returns(system);
  18. var sut = new RemoveSystemDriveUseCase(repo);
  19. // Act
  20. await sut.ExecuteAsync("sys1", 0);
  21. // Assert
  22. Assert.Empty(system.Drives);
  23. await repo.Received(1).UpdateAsync(system);
  24. }
  25. [Fact]
  26. public async Task ExecuteAsync_Throws_when_system_not_found()
  27. {
  28. var repo = Substitute.For<ISystemRepository>();
  29. repo.GetByNameAsync("sys1").Returns((SystemResource?)null);
  30. var sut = new RemoveSystemDriveUseCase(repo);
  31. await Assert.ThrowsAsync<NotFoundException>(() => sut.ExecuteAsync("sys1", 0));
  32. }
  33. [Fact]
  34. public async Task ExecuteAsync_Throws_when_drive_not_found()
  35. {
  36. var repo = Substitute.For<ISystemRepository>();
  37. var system = new SystemResource { Name = "sys1", Drives = new List<Drive>() };
  38. repo.GetByNameAsync("sys1").Returns(system);
  39. var sut = new RemoveSystemDriveUseCase(repo);
  40. await Assert.ThrowsAsync<NotFoundException>(() => sut.ExecuteAsync("sys1", 0));
  41. }
  42. [Fact]
  43. public async Task ExecuteAsync_Throws_when_index_invalid()
  44. {
  45. var repo = Substitute.For<ISystemRepository>();
  46. repo.GetByNameAsync("sys1")
  47. .Returns(new SystemResource
  48. {
  49. Name = "sys1", Drives = new List<Drive> { new Drive { Type = "ssd", Size = 256 } }
  50. });
  51. var sut = new RemoveSystemDriveUseCase(repo);
  52. await Assert.ThrowsAsync<NotFoundException>(() => sut.ExecuteAsync("sys1", -1));
  53. }
  54. }