UpdateServerUseCaseTests.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Models;
  4. using RackPeek.Domain.Resources.Hardware.Server;
  5. namespace Tests.Hardware;
  6. public class UpdateServerUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Updates_ram_ipmi_and_cpu_when_provided()
  10. {
  11. // Arrange
  12. var repo = Substitute.For<IHardwareRepository>();
  13. repo.GetByNameAsync("node01").Returns(new Server
  14. {
  15. Name = "node01",
  16. Ipmi = false,
  17. Ram = new Ram { Size = 32 },
  18. Cpus = new List<Cpu>
  19. {
  20. new Cpu { Model = "Old", Cores = 2, Threads = 4 }
  21. }
  22. });
  23. var sut = new UpdateServerUseCase(repo);
  24. // Act
  25. await sut.ExecuteAsync(
  26. name: "node01",
  27. ramGb: 64,
  28. ipmi: true
  29. );
  30. // Assert
  31. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  32. s.Name == "node01" &&
  33. s.Ram.Size == 64 &&
  34. s.Ipmi == true
  35. ));
  36. }
  37. [Fact]
  38. public async Task ExecuteAsync_Throws_if_server_not_found()
  39. {
  40. // Arrange
  41. var repo = Substitute.For<IHardwareRepository>();
  42. repo.GetByNameAsync("node01").Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  43. var sut = new UpdateServerUseCase(repo);
  44. // Act
  45. var ex = await Assert.ThrowsAsync<InvalidOperationException>(() =>
  46. sut.ExecuteAsync("node01", ramGb: 64)
  47. );
  48. // Assert
  49. Assert.Equal("Server 'node01' not found.", ex.Message);
  50. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  51. }
  52. [Fact]
  53. public async Task ExecuteAsync_Preserves_existing_values_when_not_provided()
  54. {
  55. // Arrange
  56. var repo = Substitute.For<IHardwareRepository>();
  57. repo.GetByNameAsync("node01").Returns(new Server
  58. {
  59. Name = "node01",
  60. Ipmi = false,
  61. Ram = new Ram { Size = 32 },
  62. Cpus = new List<Cpu>
  63. {
  64. new Cpu { Model = "Old", Cores = 2, Threads = 4 }
  65. }
  66. });
  67. var sut = new UpdateServerUseCase(repo);
  68. // Act
  69. await sut.ExecuteAsync(
  70. name: "node01",
  71. ramGb: null,
  72. ipmi: null
  73. );
  74. // Assert
  75. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  76. s.Ram.Size == 32 &&
  77. s.Ipmi == false
  78. ));
  79. }
  80. }