AddCpuUseCaseTests.cs 2.8 KB

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