RemoveSystemDriveUseCaseTests.cs 2.1 KB

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