UpdateServerUseCaseTests.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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() { Model = "Old", Cores = 2, Threads = 4 }
  21. }
  22. });
  23. var sut = new UpdateServerUseCase(repo);
  24. // Act
  25. await sut.ExecuteAsync(
  26. "node01",
  27. 64,
  28. 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", 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() { Model = "Old", Cores = 2, Threads = 4 }
  65. }
  66. });
  67. var sut = new UpdateServerUseCase(repo);
  68. // Act
  69. await sut.ExecuteAsync(
  70. "node01"
  71. );
  72. // Assert
  73. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  74. s.Ram.Size == 32 &&
  75. s.Ipmi == false
  76. ));
  77. }
  78. }