AddServerUseCaseTests.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Server;
  4. namespace Tests.Hardware;
  5. public class AddServerUseCaseTests
  6. {
  7. [Fact]
  8. public async Task ExecuteAsync_Adds_new_server_when_not_exists()
  9. {
  10. // Arrange
  11. var repo = Substitute.For<IHardwareRepository>();
  12. repo.GetByNameAsync("node01").Returns((RackPeek.Domain.Resources.Hardware.Models.Hardware?)null);
  13. var sut = new AddServerUseCase(repo);
  14. // Act
  15. await sut.ExecuteAsync(
  16. name: "node01"
  17. );
  18. // Assert
  19. await repo.Received(1).AddAsync(Arg.Is<RackPeek.Domain.Resources.Hardware.Models.Server>(s =>
  20. s.Name == "node01"
  21. ));
  22. }
  23. [Fact]
  24. public async Task ExecuteAsync_Throws_if_server_already_exists()
  25. {
  26. // Arrange
  27. var repo = Substitute.For<IHardwareRepository>();
  28. repo.GetByNameAsync("node01").Returns(new RackPeek.Domain.Resources.Hardware.Models.Server { Name = "node01" });
  29. var sut = new AddServerUseCase(repo);
  30. // Act
  31. var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
  32. await sut.ExecuteAsync(
  33. name: "node01"
  34. )
  35. );
  36. // Assert
  37. Assert.Equal("Server 'node01' already exists.", ex.Message);
  38. await repo.DidNotReceive().AddAsync(Arg.Any<RackPeek.Domain.Resources.Hardware.Models.Server>());
  39. }
  40. }