AddGpuUseCaseTests.cs 2.4 KB

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