using DTS.Common.Interface.TestMetaData; using DTS.Common.Classes.LabratoryDetails; using NUnit.Framework; using System; using System.Linq; namespace DatabaseUnitTesting { [TestFixture] public partial class DBAPITests { public LabratoryDetailsDbRecord CreateFakeLabratoryDetails(string name) { var record = new LabratoryDetailsDbRecord(); record.LabratoryId = -1; record.Name = name; record.LabratoryName = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryContactName = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryContactPhone = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryContactFax = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryContactEmail = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryTestRefNumber = Guid.NewGuid().ToString().Substring(0, 15); record.LabratoryProjectRefNumber = Guid.NewGuid().ToString().Substring(0, 15); record.LastModified = DateTime.Today; record.LastModifiedBy = "NUNIT"; record.LocalOnly = true; record.Version = 1; return record; } [Test] public void LaboratoryDetails() { if (!_setup) { Setup(); } TestLogin(); var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); //Delete all to start with a blank table var hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsDelete(_user, connections.First(), null, out string errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsDelete"); //Get all hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), null, out ILabratoryDetailsDbRecord[] allLabratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != allLabratoryDetailsDbRecords && allLabratoryDetailsDbRecords.Length == 0, "LabratoryDetailsGet should have retrieved 0 records"); //we'll insert two records, one which is the one we'll be testing with get, and one that is just a decoy //for tests which we do not expect to be returned, etc. var legitRecord = CreateFakeLabratoryDetails("legit"); var decoyRecord = CreateFakeLabratoryDetails("decoy"); //Insert hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsInsert(_user, connections.First(), legitRecord, out int newLegitId, out string legitErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a legitimate LabratoryDetails record"); hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsInsert(_user, connections.First(), decoyRecord, out int newFakeId, out string fakeErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a decoy LabratoryDetails record"); //Get by Name hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), legitRecord.Name, out ILabratoryDetailsDbRecord[] labratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != labratoryDetailsDbRecords && labratoryDetailsDbRecords.Length == 1, "LabratoryDetailsGet should have retrieved 1 record"); Assert.IsTrue(labratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet should have retrieved only one record"); //Get all hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), null, out allLabratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != allLabratoryDetailsDbRecords && allLabratoryDetailsDbRecords.Length == 2, "LabratoryDetailsGet should have retrieved 2 records"); Assert.IsTrue(allLabratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet should have retrieved our record"); Assert.IsTrue(allLabratoryDetailsDbRecords.Any(r => r.Name == decoyRecord.Name), "LabratoryDetailsGet should have retrieved our record"); //Update var newLabratoryTestRefNumber = Guid.NewGuid().ToString().Substring(0, 15); legitRecord.LabratoryTestRefNumber = newLabratoryTestRefNumber; hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsUpdate(_user, connections.First(), legitRecord, out legitErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a legitimate LabratoryDetails record"); Assert.IsTrue(legitErrorString == string.Empty, $"Error when inserting a legitimate LabratoryDetails record: {legitErrorString}"); //Get by Name hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), legitRecord.Name, out labratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != labratoryDetailsDbRecords && labratoryDetailsDbRecords.Length == 1, "LabratoryDetailsGet should have retrieved 1 record"); Assert.IsTrue(labratoryDetailsDbRecords.Any(r => r.LabratoryTestRefNumber == newLabratoryTestRefNumber), "LabratoryDetailsGet should have retrieved the updated record"); //Delete by Name hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsDelete(_user, connections.First(), legitRecord.Name, out errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsDelete"); //Get by Name hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), legitRecord.Name, out labratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != labratoryDetailsDbRecords, "LabratoryDetailsGet should not have retrieved this record"); Assert.IsFalse(labratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet should not have retrieved this record"); //Get all hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), null, out allLabratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != allLabratoryDetailsDbRecords && allLabratoryDetailsDbRecords.Length == 1, "LabratoryDetailsGet should have retrieved only the decoy record"); Assert.IsFalse(allLabratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet not should have retrieved this record"); Assert.IsTrue(allLabratoryDetailsDbRecords.Any(r => r.Name == decoyRecord.Name), "LabratoryDetailsGet should have retrieved this record"); //Delete all hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsDelete(_user, connections.First(), null, out errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsDelete"); //Get by Name hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), legitRecord.Name, out labratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != labratoryDetailsDbRecords, "LabratoryDetailsGet should not have retrieved this record"); Assert.IsFalse(labratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet should not have retrieved any records"); //Get all hr = DbAPI.DbAPI.LabratoryDetails.LabratoryDetailsGet(_user, connections.First(), null, out allLabratoryDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for LabratoryDetailsGet"); Assert.IsTrue(null != allLabratoryDetailsDbRecords, "LabratoryDetailsGet should not have retrieved this record"); Assert.IsFalse(allLabratoryDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "LabratoryDetailsGet should not have retrieved any records"); } } }