BbJLeB

Exam

Feb 25th, 2024
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JSON 7.02 KB | None | 0 0
  1. using NUnit.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using GardenConsoleAPI.Business;
  7. using GardenConsoleAPI.Business.Contracts;
  8. using GardenConsoleAPI.DataAccess;
  9. using GardenConsoleAPI.Data.Models;
  10.  
  11. namespace GardenConsoleAPI.IntegrationTests.NUnit
  12. {
  13.     public class IntegrationTests
  14.     {
  15.         private TestPlantsDbContext dbContext;
  16.         private IPlantsManager plantsManager;
  17.  
  18.         [SetUp]
  19.         public void SetUp()
  20.         {
  21.             this.dbContext = new TestPlantsDbContext();
  22.             this.plantsManager = new PlantsManager(new PlantsRepository(this.dbContext));
  23.         }
  24.  
  25.         [TearDown]
  26.         public void TearDown()
  27.         {
  28.             this.dbContext.Database.EnsureDeleted();
  29.             this.dbContext.Dispose();
  30.         }
  31.  
  32.         [Test]
  33.         public async Task AddPlantAsync_ShouldAddNewPlant()
  34.         {
  35.             // Arrange
  36.             var plant = new Plant
  37.             {
  38.                 CatalogNumber = "001",
  39.                 Name = "Rose",
  40.                 Type = "Flower",
  41.                 FoodType = "Nectar"
  42.             };
  43.  
  44.             // Act
  45.             await this.plantsManager.AddPlantAsync(plant);
  46.  
  47.             // Assert
  48.             var retrievedPlant = await this.plantsManager.GetSpecificAsync("001");
  49.             Assert.IsNotNull(retrievedPlant);
  50.             Assert.AreEqual("Rose", retrievedPlant.Name);
  51.         }
  52.  
  53.         [Test]
  54.         public async Task AddPlantAsync_TryToAddPlantWithInvalidCredentials_ShouldThrowException()
  55.         {
  56.             // Arrange
  57.             var invalidPlant = new Plant(); // Not providing required properties
  58.  
  59.             // Act & Assert
  60.             Assert.ThrowsAsync<Exception>(async () => await this.plantsManager.AddPlantAsync(invalidPlant));
  61.         }
  62.  
  63.         [Test]
  64.         public async Task DeletePlantAsync_WithValidCatalogNumber_ShouldRemovePlantFromDb()
  65.         {
  66.             // Arrange
  67.             var plant = new Plant
  68.             {
  69.                 CatalogNumber = "001",
  70.                 Name = "Rose",
  71.                 Type = "Flower",
  72.                 FoodType = "Nectar"
  73.             };
  74.             await this.plantsManager.AddPlantAsync(plant);
  75.  
  76.             // Act
  77.             await this.plantsManager.DeletePlantAsync("001");
  78.  
  79.             // Assert
  80.             Assert.ThrowsAsync<KeyNotFoundException>(async () => await this.plantsManager.GetSpecificAsync("001"));
  81.         }
  82.  
  83.         [Test]
  84.         public async Task DeletePlantAsync_TryToDeleteWithNullOrWhiteSpaceCatalogNumber_ShouldThrowException()
  85.         {
  86.             // Arrange & Act & Assert
  87.             Assert.ThrowsAsync<ArgumentNullException>(async () => await this.plantsManager.DeletePlantAsync(null));
  88.             Assert.ThrowsAsync<ArgumentNullException>(async () => await this.plantsManager.DeletePlantAsync(""));
  89.             Assert.ThrowsAsync<ArgumentNullException>(async () => await this.plantsManager.DeletePlantAsync(" "));
  90.         }
  91.  
  92.         [Test]
  93.         public async Task GetAllAsync_WhenPlantsExist_ShouldReturnAllPlants()
  94.         {
  95.             // Arrange
  96.             var plant1 = new Plant { CatalogNumber = "001", Name = "Rose", Type = "Flower", FoodType = "Nectar" };
  97.             var plant2 = new Plant { CatalogNumber = "002", Name = "Carrot", Type = "Vegetable", FoodType = "Roots" };
  98.             await this.plantsManager.AddPlantAsync(plant1);
  99.             await this.plantsManager.AddPlantAsync(plant2);
  100.  
  101.             // Act
  102.             var plants = await this.plantsManager.GetAllAsync();
  103.  
  104.             // Assert
  105.             Assert.IsNotNull(plants);
  106.             Assert.AreEqual(2, plants.Count());
  107.             Assert.IsTrue(plants.Any(p => p.CatalogNumber == "001"));
  108.             Assert.IsTrue(plants.Any(p => p.CatalogNumber == "002"));
  109.         }
  110.  
  111.         [Test]
  112.         public async Task GetAllAsync_WhenNoPlantsExist_ShouldThrowKeyNotFoundException()
  113.         {
  114.             // Arrange & Act & Assert
  115.             Assert.ThrowsAsync<KeyNotFoundException>(async () => await this.plantsManager.GetAllAsync());
  116.         }
  117.  
  118.         [Test]
  119.         public async Task SearchByFoodTypeAsync_WithExistingFoodType_ShouldReturnMatchingPlants()
  120.         {
  121.             // Arrange
  122.             var plant1 = new Plant { CatalogNumber = "001", Name = "Rose", Type = "Flower", FoodType = "Nectar" };
  123.             var plant2 = new Plant { CatalogNumber = "002", Name = "Carrot", Type = "Vegetable", FoodType = "Roots" };
  124.             await this.plantsManager.AddPlantAsync(plant1);
  125.             await this.plantsManager.AddPlantAsync(plant2);
  126.  
  127.             // Act
  128.             var plants = await this.plantsManager.SearchByFoodTypeAsync("Roots");
  129.  
  130.             // Assert
  131.             Assert.IsNotNull(plants);
  132.             Assert.AreEqual(1, plants.Count());
  133.             Assert.AreEqual("Carrot", plants.First().Name);
  134.         }
  135.  
  136.         [Test]
  137.         public async Task SearchByFoodTypeAsync_WithNonExistingFoodType_ShouldThrowKeyNotFoundException()
  138.         {
  139.             // Arrange & Act & Assert
  140.             Assert.ThrowsAsync<KeyNotFoundException>(async () => await this.plantsManager.SearchByFoodTypeAsync("Seeds"));
  141.         }
  142.  
  143.         [Test]
  144.         public async Task GetSpecificAsync_WithValidCatalogNumber_ShouldReturnPlant()
  145.         {
  146.             // Arrange
  147.             var plant = new Plant { CatalogNumber = "001", Name = "Rose", Type = "Flower", FoodType = "Nectar" };
  148.             await this.plantsManager.AddPlantAsync(plant);
  149.  
  150.             // Act
  151.             var retrievedPlant = await this.plantsManager.GetSpecificAsync("001");
  152.  
  153.             // Assert
  154.             Assert.IsNotNull(retrievedPlant);
  155.             Assert.AreEqual("Rose", retrievedPlant.Name);
  156.         }
  157.  
  158.         [Test]
  159.         public async Task GetSpecificAsync_WithInvalidCatalogNumber_ShouldThrowKeyNotFoundException()
  160.         {
  161.             // Arrange & Act & Assert
  162.             Assert.ThrowsAsync<KeyNotFoundException>(async () => await this.plantsManager.GetSpecificAsync("999"));
  163.         }
  164.  
  165.         [Test]
  166.         public async Task UpdateAsync_WithValidPlant_ShouldUpdatePlant()
  167.         {
  168.             // Arrange
  169.             var plant = new Plant { CatalogNumber = "001", Name = "Rose", Type = "Flower", FoodType = "Nectar" };
  170.             await this.plantsManager.AddPlantAsync(plant);
  171.  
  172.             // Act
  173.             plant.Name = "Lily";
  174.             await this.plantsManager.UpdateAsync(plant);
  175.  
  176.             // Assert
  177.             var retrievedPlant = await this.plantsManager.GetSpecificAsync("001");
  178.             Assert.IsNotNull(retrievedPlant);
  179.             Assert.AreEqual("Lily", retrievedPlant.Name);
  180.         }
  181.  
  182.         [Test]
  183.         public async Task UpdateAsync_WithInvalidPlant_ShouldThrowValidationException()
  184.         {
  185.             // Arrange
  186.             var invalidPlant = new Plant(); // Not providing required properties
  187.  
  188.             // Act & Assert
  189.             Assert.ThrowsAsync<Exception>(async () => await this.plantsManager.UpdateAsync(invalidPlant));
  190.         }
  191.     }
  192. }
  193.  
Advertisement
Add Comment
Please, Sign In to add comment