2025-03-12 23:31:57 +04:00

154 lines
6.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using PuferFishContracts.DataModels;
using PuferFishDataBase.Implementations;
using PuferFishDataBase.Models;
namespace PuferFishTests.StoragesContracts;
[TestFixture]
internal class PointsStorageContractTests : BaseStorageContractTest
{
private PointsStorageContract _pointsStorageContract;
private Buyer _buyer;
[SetUp]
public void SetUp()
{
_pointsStorageContract = new PointsStorageContract(PuferFishDbContext);
_buyer = InsertBuyerToDatabaseAndReturn();
}
[TearDown]
public void TearDown()
{
PuferFishDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Pointss\"CASCADE; ");
PuferFishDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Buyers\"CASCADE; ");
}
[Test]
public void Try_GetList_WhenHaveRecords_Test()
{
var salary = InsertPointsToDatabaseAndReturn(_buyer.Id, buyerPoints: 100);
InsertPointsToDatabaseAndReturn(_buyer.Id);
InsertPointsToDatabaseAndReturn(_buyer.Id);
var list = _pointsStorageContract.GetList(DateTime.UtcNow.AddDays(-
10), DateTime.UtcNow.AddDays(10));
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(), salary);
}
[Test]
public void Try_GetList_WhenNoRecords_Test()
{
var list = _pointsStorageContract.GetList(DateTime.UtcNow.AddDays(-10), DateTime.UtcNow.AddDays(10));
Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Empty);
}
[Test]
public void Try_GetList_OnlyInDatePeriod_Test()
{
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-2));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(1).AddMinutes(5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-2));
var list = _pointsStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1));
Assert.That(list, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(list, Has.Count.EqualTo(2));
});
}
[Test]
public void Try_GetList_ByBuyer_Test()
{
var worker = InsertBuyerToDatabaseAndReturn("name 2");
InsertPointsToDatabaseAndReturn(_buyer.Id);
InsertPointsToDatabaseAndReturn(_buyer.Id);
InsertPointsToDatabaseAndReturn(worker.Id);
var list = _pointsStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1), _buyer.Id);
Assert.That(list, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(list, Has.Count.EqualTo(2));
Assert.That(list.All(x => x.BuyerId == _buyer.Id));
});
}
[Test]
public void Try_GetList_ByWorkerOnlyInDatePeriod_Test()
{
var buyer = InsertBuyerToDatabaseAndReturn("name 2");
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-2));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertPointsToDatabaseAndReturn(buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertPointsToDatabaseAndReturn(buyer.Id, pointsDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertPointsToDatabaseAndReturn(_buyer.Id, pointsDate: DateTime.UtcNow.AddDays(-2));
var list = _pointsStorageContract.GetList(DateTime.UtcNow.AddDays(- 1), DateTime.UtcNow.AddDays(1), _buyer.Id);
Assert.That(list, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(list, Has.Count.EqualTo(2));
Assert.That(list.All(x => x.BuyerId == _buyer.Id));
});
}
[Test]
public void Try_AddElement_Test()
{
var buyer = CreateModel(_buyer.Id);
_pointsStorageContract.AddElement(buyer);
AssertElement(GetPointsFromDatabaseByBuyerId(_buyer.Id), buyer);
}
private Buyer InsertBuyerToDatabaseAndReturn(string buyerFIO = "fio", string phoneNumber = "+79070707077", double points = 10)
{
var buyer = new Buyer()
{
Id = Guid.NewGuid().ToString(),
FIO = buyerFIO,
PhoneNumber = phoneNumber,
Points = points
};
PuferFishDbContext.Buyers.Add(buyer);
PuferFishDbContext.SaveChanges();
return buyer;
}
private Points InsertPointsToDatabaseAndReturn(string buyerId, double buyerPoints = 1, DateTime? pointsDate = null)
{
var points = new Points()
{
BuyerId = buyerId,
BuyerPoints = buyerPoints,
PointsDate = pointsDate ?? DateTime.UtcNow
};
PuferFishDbContext.Pointss.Add(points);
PuferFishDbContext.SaveChanges();
return points;
}
private static void AssertElement(PointsDataModel? actual, Points expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.BuyerId, Is.EqualTo(expected.BuyerId));
Assert.That(actual.Points, Is.EqualTo(expected.BuyerPoints));
});
}
private static PointsDataModel CreateModel(string buyerId, double buyerPoints = 1, DateTime? pointsDate = null)
=> new(buyerId, pointsDate ?? DateTime.UtcNow, buyerPoints);
private Points? GetPointsFromDatabaseByBuyerId(string id) =>
PuferFishDbContext.Pointss.FirstOrDefault(x => x.BuyerId == id);
private static void AssertElement(Points? actual, PointsDataModel expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.BuyerId, Is.EqualTo(expected.BuyerId));
Assert.That(actual.BuyerPoints, Is.EqualTo(expected.Points));
});
}
}