AddServerUseCaseTests.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Crud;
  4. using RackPeek.Domain.Resources.Hardware.Models;
  5. namespace Tests.Hardware;
  6. public class AddServerUseCaseTests
  7. {
  8. [Fact]
  9. public async Task ExecuteAsync_Adds_new_server_when_not_exists()
  10. {
  11. // Arrange
  12. var repo = Substitute.For<IHardwareRepository>();
  13. repo.GetByNameAsync("node01").Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  14. var sut = new AddServerUseCase(repo);
  15. // Act
  16. await sut.ExecuteAsync(
  17. name: "node01",
  18. cpuModel: "Xeon E3",
  19. cores: 4,
  20. threads: 8,
  21. ramGb: 32,
  22. ipmi: true
  23. );
  24. // Assert
  25. await repo.Received(1).AddAsync(Arg.Is<Server>(s =>
  26. s.Name == "node01" &&
  27. s.Cpus != null &&
  28. s.Cpus.Count == 1 &&
  29. s.Cpus[0].Model == "Xeon E3" &&
  30. s.Cpus[0].Cores == 4 &&
  31. s.Cpus[0].Threads == 8 &&
  32. s.Ram.Size == 32 &&
  33. s.Ipmi == true
  34. ));
  35. }
  36. [Fact]
  37. public async Task ExecuteAsync_Throws_if_server_already_exists()
  38. {
  39. // Arrange
  40. var repo = Substitute.For<IHardwareRepository>();
  41. repo.GetByNameAsync("node01").Returns(new Server { Name = "node01" });
  42. var sut = new AddServerUseCase(repo);
  43. // Act
  44. var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
  45. await sut.ExecuteAsync(
  46. name: "node01",
  47. cpuModel: "Xeon E3",
  48. cores: 4,
  49. threads: 8,
  50. ramGb: 32,
  51. ipmi: true
  52. )
  53. );
  54. // Assert
  55. Assert.Equal("Server 'node01' already exists.", ex.Message);
  56. await repo.DidNotReceive().AddAsync(Arg.Any<Server>());
  57. }
  58. }