UpdateSystemDriveUseCaseTests.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.ComponentModel.DataAnnotations;
  2. using NSubstitute;
  3. using RackPeek.Domain.Helpers;
  4. using RackPeek.Domain.Resources.Hardware.Models;
  5. using RackPeek.Domain.Resources.SystemResources;
  6. using RackPeek.Domain.Resources.SystemResources.UseCases;
  7. namespace Tests.HardwareResources.Systems;
  8. public class UpdateSystemDriveUseCaseTests
  9. {
  10. [Fact]
  11. public async Task ExecuteAsync_Updates_drive_when_found()
  12. {
  13. // Arrange
  14. var repo = Substitute.For<ISystemRepository>();
  15. var system = new SystemResource
  16. {
  17. Name = "sys1",
  18. Drives = new List<Drive> { new() { Type = "ssd", Size = 256 } }
  19. };
  20. repo.GetByNameAsync("sys1").Returns(system);
  21. var sut = new UpdateSystemDriveUseCase(repo);
  22. // Act
  23. await sut.ExecuteAsync("sys1", "ssd", 512);
  24. // Assert
  25. Assert.Equal(512, system.Drives[0].Size);
  26. await repo.Received(1).UpdateAsync(system);
  27. }
  28. [Fact]
  29. public async Task ExecuteAsync_Throws_when_system_not_found()
  30. {
  31. var repo = Substitute.For<ISystemRepository>();
  32. repo.GetByNameAsync("sys1").Returns((SystemResource?)null);
  33. var sut = new UpdateSystemDriveUseCase(repo);
  34. await Assert.ThrowsAsync<NotFoundException>(() =>
  35. sut.ExecuteAsync("sys1", "ssd", 512)
  36. );
  37. }
  38. [Fact]
  39. public async Task ExecuteAsync_Throws_when_drive_not_found()
  40. {
  41. var repo = Substitute.For<ISystemRepository>();
  42. var system = new SystemResource { Name = "sys1", Drives = new List<Drive>() };
  43. repo.GetByNameAsync("sys1").Returns(system);
  44. var sut = new UpdateSystemDriveUseCase(repo);
  45. await Assert.ThrowsAsync<NotFoundException>(() =>
  46. sut.ExecuteAsync("sys1", "ssd", 512)
  47. );
  48. }
  49. [Fact]
  50. public async Task ExecuteAsync_Throws_when_type_invalid()
  51. {
  52. var repo = Substitute.For<ISystemRepository>();
  53. var sut = new UpdateSystemDriveUseCase(repo);
  54. await Assert.ThrowsAsync<ValidationException>(() =>
  55. sut.ExecuteAsync("sys1", "", 512)
  56. );
  57. }
  58. [Fact]
  59. public async Task ExecuteAsync_Throws_when_size_negative()
  60. {
  61. var repo = Substitute.For<ISystemRepository>();
  62. var sut = new UpdateSystemDriveUseCase(repo);
  63. await Assert.ThrowsAsync<ValidationException>(() =>
  64. sut.ExecuteAsync("sys1", "ssd", -1)
  65. );
  66. }
  67. }