using DTS.Common.Interface.Database; using NUnit.Framework; using System.IO; using System.Linq; namespace DatabaseUnitTesting { [TestFixture] public partial class DBAPITests { private const string INSTANCE_NAME = "DataPROInstance"; private const string LOCAL_SERVER = @"(localdb)\DataPROInstance"; private const string SCRIPTS_FOLDER = "SQL Server Scripts"; private const string LOCAL_DB_FOLDER = "db"; private const string ISO = "ISO"; private const string ATTACH_DBS_BAT = "AttachDBs.bat"; private bool _setup = false; private IUserDbRecord _user = null; private const int SettingsDefaultMaxLogFileSize = 4194304; private const int SettingsDefaultDBLoggingLevel = 783; private int clientDbVersion = DTS.Common.Storage.DbOperations.MINIMUM_LTS_DB_VERSION; [OneTimeSetUp] public void Setup() { if (!DbAPI.DbAPI._loggerInitialized) { DbAPI.DbAPI.InitializeLogger(SettingsDefaultMaxLogFileSize, "Logs", SettingsDefaultDBLoggingLevel); } var dllLocation = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); var debugOrRelease = dllLocation.Directory.Name; var architecture = dllLocation.Directory.Parent.Name; var curDir = System.Environment.CurrentDirectory; if (curDir.Contains("Common")) { curDir = curDir.Substring(0, curDir.IndexOf("Common")); curDir = Path.Combine(curDir, "DataPRO"); } else { var tokens = curDir.Split(new[] { Path.DirectorySeparatorChar }); var count = tokens.Count(d => d.Equals("DataPRO")); if (1 == count) { tokens[0] = $"{tokens[0]}{Path.DirectorySeparatorChar}"; var index = tokens.ToList().IndexOf("DataPRO"); tokens = tokens.Take(index + 1).ToArray(); curDir = Path.Combine(tokens); } else if (0 == count) { curDir = Path.Combine(curDir, "DataPRO"); } } var exeOutputLocation = Path.Combine(curDir, "DataPRO", "bin", architecture, debugOrRelease); var details = new DbAPI.Connections.ConnectionDetails(); details.AttachDbsBatPath = Path.Combine(exeOutputLocation, SCRIPTS_FOLDER, ATTACH_DBS_BAT); details.DbFolderPath = Path.Combine(exeOutputLocation, LOCAL_DB_FOLDER); details.DbName = "DataPRO"; details.UsingCentralizedDb = false; details.DbServer = LOCAL_SERVER; details.InstanceName = INSTANCE_NAME; details.UseNTLMAuthentication = true; details.SqlDbPath = DTS.Common.Utils.Database.GetSqlServerLocalDbPath(); details.ODBCToolsPath = DTS.Common.Utils.Database.GetODBCToolsPath(null); var res = DbAPI.DbAPI.Connections.ConnectToDb(details); _setup = true; } [Test] public void TestConnect() { if (!_setup) { Setup(); } var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); Assert.IsTrue(connections.Any(), $"Db connected"); } private void Login() { var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); var hr = DbAPI.DbAPI.Connections.LoginUser(connections.First(), "Admin", "DTSAdmin", out var user); if (0 == hr) { _user = user; clientDbVersion = connections.FirstOrDefault().ClientDbVersion; } } [Test] public void TestLogin() { if (!_setup) { Setup(); } TestConnect(); if (null == _user) { Login(); } Assert.IsNotNull(_user, "User logged in"); } } }