RemoveCpuUseCaseTests.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 RemoveCpuUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Removes_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. new() { Model = "7900x", Cores = 12, Threads = 24 }
  20. }
  21. };
  22. repo.GetByNameAsync("node01").Returns(server);
  23. var sut = new RemoveCpuUseCase(repo);
  24. // Act
  25. await sut.ExecuteAsync("node01", 0);
  26. // Assert
  27. Assert.Single(server.Cpus);
  28. Assert.Equal("7900x", server.Cpus[0].Model);
  29. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  30. s.Name == "node01" &&
  31. s.Cpus.Count == 1 &&
  32. s.Cpus[0].Model == "7900x"
  33. ));
  34. }
  35. [Fact]
  36. public async Task ExecuteAsync_Throws_if_index_out_of_range()
  37. {
  38. // Arrange
  39. var repo = Substitute.For<IHardwareRepository>();
  40. var server = new Server
  41. {
  42. Name = "node01",
  43. Cpus = new List<Cpu>
  44. {
  45. new() { Model = "7950x", Cores = 8, Threads = 16 }
  46. }
  47. };
  48. repo.GetByNameAsync("node01").Returns(server);
  49. var sut = new RemoveCpuUseCase(repo);
  50. // Act & Assert
  51. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(async () =>
  52. await sut.ExecuteAsync("node01", 1)
  53. );
  54. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  55. }
  56. [Fact]
  57. public async Task ExecuteAsync_Does_nothing_when_server_does_not_exist()
  58. {
  59. // Arrange
  60. var repo = Substitute.For<IHardwareRepository>();
  61. repo.GetByNameAsync("node01").Returns((Hardware?)null);
  62. var sut = new RemoveCpuUseCase(repo);
  63. // Act
  64. await sut.ExecuteAsync("node01", 0);
  65. // Assert
  66. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  67. }
  68. }