UpdateCpuUseCaseTests.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Servers.Cpus;
  4. using RackPeek.Domain.Resources.Models;
  5. namespace Tests.HardwareResources;
  6. public class UpdateCpuUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Updates_cpu_when_index_is_valid()
  10. {
  11. // Arrange
  12. var repo = Substitute.For<IHardwareRepository>();
  13. var server = new Server
  14. {
  15. Name = "node01",
  16. Cpus = new List<Cpu>
  17. {
  18. new() { Model = "7950x", Cores = 8, Threads = 16 }
  19. }
  20. };
  21. repo.GetByNameAsync("node01").Returns(server);
  22. var sut = new UpdateCpuUseCase(repo);
  23. // Act
  24. await sut.ExecuteAsync(
  25. "node01",
  26. 0,
  27. "7900x",
  28. 12,
  29. 24
  30. );
  31. // Assert
  32. Assert.Equal("7900x", server.Cpus[0].Model);
  33. Assert.Equal(12, server.Cpus[0].Cores);
  34. Assert.Equal(24, server.Cpus[0].Threads);
  35. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  36. s.Name == "node01" &&
  37. s.Cpus.Count == 1 &&
  38. s.Cpus[0].Model == "7900x" &&
  39. s.Cpus[0].Cores == 12 &&
  40. s.Cpus[0].Threads == 24
  41. ));
  42. }
  43. [Fact]
  44. public async Task ExecuteAsync_Throws_if_index_out_of_range()
  45. {
  46. // Arrange
  47. var repo = Substitute.For<IHardwareRepository>();
  48. var server = new Server
  49. {
  50. Name = "node01",
  51. Cpus = new List<Cpu>
  52. {
  53. new() { Model = "7950x", Cores = 8, Threads = 16 }
  54. }
  55. };
  56. repo.GetByNameAsync("node01").Returns(server);
  57. var sut = new UpdateCpuUseCase(repo);
  58. // Act & Assert
  59. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(async () =>
  60. await sut.ExecuteAsync(
  61. "node01",
  62. 1,
  63. "7900x",
  64. 12,
  65. 24
  66. )
  67. );
  68. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  69. }
  70. [Fact]
  71. public async Task ExecuteAsync_Does_nothing_when_server_does_not_exist()
  72. {
  73. // Arrange
  74. var repo = Substitute.For<IHardwareRepository>();
  75. repo.GetByNameAsync("node01").Returns((Hardware?)null);
  76. var sut = new UpdateCpuUseCase(repo);
  77. // Act
  78. await sut.ExecuteAsync(
  79. "node01",
  80. 0,
  81. "7900x",
  82. 12,
  83. 24
  84. );
  85. // Assert
  86. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  87. }
  88. }