using Yuna.Website.Server.Infrastructure;
using Yuna.Website.Server.Model;
using Yuna.Website.Server.Storage;
using Yuna.Website.Server.Storage.Repositories.Prop;
using Xunit;

namespace Yuna.Tests.Repositories
{
    public class PropRepositoriesTests
    {
        [Fact]
        public async Task Create_Creates_Prop()
        {
            // Arrange
            Settings.Init();
            var _context = new DapperContext(true);
            var repo = new PropRepository(_context);

            // Act
            Prop prop = new()
            {
                JsonValueName = "test",
                MeasureName = "test",
                Name = "test",
            };
            var result = await repo.Create(prop);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(result.Name, prop.Name);
            Assert.Equal(result.MeasureName, prop.MeasureName);
            Assert.Equal(result.JsonValueName, prop.JsonValueName);
        }

        [Fact]
        public async Task GetById_Gets_PropWithId()
        {
            // Arrange
            Settings.Init();
            var _context = new DapperContext(true);
            var repo = new PropRepository(_context);

            // Act
            var result = await repo.GetById(1);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(1, result.Id);
        }

        [Fact]
        public async Task GetByPropName_Gets_PropWithName()
        {
            // Arrange
            Settings.Init();
            var _context = new DapperContext(true);
            var repo = new PropRepository(_context);

            // Act
            var result = await repo.GetByPropName("test");

            // Assert
            Assert.NotNull(result);
            Assert.Equal("test", result.Name);
        }

        [Fact]
        public async Task GetList_Gets_List()
        {
            // Arrange
            Settings.Init();
            var _context = new DapperContext(true);
            var repo = new PropRepository(_context);

            // Act
            var result = await repo.GetList();

            // Assert
            Assert.NotNull(result);
            Assert.NotEmpty(result);
        }
    }
}