UpdateServerUseCaseTests.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using NSubstitute;
  2. using RackPeek.Domain.Helpers;
  3. using RackPeek.Domain.Resources.Hardware;
  4. using RackPeek.Domain.Resources.Hardware.Models;
  5. using RackPeek.Domain.Resources.Hardware.Servers;
  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. true
  30. );
  31. // Assert
  32. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  33. s.Name == "node01" &&
  34. s.Ram.Size == 64 &&
  35. s.Ipmi == true
  36. ));
  37. }
  38. [Fact]
  39. public async Task ExecuteAsync_Throws_if_server_not_found()
  40. {
  41. // Arrange
  42. var repo = Substitute.For<IHardwareRepository>();
  43. repo.GetByNameAsync("node01").Returns((Hardware?)null);
  44. var sut = new UpdateServerUseCase(repo);
  45. // Act
  46. var ex = await Assert.ThrowsAsync<NotFoundException>(() =>
  47. sut.ExecuteAsync("node01", 64)
  48. );
  49. // Assert
  50. Assert.Equal("Server 'node01' not found.", ex.Message);
  51. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  52. }
  53. [Fact]
  54. public async Task ExecuteAsync_Preserves_existing_values_when_not_provided()
  55. {
  56. // Arrange
  57. var repo = Substitute.For<IHardwareRepository>();
  58. repo.GetByNameAsync("node01").Returns(new Server
  59. {
  60. Name = "node01",
  61. Ipmi = false,
  62. Ram = new Ram { Size = 32 },
  63. Cpus = new List<Cpu>
  64. {
  65. new() { Model = "Old", Cores = 2, Threads = 4 }
  66. }
  67. });
  68. var sut = new UpdateServerUseCase(repo);
  69. // Act
  70. await sut.ExecuteAsync(
  71. "node01"
  72. );
  73. // Assert
  74. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  75. s.Ram.Size == 32 &&
  76. s.Ipmi == false
  77. ));
  78. }
  79. }