AddDriveUseCaseTests.cs 2.4 KB

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