using System;
using System.Collections.Generic;
using Centron.BusinessLogic.WebServices.DataExchange.Connectors;
using Centron.DAO;
using Centron.DAO.Mappings.DataExchange.Connectors;
using Centron.Data.Entities.Administration.Logins;
using Centron.Interfaces.BL;
using CentronSoftware.Centron.WebServices.Entities.DataExchange.Connectors;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using Xunit;
namespace Centron.Tests.BL.DataExchange.Connectors;
///
/// Guard tests for (no full rights/DB setup for SETTINGS).
///
[TestSubject(typeof(DocBeeTicketTemplateWebServiceBL))]
public class DocBeeTicketTemplateWebServiceBLTest
{
[Fact]
public void SyncTemplates_WhenCurrentUserNull_ReturnsError()
{
using var session = CreateSession();
var daoSession = new DAOSession(session);
var wsbl = new DocBeeTicketTemplateWebServiceBL(daoSession);
var result = wsbl.SyncTemplates(new List(), null!);
Assert.Equal(ResultStatus.Error, result.Status);
Assert.Contains("User information is required", result.Message, StringComparison.Ordinal);
}
[Fact]
public void SyncTemplates_WhenUserNull_ReturnsError()
{
using var session = CreateSession();
var daoSession = new DAOSession(session);
var wsbl = new DocBeeTicketTemplateWebServiceBL(daoSession);
var loggedIn = new LoggedInUser(appUserI3D: null, user: null);
var result = wsbl.SyncTemplates(new List(), loggedIn);
Assert.Equal(ResultStatus.Error, result.Status);
Assert.Contains("User does not have permission", result.Message, StringComparison.Ordinal);
}
[Fact]
public void GetAllTemplates_DelegatesToBl_EmptyDatabase()
{
using var session = CreateSession();
var daoSession = new DAOSession(session);
var wsbl = new DocBeeTicketTemplateWebServiceBL(daoSession);
var result = wsbl.GetAllTemplates();
Assert.Equal(ResultStatus.Success, result.Status);
Assert.NotNull(result.Data);
Assert.Empty(result.Data);
}
private static ISession CreateSession()
{
var fluentConfig = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add());
var sessionFactory = fluentConfig.BuildSessionFactory();
var session = sessionFactory.OpenSession();
new SchemaExport(fluentConfig.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}