UpdateServerUseCaseTests.cs 2.4 KB

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