Session data.

This commit is contained in:
Andy Howard
2025-01-22 08:01:51 +00:00
parent 61ecd59794
commit f375e0d175
121 changed files with 3743 additions and 2126 deletions
@@ -1,19 +0,0 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Sarand.BusinessMgr.Test.Web.Control.App
{
//=======================================================================
[TestClass]
class SbmApplication_Control_Tester : SbmControlApp_Tester_Base
{
//-------------------------------------------------------------------
[TestMethod]
public void Test_SbmApplication_Control_CTR()
{
Assert.IsNotNull(App);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,94 @@
using Microsoft.ApplicationInsights.Extensibility.Implementation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using Sarand.BusinessMgr.Net.Core.Web.Controllers;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.BusinessMgr.Web.Control.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Test.Web.Control.App
{
//=======================================================================
[TestClass]
public class SbmApplication_SessionData_Tester : SbmApplication_Tester_Base
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SbmApplication_SessionData_Tester()
{
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_SessionData_Serialization()
{
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>())
{
// Internals.
SbmcAccountMgr accountMgr = Internals_Control.ControlAccountMgr;
Assert.IsNotNull(accountMgr);
// User account.
SbmcUserAccount userAccount = accountMgr.GetUserAccountByEmailAddress("andy@sarand.com");
disposables.Add(userAccount);
Assert.IsNotNull(userAccount);
// Session Context?
SbmSessionContext? sessionContext_Core = null;
// Populate User Session.
SbmSessionData_Control sessionData = new SbmSessionData_Control(sessionContext_Core, userAccount);
Assert.IsNotNull(sessionData);
Assert.IsTrue(!StringUtil.IsBlank(sessionData.Base64IV_ControlApp));
Assert.IsTrue(sessionData.SessionIdx >= 100000);
Assert.IsTrue(sessionData.DataIdx >= 1000000);
// Validate user session.
Assert.IsNotNull(sessionData.User);
// User details.
Assert.AreEqual(userAccount.Id, sessionData.User.UserAccountId);
Assert.AreEqual(userAccount.EmailAddress, sessionData.User.EmailAddress);
Assert.AreEqual(userAccount.FirstName, sessionData.User.FirstName);
Assert.AreEqual(userAccount.LastName, sessionData.User.LastName);
Assert.AreEqual(userAccount.GetDisplayName(), sessionData.User.DisplayName);
// Serialise data.
string sessionDataJson = JsonConvert.SerializeObject(sessionData);
Assert.IsNotNull(sessionDataJson);
// Deserialise data.
SbmSessionData_Control? sessionDataDeserialized = JsonConvert.DeserializeObject<SbmSessionData_Control>(sessionDataJson, SbmController_Web.SbmSessionDataJsonSerializerSettings);
Assert.IsNotNull(sessionDataDeserialized);
// Validate deserialised data.
Assert.IsTrue(!StringUtil.IsBlank(sessionDataDeserialized.Base64IV_ControlApp));
Assert.AreEqual(sessionData.Base64IV_ControlApp, sessionDataDeserialized.Base64IV_ControlApp);
Assert.AreEqual(sessionData.SessionIdx, sessionDataDeserialized.SessionIdx);
Assert.IsTrue(sessionDataDeserialized.DataIdx > sessionData.DataIdx);
// User details.
Assert.IsNotNull(sessionDataDeserialized.User);
Assert.AreEqual(userAccount.Id, sessionDataDeserialized.User.UserAccountId);
Assert.AreEqual(userAccount.EmailAddress, sessionDataDeserialized.User.EmailAddress);
Assert.AreEqual(userAccount.FirstName, sessionDataDeserialized.User.FirstName);
Assert.AreEqual(userAccount.LastName, sessionDataDeserialized.User.LastName);
Assert.AreEqual(userAccount.GetDisplayName(), sessionDataDeserialized.User.DisplayName);
}
}
}
//=======================================================================
}
@@ -0,0 +1,145 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sarand.BusinessMgr.Net.Core.Web.App;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Consoles;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.BusinessMgr.Web.Control.Consoles;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Security;
namespace Sarand.BusinessMgr.Test.Web.Control.App
{
//=======================================================================
[TestClass]
public class SbmApplication_Tester : SbmApplication_Tester_Base
{
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_Application()
{
// Application.
Assert.IsNotNull(App);
Assert.IsNotNull(App_Web);
Assert.IsNotNull(App_Control);
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_ControlDatabase()
{
// Control database.
ISacsDatabase db = App.GetControlDatabase();
Assert.IsNotNull(db);
// Tables.
Assert.IsTrue(db.TableExists(SbmDbDfn_Control.GetTableName(SbmDbDfn_Control.TableIdx.Owner)));
Assert.IsTrue(db.TableExists(SbmDbDfn_Control.GetTableName(SbmDbDfn_Control.TableIdx.Repository)));
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_TemplateDatabase()
{
// Template database.
ISacsDatabase db = App.GetTemplateDatabase();
Assert.IsNotNull(db);
// Tables.
Assert.IsTrue(db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate)));
Assert.IsTrue(db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity)));
Assert.IsTrue(db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction, false)));
Assert.IsTrue(db.TableExists(SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.TableIdx.SaSecItem)));
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_Internals_Control()
{
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>())
{
// Control internals.
Assert.IsNotNull(Internals_Control);
// Owners.
Assert.IsNotNull(Internals_Control.ControlInstanceMgr);
SbmcOwner.Params prmOwner = new SbmcOwner.Params();
prmOwner.StatusCat = SbmcOwner.StatusCat.ActiveOnly;
Assert.IsTrue(Internals_Control.ControlInstanceMgr.GetOwnerCount(prmOwner) > 0);
// Repositories.
Assert.IsNotNull(Internals_Control.ControlInstanceMgr);
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.StatusCat = SbmcRepository.StatusCat.ActiveOnly;
Assert.IsTrue(Internals_Control.ControlInstanceMgr.GetRepositoryCount(prmRepository) > 0);
}
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_CoreInstanceConsole()
{
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>())
{
// Repository.
SbmcRepository repository = GetRandomActiveRepository();
disposables.Add(repository);
Assert.IsNotNull(repository);
// Instance console.
SbmCoreInstanceConsole_Base instanceConsole = new SbmCoreInstanceConsole_Control(SessionData_Control, repository);
disposables.Add(instanceConsole);
Assert.IsNotNull(instanceConsole);
}
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_Internals_Core()
{
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>())
{
// Repository.
SbmcRepository repository = GetRandomActiveRepository();
disposables.Add(repository);
Assert.IsNotNull(repository);
// Instance console.
SbmCoreInstanceConsole_Base instanceConsole = new SbmCoreInstanceConsole_Control(SessionData_Control, repository);
disposables.Add(instanceConsole);
Assert.IsNotNull(instanceConsole);
}
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_Application_SessionContexts()
{
// Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>())
{
// Repository.
SbmcRepository repository = GetRandomActiveRepository();
disposables.Add(repository);
Assert.IsNotNull(repository);
SbmCoreInstanceConsole_Base instanceConsole = new SbmCoreInstanceConsole_Control(SessionData_Control, repository);
disposables.Add(instanceConsole);
Assert.IsNotNull(instanceConsole);
// Session Context.
ushort sessionIdx = App_Control.GetCoreSessionIndexForControlRepository(repository.OwnerId, repository.Id);
SbmSessionContext sessionContext = App_Control.GetSessionContextByIndex(sessionIdx);
Assert.IsNotNull(sessionContext);
Assert.AreEqual(sessionIdx, sessionContext.Index);
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -6,9 +6,11 @@ using Moq;
using Sarand.BusinessMgr.Net.Core.Web.App;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.BusinessMgr.Web.Control.App;
using Sarand.BusinessMgr.Web.Control.Consoles;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using System;
@@ -16,7 +18,7 @@ using System;
namespace Sarand.BusinessMgr.Test.Web.Control.App
{
//=======================================================================
public class SbmControlApp_Tester_Base
public class SbmApplication_Tester_Base : SacsDisposable
{
//-------------------------------------------------------------------
// Application.
@@ -34,30 +36,35 @@ namespace Sarand.BusinessMgr.Test.Web.Control.App
//-------------------------------------------------------------------
// Construction.
protected SbmControlApp_Tester_Base()
protected SbmApplication_Tester_Base()
{
// Application.
Mock<IConfiguration> mockConfiguration = new Mock<IConfiguration>();
Mock<IWebHostEnvironment> mockEnvironment = new Mock<IWebHostEnvironment>();
mockEnvironment.Setup(m => m.EnvironmentName).Returns(Environments.Development);
mockEnvironment.Setup(m => m.ContentRootPath).Returns(@"D:\Sarand\Projects\Users\AHoward\VS2022\BusinessMgr\Workspace\SaBusinessMgrCoreWebControl");
App = new SbmApplication_Control_Test(mockConfiguration.Object, mockEnvironment.Object);
App_Control = new SbmApplication_Control_Test(mockConfiguration.Object, mockEnvironment.Object);
Internals_Control = new SbmInternals_Control();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Internals_Control.Dispose();
}
}
//-------------------------------------------------------------------
// Properties.
protected SbmApplication_Control App { get; }
protected SbmApplication App { get { return App_Control; } }
protected SbmApplication_Web App_Web { get { return App_Control; } }
protected SbmApplication_Control App_Control { get; }
protected SbmSessionData_Control SessionData_Control { get; }
protected SbmInternals_Control Internals_Control { get; }
//-------------------------------------------------------------------
// User Context.
public static SbmUserContext GetUserContext(SbmSessionContext sessionContext)
{
SbmUserContext userContext = new SbmUserContext_Web(sessionContext);
return userContext;
}
// Utilities.
protected SbmInternals_Control CreateInternalsControl() { return new SbmInternals_Control(); }
//-------------------------------------------------------------------
// Core Instance Console.
@@ -68,10 +75,39 @@ namespace Sarand.BusinessMgr.Test.Web.Control.App
{
SbmcRepository repository = Internals_Control.ControlInstanceMgr.GetRepositoryByContext(instanceContext);
disposables.Add(repository);
return new SbmCoreInstanceConsole_Control(repository);
return new SbmCoreInstanceConsole_Control(SessionData_Control, repository);
}
}
//-------------------------------------------------------------------
// Repositories.
/// <summary>
/// Retrieve an active repository, randomly selected.
/// </summary>
protected SbmcRepository GetRandomActiveRepository()
{
// Repository.
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.StatusCat = SbmcRepository.StatusCat.ActiveOnly;
prmRepository.RandomOrder = true;
prmRepository.ResultsPaging.Set(1, 1);
return Internals_Control.ControlInstanceMgr.GetRepositoryList(prmRepository).First();
}
/// <summary>
/// Retrieve an active repository by context.
/// </summary>
protected SbmcRepository GetActiveRepositoryByContext(String repositoryContext)
{
// Repository.
SbmcRepository.Params prmRepository = new SbmcRepository.Params();
prmRepository.ContextsIncluded.Add(repositoryContext);
prmRepository.StatusCat = SbmcRepository.StatusCat.ActiveOnly;
prmRepository.ResultsPaging.Set(1, 1);
return Internals_Control.ControlInstanceMgr.GetRepositoryList(prmRepository).First();
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -1,90 +0,0 @@
using Microsoft.ApplicationInsights.Extensibility.Implementation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using Sarand.BusinessMgr.Net.Core.Web.Controllers;
using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
using Sarand.BusinessMgr.Net.Standard.Base.Bus.Control;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr;
using Sarand.BusinessMgr.Net.Standard.Base.Mgr.Control;
using Sarand.BusinessMgr.Web.Control.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Security;
using Sarand.Net.Standard.Base.Utils;
using System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Test.Web.Control.App
{
//=======================================================================
[TestClass]
public class SbmSessionData_Control_Test : SbmControlApp_Tester_Base
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SbmSessionData_Control_Test()
{
}
//-------------------------------------------------------------------
[TestMethod]
public void Test_SbmSessionData_Control_Serialization()
{
// Internals.
SbmcAccountMgr accountMgr = Internals_Control.ControlAccountMgr;
Assert.IsNotNull(accountMgr);
// User account.
SbmcUserAccount userAccount = accountMgr.GetUserAccountByEmailAddress("andy@sarand.com");
Assert.IsNotNull(userAccount);
// Session Context?
SbmSessionContext sessionContext_Core = null;
// Populate User Session.
SbmSessionData_Control sessionData = new SbmSessionData_Control(sessionContext_Core, userAccount);
Assert.IsNotNull(sessionData);
Assert.IsTrue(!StringUtil.IsBlank(sessionData.Base64IV_ControlApp));
Assert.IsTrue(sessionData.SessionIdx >= 1000);
Assert.IsTrue(sessionData.ItemIdx >= 1000);
// Validate user session.
Assert.IsNotNull(sessionData.User);
// User details.
Assert.AreEqual(userAccount.Id, sessionData.User.UserAccountId);
Assert.AreEqual(userAccount.EmailAddress, sessionData.User.EmailAddress);
Assert.AreEqual(userAccount.FirstName, sessionData.User.FirstName);
Assert.AreEqual(userAccount.LastName, sessionData.User.LastName);
Assert.AreEqual(userAccount.GetDisplayName(), sessionData.User.DisplayName);
// Serialise data.
string sessionDataJson = JsonConvert.SerializeObject(sessionData);
Assert.IsNotNull(sessionDataJson);
// Deserialise data.
SbmSessionData_Control? sessionDataDeserialized = JsonConvert.DeserializeObject<SbmSessionData_Control>(sessionDataJson, SbmController_Web.SbmSessionDataJsonSerializerSettings);
Assert.IsNotNull(sessionDataDeserialized);
// Validate deserialised data.
Assert.IsTrue(!StringUtil.IsBlank(sessionDataDeserialized.Base64IV_ControlApp));
Assert.AreEqual(sessionData.Base64IV_ControlApp, sessionDataDeserialized.Base64IV_ControlApp);
Assert.AreEqual(sessionData.SessionIdx, sessionDataDeserialized.SessionIdx);
Assert.AreEqual(sessionData.ItemIdx, sessionDataDeserialized.ItemIdx);
// User details.
Assert.IsNotNull(sessionDataDeserialized.User);
Assert.AreEqual(userAccount.Id, sessionDataDeserialized.User.UserAccountId);
Assert.AreEqual(userAccount.EmailAddress, sessionDataDeserialized.User.EmailAddress);
Assert.AreEqual(userAccount.FirstName, sessionDataDeserialized.User.FirstName);
Assert.AreEqual(userAccount.LastName, sessionDataDeserialized.User.LastName);
Assert.AreEqual(userAccount.GetDisplayName(), sessionDataDeserialized.User.DisplayName);
}
}
//=======================================================================
}