AddServerUseCaseTests.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Hardware;
  3. using RackPeek.Domain.Resources.Hardware.Models;
  4. using RackPeek.Domain.Resources.Hardware.Server;
  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. "node01"
  18. );
  19. // Assert
  20. await repo.Received(1).AddAsync(Arg.Is<Server>(s =>
  21. s.Name == "node01"
  22. ));
  23. }
  24. [Fact]
  25. public async Task ExecuteAsync_Throws_if_server_already_exists()
  26. {
  27. // Arrange
  28. var repo = Substitute.For<IHardwareRepository>();
  29. repo.GetByNameAsync("node01").Returns(new Server { Name = "node01" });
  30. var sut = new AddServerUseCase(repo);
  31. // Act
  32. var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
  33. await sut.ExecuteAsync(
  34. "node01"
  35. )
  36. );
  37. // Assert
  38. Assert.Equal("Server 'node01' already exists.", ex.Message);
  39. await repo.DidNotReceive().AddAsync(Arg.Any<Server>());
  40. }
  41. }