forked from slavaxom9k/PIBD-23_Fomichev_V.S._MagicCarpet
219 lines
8.7 KiB
C#
219 lines
8.7 KiB
C#
using MagicCarpetContracts.DataModels;
|
|
using MagicCarpetContracts.Enums;
|
|
using MagicCarpetContracts.Exceptions;
|
|
using MagicCarpetContracts.StoragesContracts;
|
|
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;
|
|
|
|
namespace MagicCarpetTests.StoragesContracts;
|
|
|
|
[TestFixture]
|
|
internal class ClientStorageContractTests : BaseStorageContractTest
|
|
{
|
|
private ClientStorageContarct _clientStorageContract;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_clientStorageContract = new ClientStorageContarct(MagicCarpetDbContext);
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Sales\" CASCADE;");
|
|
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Employees\" CASCADE;");
|
|
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Clients\" CASCADE;");
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetList_WhenHaveRecords_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString(), phoneNumber: "+5-555-555-55-55");
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString(), phoneNumber: "+6-666-666-66-66");
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString(), phoneNumber: "+7-777-777-77-77");
|
|
var list = _clientStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
AssertElement(list.First(x => x.Id == client.Id), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetList_WhenNoRecords_Test()
|
|
{
|
|
var list = _clientStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Is.Empty);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementById_WhenHaveRecord_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
AssertElement(_clientStorageContract.GetElementById(client.Id), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementById_WhenNoRecord_Test()
|
|
{
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
Assert.That(() => _clientStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementByFIO_WhenHaveRecord_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
AssertElement(_clientStorageContract.GetElementByFIO(client.FIO), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementByFIO_WhenNoRecord_Test()
|
|
{
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
Assert.That(() => _clientStorageContract.GetElementByFIO("New Fio"), Is.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementByPhoneNumber_WhenHaveRecord_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
AssertElement(_clientStorageContract.GetElementByPhoneNumber(client.PhoneNumber), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetElementByPhoneNumber_WhenNoRecord_Test()
|
|
{
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
Assert.That(() => _clientStorageContract.GetElementByPhoneNumber("+8-888-888-88-88"), Is.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_AddElement_Test()
|
|
{
|
|
var client = CreateModel(Guid.NewGuid().ToString());
|
|
_clientStorageContract.AddElement(client);
|
|
AssertElement(GetClientFromDatabase(client.Id), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
|
|
{
|
|
var client = CreateModel(Guid.NewGuid().ToString(), "New Fio", "+5-555-555-55-55", 500);
|
|
InsertClientToDatabaseAndReturn(client.Id);
|
|
Assert.That(() => _clientStorageContract.AddElement(client), Throws.TypeOf<ElementExistsException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Try_AddElement_WhenHaveRecordWithSamePhoneNumber_Test()
|
|
{
|
|
var client = CreateModel(Guid.NewGuid().ToString(), "New Fio", "+5-555-555-55-55", 500);
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString(), phoneNumber: client.PhoneNumber);
|
|
Assert.That(() => _clientStorageContract.AddElement(client), Throws.TypeOf<ElementExistsException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Try_UpdElement_Test()
|
|
{
|
|
var client = CreateModel(Guid.NewGuid().ToString(), "New Fio", "+5-555-555-55-55", 500);
|
|
InsertClientToDatabaseAndReturn(client.Id);
|
|
_clientStorageContract.UpdElement(client);
|
|
AssertElement(GetClientFromDatabase(client.Id), client);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
|
|
{
|
|
Assert.That(() => _clientStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())), Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Try_UpdElement_WhenHaveRecordWithSamePhoneNumber_Test()
|
|
{
|
|
var client = CreateModel(Guid.NewGuid().ToString(), "New Fio", "+5-555-555-55-55", 500);
|
|
InsertClientToDatabaseAndReturn(client.Id, phoneNumber: "+7-777-777-77-77");
|
|
InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString(), phoneNumber: client.PhoneNumber);
|
|
Assert.That(() => _clientStorageContract.UpdElement(client), Throws.TypeOf<ElementExistsException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Try_DelElement_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
_clientStorageContract.DelElement(client.Id);
|
|
var element = GetClientFromDatabase(client.Id);
|
|
Assert.That(element, Is.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_DelElement_WhenHaveSalesByThisBuyer_Test()
|
|
{
|
|
var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
var employeeId = Guid.NewGuid().ToString();
|
|
MagicCarpetDbContext.Employees.Add(new Employee() { Id = employeeId, FIO = "test", PostId = Guid.NewGuid().ToString(), Email = "abc@gmail.com" });
|
|
MagicCarpetDbContext.Sales.Add(new Sale() { Id = Guid.NewGuid().ToString(), EmployeeId = employeeId, ClientId = client.Id, Sum = 10, DiscountType = DiscountType.None, Discount = 0 });
|
|
MagicCarpetDbContext.Sales.Add(new Sale() { Id = Guid.NewGuid().ToString(), EmployeeId = employeeId, ClientId = client.Id, Sum = 10, DiscountType = DiscountType.None, Discount = 0 });
|
|
MagicCarpetDbContext.SaveChanges();
|
|
var salesBeforeDelete = MagicCarpetDbContext.Sales.Where(x => x.ClientId == client.Id).ToArray();
|
|
_clientStorageContract.DelElement(client.Id);
|
|
var element = GetClientFromDatabase(client.Id);
|
|
var salesAfterDelete = MagicCarpetDbContext.Sales.Where(x => x.ClientId == client.Id).ToArray();
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(element, Is.Null);
|
|
Assert.That(salesBeforeDelete, Has.Length.EqualTo(2));
|
|
Assert.That(salesAfterDelete, Is.Empty);
|
|
Assert.That(MagicCarpetDbContext.Sales.Count(), Is.EqualTo(2));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void Try_DelElement_WhenNoRecordWithThisId_Test()
|
|
{
|
|
Assert.That(() => _clientStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
|
|
private Client InsertClientToDatabaseAndReturn(string id, string fio = "test", string phoneNumber = "+7-777-777-77-77", double discountSize = 10)
|
|
{
|
|
var client = new Client() { Id = id, FIO = fio, PhoneNumber = phoneNumber, DiscountSize = discountSize };
|
|
MagicCarpetDbContext.Clients.Add(client);
|
|
MagicCarpetDbContext.SaveChanges();
|
|
return client;
|
|
}
|
|
|
|
private static void AssertElement(ClientDataModel? actual, Client expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
|
Assert.That(actual.PhoneNumber, Is.EqualTo(expected.PhoneNumber));
|
|
Assert.That(actual.DiscountSize, Is.EqualTo(expected.DiscountSize));
|
|
});
|
|
}
|
|
|
|
private static ClientDataModel CreateModel(string id, string fio = "test", string phoneNumber = "+7-777-777-77-77", double discountSize = 10)
|
|
=> new(id, fio, phoneNumber, discountSize);
|
|
|
|
private Client? GetClientFromDatabase(string id) => MagicCarpetDbContext.Clients.FirstOrDefault(x => x.Id == id);
|
|
|
|
private static void AssertElement(Client? actual, ClientDataModel expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
|
Assert.That(actual.PhoneNumber, Is.EqualTo(expected.PhoneNumber));
|
|
Assert.That(actual.DiscountSize, Is.EqualTo(expected.DiscountSize));
|
|
});
|
|
}
|
|
}
|