AddCpuUseCaseTests.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 AddCpuUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Adds_cpu_when_server_exists()
  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. repo.GetByNameAsync("node01").Returns(server);
  19. var sut = new AddCpuUseCase(repo);
  20. // Act
  21. await sut.ExecuteAsync(
  22. "node01",
  23. "7950x",
  24. 8,
  25. 16
  26. );
  27. // Assert
  28. Assert.Single(server.Cpus);
  29. Assert.Equal("7950x", server.Cpus[0].Model);
  30. Assert.Equal(8, server.Cpus[0].Cores);
  31. Assert.Equal(16, server.Cpus[0].Threads);
  32. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  33. s.Name == "node01" &&
  34. s.Cpus.Count == 1 &&
  35. s.Cpus[0].Model == "7950x" &&
  36. s.Cpus[0].Cores == 8 &&
  37. s.Cpus[0].Threads == 16
  38. ));
  39. }
  40. [Fact]
  41. public async Task ExecuteAsync_Initializes_cpu_list_when_null()
  42. {
  43. // Arrange
  44. var repo = Substitute.For<IHardwareRepository>();
  45. var server = new Server
  46. {
  47. Name = "node01",
  48. Cpus = null
  49. };
  50. repo.GetByNameAsync("node01").Returns(server);
  51. var sut = new AddCpuUseCase(repo);
  52. // Act
  53. await sut.ExecuteAsync(
  54. "node01",
  55. "7950x",
  56. 8,
  57. 16
  58. );
  59. // Assert
  60. Assert.NotNull(server.Cpus);
  61. Assert.Single(server.Cpus);
  62. await repo.Received(1).UpdateAsync(Arg.Is<Server>(s =>
  63. s.Cpus != null &&
  64. s.Cpus.Count == 1 &&
  65. s.Cpus[0].Model == "7950x"
  66. ));
  67. }
  68. [Fact]
  69. public async Task ExecuteAsync_Does_nothing_when_server_does_not_exist()
  70. {
  71. // Arrange
  72. var repo = Substitute.For<IHardwareRepository>();
  73. repo.GetByNameAsync("node01").Returns((Hardware?)null);
  74. var sut = new AddCpuUseCase(repo);
  75. // Act
  76. await sut.ExecuteAsync(
  77. "node01",
  78. "7950x",
  79. 8,
  80. 16
  81. );
  82. // Assert
  83. await repo.DidNotReceive().UpdateAsync(Arg.Any<Server>());
  84. }
  85. }