AddDriveUseCaseTests.cs 2.5 KB

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