Files
Check/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs

206 lines
7.2 KiB
C#

using MagicCarpetContracts.DataModels;
using MagicCarpetContracts.Enums;
using MagicCarpetContracts.Exceptions;
using MagicCarpetDatabase.Implementations;
using MagicCarpetDatabase.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static NUnit.Framework.Internal.OSPlatform;
namespace MagicCarpetTests.StoragesContracts;
[TestFixture]
internal class TourStorageContractTests : BaseStorageContractTest
{
private TourStorageContract _tourStorageContract;
[SetUp]
public void SetUp()
{
_tourStorageContract = new TourStorageContract(MagicCarpetDbContext);
}
[TearDown]
public void TearDown()
{
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Tours\" CASCADE;");
}
[Test]
public void Try_GetList_WhenHaveRecords_Test()
{
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(),"name 1");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3");
var list = _tourStorageContract.GetList();
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(), tour);
}
[Test]
public void Try_GetList_WhenNoRecords_Test()
{
var list = _tourStorageContract.GetList();
Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Empty);
}
[Test]
public void Try_GetHistoryByTourId_WhenHaveRecords_Test()
{
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
AssertElement(_tourStorageContract.GetElementById(tour.Id), tour);
}
[Test]
public void Try_GetHistoryByTourId_WhenNoRecords_Test()
{
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
}
[Test]
public void Try_GetElementById_WhenHaveRecord_Test()
{
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1");
AssertElement(_tourStorageContract.GetElementById(tour.Id), tour);
}
[Test]
public void Try_GetElementById_WhenNoRecord_Test()
{
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1");
Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
}
[Test]
public void Try_GetElementByName_WhenHaveRecord_Test()
{
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1");
AssertElement(_tourStorageContract.GetElementByName(tour.TourName), tour);
}
[Test]
public void Try_GetElementByName_WhenNoRecord_Test()
{
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1");
Assert.That(() => _tourStorageContract.GetElementByName("name"), Is.Null);
}
[Test]
public void Try_AddElement_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "tour1");
_tourStorageContract.AddElement(tour);
AssertElement(GetTourFromDatabaseById(tour.Id), tour);
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "Name");
InsertTourToDatabaseAndReturn(tour.Id);
Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameName_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "Name");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tour.TourName);
Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_UpdElement_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "Name");
InsertTourToDatabaseAndReturn(tour.Id, tourName: tour.TourName);
_tourStorageContract.UpdElement(tour);
AssertElement(GetTourFromDatabaseById(tour.Id), tour);
}
[Test]
public void Try_UpdElement_WhenNoChangeName_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "Name");
InsertTourToDatabaseAndReturn(tour.Id, tour.TourName);
_tourStorageContract.UpdElement(tour);
AssertElement(GetTourFromDatabaseById(tour.Id), tour);
}
[Test]
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() => _tourStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())), Throws.TypeOf<ElementNotFoundException>());
}
[Test]
public void Try_UpdElement_WhenHaveRecordWithSameName_Test()
{
var tour = CreateModel(Guid.NewGuid().ToString(), "Duplicate Name");
InsertTourToDatabaseAndReturn(tour.Id, "Old Name");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tour.TourName);
Assert.That(() => _tourStorageContract.UpdElement(tour), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_DelElement_Test()
{
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
_tourStorageContract.DelElement(tour.Id);
var element = GetTourFromDatabaseById(tour.Id);
Assert.That(element, Is.Null);
}
[Test]
public void Try_DelElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() => _tourStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
}
private Tour InsertTourToDatabaseAndReturn(string id, string tourName = "test")
{
var tour = new Tour { Id = id, TourName = tourName };
MagicCarpetDbContext.Tours.Add(tour);
MagicCarpetDbContext.SaveChanges();
return tour;
}
private static void AssertElement(TourDataModel? actual, Tour expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry));
Assert.That(actual.Price, Is.EqualTo(expected.Price));
Assert.That(actual.Type, Is.EqualTo(expected.Type));
});
}
private static TourDataModel CreateModel(string id, string tourName = "test", string tourCountry = "country", double price = 1, TourType tourType = TourType.Sightseeing)
=> new(id, tourName, tourCountry, price, tourType);
private Tour? GetTourFromDatabaseById(string id) => MagicCarpetDbContext.Tours.FirstOrDefault(x => x.Id == id);
private static void AssertElement(Tour? actual, TourDataModel expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry));
Assert.That(actual.Price, Is.EqualTo(expected.Price));
Assert.That(actual.Type, Is.EqualTo(expected.Type));
});
}
}