UpdateGpuUseCaseTests.cs 2.4 KB

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