DatabaseTestBase fix; refactoring, improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2023-12-11 07:20:32 +01:00
parent 782d8ece5a
commit 715ac0fa5b
10 changed files with 107 additions and 98 deletions

View File

@ -0,0 +1,14 @@
using AyCode.Database.DbContexts;
namespace AyCode.Database.Tests
{
public abstract class AcDatabaseTestBase<TDbContext> : AcDatabaseTestModelBase<TDbContext> where TDbContext : AcDbContextBase
{
[TestMethod]
public void DatabaseExistsTest()
{
var isConnected = Context.Database.CanConnect();
Assert.IsTrue(isConnected);
}
}
}

View File

@ -0,0 +1,23 @@
using AyCode.Core.Tests;
using AyCode.Database.DataLayers;
using AyCode.Database.DbContexts;
namespace AyCode.Database.Tests;
public abstract class AcDatabaseTestModelBase<TDal, TDbContext> : TestModelBase where TDal : IAcDalBase<TDbContext> where TDbContext : AcDbContextBase
{
protected TDal Dal;
protected AcDatabaseTestModelBase()
{
Dal = PooledDal.CreateDal<TDal>();
}
}
public abstract class AcDatabaseTestModelBase<TDbContext> : TestModelBase where TDbContext : AcDbContextBase
{
protected TDbContext Context;
protected AcDatabaseTestModelBase()
{
Context = Activator.CreateInstance<TDbContext>();
}
}

View File

@ -1,13 +0,0 @@
using AyCode.Core.Tests;
using AyCode.Database.DataLayers;
using AyCode.Database.DbContexts;
namespace AyCode.Database.Tests;
public abstract class DatabaseTestModelBase<TDbContext> : TestModelBase where TDbContext : AcDbContextBase
{
protected DatabaseTestModelBase()
{
//var acDal = new acDal
}
}

View File

@ -1,13 +0,0 @@
using AyCode.Database.DbContexts;
namespace AyCode.Database.Tests
{
[TestClass]
public abstract class DatabaseTests : DatabaseTestModelBase<AcDbContextBase>
{
[TestMethod]
public void TestMethod1()
{
}
}
}

View File

@ -0,0 +1,55 @@
using AyCode.Database.DataLayers.Users;
using AyCode.Database.DbContexts;
using AyCode.Database.DbContexts.Users;
using AyCode.Interfaces.Users;
namespace AyCode.Database.Tests.Users
{
public abstract class AcUserDalTestBase<TDal, TDbContext, TUser, TUserToken> : AcDatabaseTestModelBase<TDal, TDbContext>
where TDal : AcUserDalBase<TDbContext, TUser, TUserToken>
where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TUserToken>
where TUser : class, IUserBase
where TUserToken : class, IUserTokenBase
{
[TestMethod]
[DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")]
public void GetUserById_ReturnsUser_WhenUserExists(string userIdString)
{
var userId = Guid.Parse(userIdString);
var user = Dal.GetUserById(userId);
Assert.IsNotNull(user, "User is null");
Assert.AreEqual(userId, user.Id);
}
[TestMethod]
[DataRow("test@tiam.hu")]
public void GetUserByEmail_ReturnsUser_WhenUserExists(string email)
{
var user = Dal.GetUserByEmail(email);
Assert.IsNotNull(user, "User is null");
Assert.AreEqual(email, user.EmailAddress);
}
[TestMethod]
[DataRow("test@tiam.hu")]
public async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email)
{
TUser? user = null;
user = await Dal.GetUserByEmailAsync(email).ConfigureAwait(false);
//user = await Dal.SessionAsync(ctx => ctx.Users.FirstOrDefault(x => x.EmailAddress == email)).ConfigureAwait(false);
//await using (var ctx = Dal.Context)
//{
// user = await ctx.Users.FirstOrDefaultAsync(x => x.EmailAddress == email).ConfigureAwait(false);
//}
Assert.IsNotNull(user, "User is null");
Assert.AreEqual(email, user.EmailAddress);
}
}
}

View File

