RemoveSystemDriveUseCaseTests.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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
  17. {
  18. Name = "sys1",
  19. Drives = new List<Drive> { drive }
  20. };
  21. repo.GetByNameAsync("sys1").Returns(system);
  22. var sut = new RemoveSystemDriveUseCase(repo);
  23. // Act
  24. await sut.ExecuteAsync("sys1", 0);
  25. // Assert
  26. Assert.Empty(system.Drives);
  27. await repo.Received(1).UpdateAsync(system);
  28. }
  29. [Fact]
  30. public async Task ExecuteAsync_Throws_when_system_not_found()
  31. {
  32. var repo = Substitute.For<ISystemRepository>();
  33. repo.GetByNameAsync("sys1").Returns((SystemResource?)null);
  34. var sut = new RemoveSystemDriveUseCase(repo);
  35. await Assert.ThrowsAsync<NotFoundException>(() =>
  36. sut.ExecuteAsync("sys1", 0)
  37. );
  38. }
  39. [Fact]
  40. public async Task ExecuteAsync_Throws_when_drive_not_found()
  41. {
  42. var repo = Substitute.For<ISystemRepository>();
  43. var system = new SystemResource { Name = "sys1", Drives = new List<Drive>() };
  44. repo.GetByNameAsync("sys1").Returns(system);
  45. var sut = new RemoveSystemDriveUseCase(repo);
  46. await Assert.ThrowsAsync<NotFoundException>(() =>
  47. sut.ExecuteAsync("sys1", 0)
  48. );
  49. }
  50. [Fact]
  51. public async Task ExecuteAsync_Throws_when_index_invalid()
  52. {
  53. var repo = Substitute.For<ISystemRepository>();
  54. var sut = new RemoveSystemDriveUseCase(repo);
  55. await Assert.ThrowsAsync<ValidationException>(() =>
  56. sut.ExecuteAsync("sys1", -1)
  57. );
  58. }
  59. }