AddGpuUseCaseTests.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Models;
  4. using RackPeek.Domain.Resources.Hardware.Server.Gpu;
  5. namespace Tests.Hardware;
  6. public class AddGpuUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Adds_gpu_when_server_exists()
  10. {
  11. // Arrange
  12. var repo = Substitute.For<IHardwareRepository>();
  13. var server = new Server
  14. {
  15. Name = "node01",
  16. Gpus = new List<Gpu>()
  17. };
  18. repo.GetByNameAsync("node01").Returns(server);
  19. var sut = new AddGpuUseCase(repo);
  20. // Act
  21. await sut.ExecuteAsync(
  22. "node01",
  23. "RTX 4090",
  24. 24
  25. );
  26. // Assert
  27. Assert.Single(server.Gpus);
  28. Assert.Equal("RTX 4090", server.Gpus[0].Model);
  29. Assert.Equal(24, server.Gpus[0].Vram);
  30. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  31. s.Name == "node01" &&
  32. s.Gpus.Count == 1 &&
  33. s.Gpus[0].Model == "RTX 4090" &&
  34. s.Gpus[0].Vram == 24
  35. ));
  36. }
  37. [Fact]
  38. public async Task ExecuteAsync_Initializes_gpu_list_when_null()
  39. {
  40. // Arrange
  41. var repo = Substitute.For<IHardwareRepository>();
  42. var server = new Server
  43. {
  44. Name = "node01",
  45. Gpus = null
  46. };
  47. repo.GetByNameAsync("node01").Returns(server);
  48. var sut = new AddGpuUseCase(repo);
  49. // Act
  50. await sut.ExecuteAsync(
  51. "node01",
  52. "RTX 3080",
  53. 10
  54. );
  55. // Assert
  56. Assert.NotNull(server.Gpus);
  57. Assert.Single(server.Gpus);
  58. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  59. s.Gpus != null &&
  60. s.Gpus.Count == 1 &&
  61. s.Gpus[0].Model == "RTX 3080"
  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")
  70. .Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  71. var sut = new AddGpuUseCase(repo);
  72. // Act
  73. await sut.ExecuteAsync(
  74. "node01",
  75. "RTX 4090",
  76. 24
  77. );
  78. // Assert
  79. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  80. }
  81. }