diff --git a/AyCode.Core.Tests.Internal/AyCode.Core.Tests.Internal.csproj b/AyCode.Core.Tests.Internal/AyCode.Core.Tests.Internal.csproj new file mode 100644 index 0000000..eed753f --- /dev/null +++ b/AyCode.Core.Tests.Internal/AyCode.Core.Tests.Internal.csproj @@ -0,0 +1,39 @@ + + + + net8.0 + enable + enable + + false + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AyCode.Core.Tests.Internal/Entities/Address.cs b/AyCode.Core.Tests.Internal/Entities/Address.cs new file mode 100644 index 0000000..d964178 --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/Address.cs @@ -0,0 +1,18 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Addresses; +using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Addresses.Dtos; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class Address : AcAddress, IAcAddress, IAcAddressDtoBase +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/Company.cs b/AyCode.Core.Tests.Internal/Entities/Company.cs new file mode 100644 index 0000000..c46919b --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/Company.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.ServiceProviders; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class Company : AcServiceProvider +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/EmailMessage.cs b/AyCode.Core.Tests.Internal/Entities/EmailMessage.cs new file mode 100644 index 0000000..751c377 --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/EmailMessage.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Messages; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class EmailMessage : AcEmailMessage +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/EmailRecipient.cs b/AyCode.Core.Tests.Internal/Entities/EmailRecipient.cs new file mode 100644 index 0000000..3baff3b --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/EmailRecipient.cs @@ -0,0 +1,17 @@ +using AyCode.Entities.Messages; + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class EmailRecipient : AcEmailRecipient +{ + public EmailRecipient() + { + } + + public EmailRecipient(Guid id, Guid recipientId, Guid emailMessageId, string emailAddress) : base(id, recipientId, emailMessageId, emailAddress) + { + } +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/Profile.cs b/AyCode.Core.Tests.Internal/Entities/Profile.cs new file mode 100644 index 0000000..45340c5 --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/Profile.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Profiles; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class Profile : AcProfile
+{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/User.cs b/AyCode.Core.Tests.Internal/Entities/User.cs new file mode 100644 index 0000000..00fa905 --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/User.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Users; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class User : AcUser +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/UserToCompany.cs b/AyCode.Core.Tests.Internal/Entities/UserToCompany.cs new file mode 100644 index 0000000..b31ce54 --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/UserToCompany.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Users; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class UserToCompany: AcUserToServiceProvider +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests.Internal/Entities/UserToken.cs b/AyCode.Core.Tests.Internal/Entities/UserToken.cs new file mode 100644 index 0000000..8dee8ef --- /dev/null +++ b/AyCode.Core.Tests.Internal/Entities/UserToken.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using AyCode.Entities.Users; + +[assembly: InternalsVisibleTo("AyCode.Database.Tests")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals")] +[assembly: InternalsVisibleTo("AyCode.Database.Tests.Users.Internals.UserDbContext")] + +namespace AyCode.Core.Tests.Internal.Entities; + +/// +/// DON'T USE!!! +/// +public class UserToken : AcUserTokenBase +{ + +} \ No newline at end of file diff --git a/AyCode.Core.Tests/AyCode.Core.Tests.csproj b/AyCode.Core.Tests/AyCode.Core.Tests.csproj index 83deb0a..46f456b 100644 --- a/AyCode.Core.Tests/AyCode.Core.Tests.csproj +++ b/AyCode.Core.Tests/AyCode.Core.Tests.csproj @@ -21,4 +21,13 @@ + + + + + + + + + diff --git a/AyCode.Core.sln b/AyCode.Core.sln index f2f9000..333ad5d 100644 --- a/AyCode.Core.sln +++ b/AyCode.Core.sln @@ -35,6 +35,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AyCode.Services.Server", "A EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AyCode.Services.Server.Tests", "AyCode.Services.Server.Tests\AyCode.Services.Server.Tests.csproj", "{9AC9AF60-280A-4871-A7FA-69AB4D0C858A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AyCode.Core.Tests.Internal", "AyCode.Core.Tests.Internal\AyCode.Core.Tests.Internal.csproj", "{DE2DD6A4-A906-4BA6-8AAA-2A0433DF523F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AyCode.Database.Tests.Internal", "AyCode.Database.Tests.Internal\AyCode.Database.Tests.Internal.csproj", "{73261A8C-FB41-4C4C-90D4-ED5EEC991413}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -102,6 +106,14 @@ Global {9AC9AF60-280A-4871-A7FA-69AB4D0C858A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9AC9AF60-280A-4871-A7FA-69AB4D0C858A}.Debug|Any CPU.Build.0 = Debug|Any CPU {9AC9AF60-280A-4871-A7FA-69AB4D0C858A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE2DD6A4-A906-4BA6-8AAA-2A0433DF523F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE2DD6A4-A906-4BA6-8AAA-2A0433DF523F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE2DD6A4-A906-4BA6-8AAA-2A0433DF523F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE2DD6A4-A906-4BA6-8AAA-2A0433DF523F}.Release|Any CPU.Build.0 = Release|Any CPU + {73261A8C-FB41-4C4C-90D4-ED5EEC991413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73261A8C-FB41-4C4C-90D4-ED5EEC991413}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73261A8C-FB41-4C4C-90D4-ED5EEC991413}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73261A8C-FB41-4C4C-90D4-ED5EEC991413}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AyCode.Database.Tests.Internal/AyCode.Database.Tests.Internal.csproj b/AyCode.Database.Tests.Internal/AyCode.Database.Tests.Internal.csproj new file mode 100644 index 0000000..87fa9c9 --- /dev/null +++ b/AyCode.Database.Tests.Internal/AyCode.Database.Tests.Internal.csproj @@ -0,0 +1,43 @@ + + + + net8.0 + enable + enable + + false + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AyCode.Database.Tests.Internal/DatabaseTestBase.cs b/AyCode.Database.Tests.Internal/DatabaseTestBase.cs new file mode 100644 index 0000000..57f7ae6 --- /dev/null +++ b/AyCode.Database.Tests.Internal/DatabaseTestBase.cs @@ -0,0 +1,22 @@ +using AyCode.Database.DbContexts; + +namespace AyCode.Database.Tests.Internal +{ + [TestClass] + public class DatabaseTestBase : AcDatabaseTestBase + { + [TestInitialize] + public void Setup() + { + + } + + [TestCleanup] + public void TearDown() + { + } + + [TestMethod] + public override void DatabaseExistsTest() => base.DatabaseExistsTest(); + } +} \ No newline at end of file diff --git a/AyCode.Database.Tests.Internal/Users/UserDal.cs b/AyCode.Database.Tests.Internal/Users/UserDal.cs new file mode 100644 index 0000000..b7dd553 --- /dev/null +++ b/AyCode.Database.Tests.Internal/Users/UserDal.cs @@ -0,0 +1,12 @@ +using AyCode.Core.Tests.Internal.Entities; +using AyCode.Database.DataLayers.Users; + +namespace AyCode.Database.Tests.Internal.Users; + +/// +/// DON'T USE!!! +/// +public sealed class UserDal : AcUserDalBase +{ + +} \ No newline at end of file diff --git a/AyCode.Database.Tests.Internal/Users/UserDalTests.cs b/AyCode.Database.Tests.Internal/Users/UserDalTests.cs new file mode 100644 index 0000000..52cae2d --- /dev/null +++ b/AyCode.Database.Tests.Internal/Users/UserDalTests.cs @@ -0,0 +1,16 @@ +using AyCode.Core.Tests.Internal.Entities; +using AyCode.Database.Tests.Users; + +namespace AyCode.Database.Tests.Internal.Users; + +/// +/// DON'T USE!!! +/// +[TestClass] +public sealed class UserDalTests : AcUserDalTestBase +{ + [TestMethod] + [DataRow("test@tiam.hu")] + public override void AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(string email) + => base.AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(email); +} \ No newline at end of file diff --git a/AyCode.Database.Tests.Internal/Users/UserDbContext.cs b/AyCode.Database.Tests.Internal/Users/UserDbContext.cs new file mode 100644 index 0000000..9d4a4fe --- /dev/null +++ b/AyCode.Database.Tests.Internal/Users/UserDbContext.cs @@ -0,0 +1,51 @@ +using AyCode.Core.Tests.Internal.Entities; +using AyCode.Database.DbContexts.Users; +using Microsoft.EntityFrameworkCore; + +namespace AyCode.Database.Tests.Internal.Users; + +/// +/// DON'T USE!!! +/// +public sealed class UserDbContext : AcUserDbContextBase +{ + public UserDbContext() //: this(string.Empty) + { + + } + + public UserDbContext(DbContextOptions options) //: this(string.Empty) + { + + } + + public UserDbContext(string name) : base(name) + { + } + + public UserDbContext(DbContextOptions options, string name) : base(options, name) + { + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + + optionsBuilder.UseLazyLoadingProxies(true); + optionsBuilder.EnableDetailedErrors(true); + + //optionsBuilder.UseSqlServer(Configuration.GetConnectionString("DeveloperDbConnection")); + var connString = "Data Source=185.51.190.197;Initial Catalog=TIAM_DEV;Trusted_Connection=false;Encrypt=false;TrustServerCertificate=True;Connect Timeout=200;User ID=Anata_Development_Team;Password=v6f_?xNfg9N1;MultipleActiveResultSets=true"; + optionsBuilder.UseSqlServer(connString); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + //new UserEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity()); + //new ProfileEntityTypeConfigurations().Configure(modelBuilder.Entity()); + + //new EmailMessageEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity()); + } +} diff --git a/AyCode.Database.Tests/AcDatabaseTestBase.cs b/AyCode.Database.Tests/AcDatabaseTestBase.cs index 1043528..00cce98 100644 --- a/AyCode.Database.Tests/AcDatabaseTestBase.cs +++ b/AyCode.Database.Tests/AcDatabaseTestBase.cs @@ -5,7 +5,7 @@ namespace AyCode.Database.Tests public abstract class AcDatabaseTestBase : AcDatabaseTestModelBase where TDbContext : AcDbContextBase { [TestMethod] - public void DatabaseExistsTest() + public virtual void DatabaseExistsTest() { var isConnected = Context.Database.CanConnect(); Assert.IsTrue(isConnected); diff --git a/AyCode.Database.Tests/AyCode.Database.Tests.csproj b/AyCode.Database.Tests/AyCode.Database.Tests.csproj index 1e54d19..2007ac4 100644 --- a/AyCode.Database.Tests/AyCode.Database.Tests.csproj +++ b/AyCode.Database.Tests/AyCode.Database.Tests.csproj @@ -10,6 +10,17 @@ + + + + + + PreserveNewest + + + + + @@ -30,6 +41,8 @@ + + diff --git a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs index c44bf04..67a6a19 100644 --- a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs +++ b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs @@ -1,22 +1,28 @@ using AyCode.Database.DataLayers.Users; using AyCode.Database.DbContexts; using AyCode.Database.DbContexts.Users; +using AyCode.Database.Tests; +using AyCode.Entities.Addresses; +using AyCode.Entities.Profiles; +using AyCode.Entities.Users; using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Messages; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; namespace AyCode.Database.Tests.Users { - public abstract class AcUserDalTestBase : AcDatabaseTestModelBase - where TDal : AcUserDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase + public abstract class AcUserDalTestBase : AcDatabaseTestModelBase + where TDal : AcUserDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase where TUser : class, IAcUser where TProfile : class, IAcProfile where TProfileAddress : class, IAcAddress where TUserToken : class, IAcUserTokenBase where TServiceProvider : class, IAcServiceProviderBase where TUserToServiceProvider : class, IAcUserToServiceProviderBase + where TEmailMessage : class, IAcEmailMessageBase { protected TUser AcBase_GetUserById_ReturnsUser_WhenUserExists(string userIdString) { @@ -32,7 +38,12 @@ namespace AyCode.Database.Tests.Users return user; } - protected TUser AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(string email) + [TestMethod] + [DataRow("2test@tiam.hu")] + public virtual void AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(string email) => AcBase_GetUserByEmail(email); + + // ReSharper disable once MemberCanBePrivate.Global + protected TUser AcBase_GetUserByEmail(string email) { var user = Dal.GetUserByEmail(email, false); diff --git a/AyCode.Database.Tests/appsettings.json b/AyCode.Database.Tests/appsettings.json new file mode 100644 index 0000000..48d14a2 --- /dev/null +++ b/AyCode.Database.Tests/appsettings.json @@ -0,0 +1,22 @@ +{ + "ConnectionStrings": { + "DeveloperDbConnection": "Data Source=185.51.190.197;Initial Catalog=TIAM_DEV;Trusted_Connection=False;Connect Timeout=200;User ID=Anata_Development_Team;Password=v6f_?xNfg9N1;MultipleActiveResultSets=true" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "JWT": { + "Key": "Cee4400-rDMFkVvHPufyLDSzbfu2grgRhpepos299IhTLOXsljkcpt3yUR4RRjPQ", + "Issuer": "http://localhost:5000", + "Audience": "http://localhost:5000" + }, + "SendGrid": { + //"Key": "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" + "Key": "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" + } + +} diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 493b600..a3b7a80 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -13,19 +13,21 @@ using AyCode.Core.Consts; using AyCode.Core.Helpers; using AyCode.Database.DbSets.Users; using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Messages; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.ServiceProviders; namespace AyCode.Database.DataLayers.Users { - public abstract class AcUserDalBase : AcDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase + public abstract class AcUserDalBase : AcDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase where TServiceProvider : class, IAcServiceProviderBase where TUserToServiceProvider : class, IAcUserToServiceProviderBase where TProfileAddress : class, IAcAddress + where TEmailMessage : class, IAcEmailMessageBase { public TUser? GetUserById(Guid userId, bool onlyConfirmed) => Session(x => x.GetUserById(userId, onlyConfirmed)); public Task GetUserByIdAsync(Guid userId, bool onlyConfirmed) => SessionAsync(x => x.GetUserById(userId, onlyConfirmed)); diff --git a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs index 74ad693..a2aab1d 100644 --- a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs @@ -1,4 +1,5 @@ using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Messages; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; @@ -6,18 +7,20 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users { - public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase + public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase where TServiceProvider : class, IAcServiceProviderBase where TUserToServiceProvider : class, IAcUserToServiceProviderBase where TProfileAddress : class, IAcAddress + where TEmailMessage : class, IAcEmailMessageBase { public required DbSet Users { get; set; } public required DbSet UserTokens { get; set; } public DbSet Addresses { get; set; } public DbSet Profiles { get; set; } + public DbSet EmailMessages { get; set; } protected AcUserDbContextBase() : this(string.Empty) diff --git a/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs b/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs index a4947f7..d9e0a4c 100644 --- a/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs @@ -1,15 +1,19 @@ using AyCode.Database.DbSets.Addresses; +using AyCode.Database.DbSets.Messages; using AyCode.Database.DbSets.Profiles; using AyCode.Database.DbSets.Users; using AyCode.Interfaces.Addresses; +using AyCode.Interfaces.Messages; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; namespace AyCode.Database.DbContexts.Users; -public interface IAcUserDbContextBase - : IAcUserDbSet, IAcUserTokenDbSet, IAcAddressDbSetBase, IAcProfileDbSetBase +public interface IAcUserDbContextBase + : IAcUserDbSet, IAcUserTokenDbSet, + IAcAddressDbSetBase, IAcProfileDbSetBase, + IAcEmailMessageDbSet where TUser : class, IAcUser where TProfile : class, IAcProfile @@ -17,5 +21,6 @@ public interface IAcUserDbContextBase : AcDatabaseTestModelBase - where TDal : AcUserDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase + public abstract class AcLoginServiceServerTestBase : AcDatabaseTestModelBase + where TDal : AcUserDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase where TLoginServiceServer : class, IAcLoginServiceServer where TResultLoggedInModel: class, IAcLoggedInModelBase where TUser : class, IAcUser @@ -21,6 +22,7 @@ namespace AyCode.Services.Server.Tests.LoginServices where TUserToken : class, IAcUserTokenBase where TServiceProvider : class, IAcServiceProviderBase where TUserToServiceProvider : class, IAcUserToServiceProviderBase + where TEmailMessage : class, IAcEmailMessageBase { public TUser RegisterUserTest() { diff --git a/AyCode.Services.Server/Logins/AcLoginServiceServer.cs b/AyCode.Services.Server/Logins/AcLoginServiceServer.cs index 56e68d1..8dd69ce 100644 --- a/AyCode.Services.Server/Logins/AcLoginServiceServer.cs +++ b/AyCode.Services.Server/Logins/AcLoginServiceServer.cs @@ -20,24 +20,26 @@ using AyCode.Core.Consts; using AyCode.Core.Extensions; using AyCode.Database.DataLayers.Users; using AyCode.Database.DbContexts.Users; +using AyCode.Interfaces.Messages; using AyCode.Models.Server.Logins; using AyCode.Utils.Extensions; using Microsoft.Extensions.Configuration; namespace AyCode.Services.Server.Logins; -public class AcLoginServiceServer(TDal userDal, IConfiguration configuration) +public class AcLoginServiceServer(TDal userDal, IConfiguration configuration) : AcLoginServiceBase, IAcLoginServiceServer where TResultLoggedInModel : class, IAcLoggedInModelBase - where TDal : AcUserDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase + where TDal : AcUserDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase where TUser : class, IAcUser where TUserToken : class, IAcUserTokenBase where TProfile : class, IAcProfile where TServiceProvider : class, IAcServiceProviderBase where TUserToServiceProvider : class, IAcUserToServiceProviderBase where TProfileAddress : class, IAcAddress + where TEmailMessage : class, IAcEmailMessageBase { public TResultLoggedInModel? LoggedInModel { get; private set; } public override TUser? LoggedInUser => LoggedInModel?.LoggedInUser;