@ -1,43 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AyCode.Database.DbContexts;
using AyCode.Database.DbContexts.Users;
using AyCode.Interfaces.Users;
namespace AyCode.Database.Tests.Users
{
[TestClass]
public abstract class UserDbSetTest<TDbContext, TUser, TUserToken> : DatabaseTestModelBase<TDbContext>
where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TUserToken>
where TUser : class, IUserBase
where TUserToken : class, IUserTokenBase
{
//AcUserDalBase<UserDbContext, User, UserTokenBase>
//private UserDal _userDal;
[TestInitialize]
public void Setup()
{
}
[TestCleanup]
public void TearDown()
{
}
//[TestMethod]
//[DataRow("test@tiam.hu")]
//public void GetUserByEmail_ReturnsUser_WhenUserExists(string email)
//{
// //var userDal = PooledDal.CreateDal<UserDal>();
// var user = _userDal.GetUserByEmail(email);
// Assert.IsNotNull(user);
// Assert.AreEqual(email, user.EmailAddress);
//}
}
}

View File

@ -5,23 +5,23 @@ using AyCode.Interfaces.TimeStampInfo;
namespace AyCode.Database.DbContexts; namespace AyCode.Database.DbContexts;
public class AcDbContextBase : DbContext public abstract class AcDbContextBase : DbContext
{ {
public string Name { get; set; } public string Name { get; set; }
public Guid SessionId { get; protected set; } = Guid.NewGuid(); public Guid SessionId { get; protected set; } = Guid.NewGuid();
public AcDbContextBase() protected AcDbContextBase()
{ {
//DbInterception.Add(new UtcDateTimeDbCommandInterceptor()); //DbInterception.Add(new UtcDateTimeDbCommandInterceptor());
} }
public AcDbContextBase(string name) : this() protected AcDbContextBase(string name) : this()
{ {
Name = name; Name = name;
} }
public AcDbContextBase(DbContextOptions<DbContext> options, string name) : base(options) protected AcDbContextBase(DbContextOptions<DbContext> options, string name) : base(options)
{ {
Name = name; Name = name;
} }

View File

@ -14,5 +14,15 @@ namespace AyCode.Database.DbContexts.Users
{ {
public required DbSet<TUser> Users { get; set; } public required DbSet<TUser> Users { get; set; }
public required DbSet<TUserToken> UserTokens { get; set; } public required DbSet<TUserToken> UserTokens { get; set; }
protected AcUserDbContextBase() : this(string.Empty)
{ }
protected AcUserDbContextBase(string name) : base(name)
{ }
protected AcUserDbContextBase(DbContextOptions<DbContext> options, string name) : base(options, name)
{
}
} }
} }

View File

@ -1,24 +0,0 @@
using AyCode.Interfaces.Entities;
using Microsoft.EntityFrameworkCore;
namespace AyCode.Database.DbSets.Base;
public interface IDbSetGuidBase<TEntity> where TEntity : class, IEntityGuid
{
DbSet<TEntity> Users { get; set; }
}
public interface IDbSetIntBase<TEntity> where TEntity : class, IEntityInt
{
DbSet<TEntity> Users { get; set; }
}
public interface IDbSetBase<TEntity, TPkey> where TEntity : class, IEntity<TPkey>
{
DbSet<TEntity> Users { get; set; }
}
public interface IDbSetBase<TEntity> where TEntity : class, IEntity
{
DbSet<TEntity> Users { get; set; }
}

View File

@ -57,7 +57,7 @@ public static class AcUserTokenDbSetExtensions
public static TUserToken? GetActiveUserToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId) where TUserToken : class, IUserTokenBase public static TUserToken? GetActiveUserToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId) where TUserToken : class, IUserTokenBase
=> ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.IsActive && (x.TokenExpiration == null || x.TokenExpiration > DateTime.UtcNow)); => ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.IsActive && (x.TokenExpiration == null || x.TokenExpiration > DateTime.UtcNow));
public static TUserToken? GetUserToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId, string verificationToken) where TUserToken : class?, IUserTokenBase? public static TUserToken? GetUserToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase
=> ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.Token == verificationToken); => ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.Token == verificationToken);
public static bool IsValidToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase public static bool IsValidToken<TUserToken>(this IAcUserTokenDbSet<TUserToken> ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase