using DTS.Common.Interface.TestMetaData; using DTS.Common.Classes.TestEngineerDetails; using NUnit.Framework; using System; using System.Linq; namespace DatabaseUnitTesting { [TestFixture] public partial class DBAPITests { public TestEngineerDetailsDbRecord CreateFakeTestEngineerDetails(string name) { var record = new TestEngineerDetailsDbRecord(); record.TestEngineerId = -1; record.Name = name; record.TestEngineerName = Guid.NewGuid().ToString().Substring(0, 15); record.TestEngineerName = Guid.NewGuid().ToString().Substring(0, 15); record.TestEngineerPhone = Guid.NewGuid().ToString().Substring(0, 15); record.TestEngineerFax = Guid.NewGuid().ToString().Substring(0, 15); record.TestEngineerEmail = Guid.NewGuid().ToString().Substring(0, 15); record.LocalOnly = true; record.LastModified = DateTime.Today; record.LastModifiedBy = "NUNIT"; record.Version = 1; return record; } [Test] public void TestEngineerDetails() { if (!_setup) { Setup(); } TestLogin(); var connections = DbAPI.DbAPI.Connections.GetActiveConnections(); //Delete all to start with a blank table var hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsDelete(_user, connections.First(), null, out string errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsDelete"); //Get all hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), null, out ITestEngineerDetailsDbRecord[] allTestEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != allTestEngineerDetailsDbRecords && allTestEngineerDetailsDbRecords.Length == 0, "TestEngineerDetailsGet 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 = CreateFakeTestEngineerDetails("legit"); var decoyRecord = CreateFakeTestEngineerDetails("decoy"); //Insert hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsInsert(_user, connections.First(), legitRecord, out int newLegitId, out string legitErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a legitimate TestEngineerDetails record"); hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsInsert(_user, connections.First(), decoyRecord, out int newFakeId, out string fakeErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a decoy TestEngineerDetails record"); //Get by Name hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), legitRecord.Name, out ITestEngineerDetailsDbRecord[] testEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != testEngineerDetailsDbRecords && testEngineerDetailsDbRecords.Length == 1, "TestEngineerDetailsGet should have retrieved 1 record"); Assert.IsTrue(testEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet should have retrieved only one record"); //Get all hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), null, out allTestEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != allTestEngineerDetailsDbRecords && allTestEngineerDetailsDbRecords.Length == 2, "TestEngineerDetailsGet should have retrieved 2 records"); Assert.IsTrue(allTestEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet should have retrieved our record"); Assert.IsTrue(allTestEngineerDetailsDbRecords.Any(r => r.Name == decoyRecord.Name), "TestEngineerDetailsGet should have retrieved our record"); //Update var newTestEngineerPhone = Guid.NewGuid().ToString().Substring(0, 15); legitRecord.TestEngineerPhone = newTestEngineerPhone; hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsUpdate(_user, connections.First(), legitRecord, out legitErrorString); Assert.IsTrue(0 == hr, "Should be able to insert a legitimate TestEngineerDetails record"); Assert.IsTrue(legitErrorString == string.Empty, $"Error when inserting a legitimate TestEngineerDetails record: {legitErrorString}"); //Get by Name hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), legitRecord.Name, out testEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != testEngineerDetailsDbRecords && testEngineerDetailsDbRecords.Length == 1, "TestEngineerDetailsGet should have retrieved 1 record"); Assert.IsTrue(testEngineerDetailsDbRecords.Any(r => r.TestEngineerPhone == newTestEngineerPhone), "TestEngineerDetailsGet should have retrieved the updated record"); //Delete by Name hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsDelete(_user, connections.First(), legitRecord.Name, out errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsDelete"); //Get by Name hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), legitRecord.Name, out testEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != testEngineerDetailsDbRecords, "TestEngineerDetailsGet should not have retrieved this record"); Assert.IsFalse(testEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet should not have retrieved this record"); //Get all hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), null, out allTestEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != allTestEngineerDetailsDbRecords && allTestEngineerDetailsDbRecords.Length == 1, "TestEngineerDetailsGet should have retrieved only the decoy record"); Assert.IsFalse(allTestEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet not should have retrieved this record"); Assert.IsTrue(allTestEngineerDetailsDbRecords.Any(r => r.Name == decoyRecord.Name), "TestEngineerDetailsGet should have retrieved this record"); //Delete all hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsDelete(_user, connections.First(), null, out errorMessage); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsDelete"); //Get by Name hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), legitRecord.Name, out testEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != testEngineerDetailsDbRecords, "TestEngineerDetailsGet should not have retrieved this record"); Assert.IsFalse(testEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet should not have retrieved any records"); //Get all hr = DbAPI.DbAPI.TestEngineerDetails.TestEngineerDetailsGet(_user, connections.First(), null, out allTestEngineerDetailsDbRecords); Assert.IsTrue(0 == hr, "Should return 0 for TestEngineerDetailsGet"); Assert.IsTrue(null != allTestEngineerDetailsDbRecords, "TestEngineerDetailsGet should not have retrieved this record"); Assert.IsFalse(allTestEngineerDetailsDbRecords.Any(r => r.Name == legitRecord.Name), "TestEngineerDetailsGet should not have retrieved any records"); } } }