AddDriveUseCaseTests.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Server.Drive;
  4. namespace Tests.Hardware;
  5. public class AddDrivesUseCaseTests
  6. {
  7. [Fact]
  8. public async Task ExecuteAsync_Adds_drive_when_server_exists()
  9. {
  10. // Arrange
  11. var repo = Substitute.For<IHardwareRepository>();
  12. var server = new RackPeek.Domain.Resources.Hardware.Models.Server
  13. {
  14. Name = "node01",
  15. Drives = new List<RackPeek.Domain.Resources.Hardware.Models.Drive>()
  16. };
  17. repo.GetByNameAsync("node01").Returns(server);
  18. var sut = new AddDrivesUseCase(repo);
  19. // Act
  20. await sut.ExecuteAsync(
  21. serverName: "node01",
  22. type: "NVMe",
  23. size: 2000
  24. );
  25. // Assert
  26. Assert.Single(server.Drives);
  27. Assert.Equal("NVMe", server.Drives[0].Type);
  28. Assert.Equal(2000, server.Drives[0].Size);
  29. await repo.Received(1).UpdateAsync(Arg.Is<RackPeek.Domain.Resources.Hardware.Models.Server>(s =>
  30. s.Name == "node01" &&
  31. s.Drives.Count == 1 &&
  32. s.Drives[0].Type == "NVMe" &&
  33. s.Drives[0].Size == 2000
  34. ));
  35. }
  36. [Fact]
  37. public async Task ExecuteAsync_Initializes_drive_list_when_null()
  38. {
  39. // Arrange
  40. var repo = Substitute.For<IHardwareRepository>();
  41. var server = new RackPeek.Domain.Resources.Hardware.Models.Server
  42. {
  43. Name = "node01",
  44. Drives = null
  45. };
  46. repo.GetByNameAsync("node01").Returns(server);
  47. var sut = new AddDrivesUseCase(repo);
  48. // Act
  49. await sut.ExecuteAsync(
  50. serverName: "node01",
  51. type: "SATA",
  52. size: 500
  53. );
  54. // Assert
  55. Assert.NotNull(server.Drives);
  56. Assert.Single(server.Drives);
  57. await repo.Received(1).UpdateAsync(Arg.Is<RackPeek.Domain.Resources.Hardware.Models.Server>(s =>
  58. s.Drives != null &&
  59. s.Drives.Count == 1 &&
  60. s.Drives[0].Type == "SATA"
  61. ));
  62. }
  63. [Fact]
  64. public async Task ExecuteAsync_Does_nothing_when_server_does_not_exist()
  65. {
  66. // Arrange
  67. var repo = Substitute.For<IHardwareRepository>();
  68. repo.GetByNameAsync("node01").Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  69. var sut = new AddDrivesUseCase(repo);
  70. // Act
  71. await sut.ExecuteAsync(
  72. serverName: "node01",
  73. type: "NVMe",
  74. size: 2000
  75. );
  76. // Assert
  77. await repo.DidNotReceive().UpdateAsync(Arg.Any<RackPeek.Domain.Resources.Hardware.Models.Server>());
  78. }
  79. }