Skip to content

Commit

Permalink
Now almost Moq free! (WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
jas88 committed Aug 25, 2023
1 parent cb36031 commit c9f841e
Show file tree
Hide file tree
Showing 8 changed files with 948 additions and 166 deletions.
59 changes: 24 additions & 35 deletions HICPluginTests/AttacherTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
using DrsPlugin.Attachers;
using FAnsi;
using FAnsi.Discovery;
using HICPluginTests;
using ICSharpCode.SharpZipLib.Tar;
using Moq;
using NUnit.Framework;
using Rdmp.Core.Curation;
using Rdmp.Core.DataFlowPipeline;
Expand All @@ -25,7 +25,7 @@ namespace DrsPluginTests;
public class AttacherTests : DatabaseTests
{
private string _databaseName;
private readonly IDataLoadJob job = Mock.Of<IDataLoadJob>(j => j.JobID == 1);
private readonly IDataLoadJob _job = new MockDataLoadJob(1);


[OneTimeSetUp]
Expand Down Expand Up @@ -111,15 +111,13 @@ public void Checking_NoFilesInForLoading()
var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer);
try
{

var LoadDirectory = new Mock<ILoadDirectory>();
LoadDirectory.Setup(d => d.ForLoading).Returns(testDir);
var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "test");
var attacher = new DrsMultiVolumeRarAttacher();
attacher.Initialize(LoadDirectory.Object, db);
attacher.Initialize(loadDirectory, db);

var ex = Assert.Throws<Exception>(() => attacher.Check(ThrowImmediatelyCheckNotifier.Quiet));

Assert.AreEqual($"No files found in ForLoading: {testDir.FullName}", ex?.Message);
Assert.AreEqual($"No files found in ForLoading: {loadDirectory.ForLoading}", ex?.Message);
}
finally
{
Expand All @@ -134,17 +132,15 @@ public void Checking_CorrectlyFormedArchive()
var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer);
try
{
ProvisionTestData(testDir);

var LoadDirectory = new Mock<ILoadDirectory>();
LoadDirectory.Setup(d => d.ForLoading).Returns(testDir);
var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "test");
ProvisionTestData(loadDirectory.ForLoading);

var attacher = new DrsMultiVolumeRarAttacher
{
ManifestFileName = "GoDARTSv2.csv",
FilenameColumnName = "Image_Filename"
};
attacher.Initialize(LoadDirectory.Object, db);
attacher.Initialize(loadDirectory, db);

Assert.DoesNotThrow(() => attacher.Check(ThrowImmediatelyCheckNotifier.Quiet));
}
Expand All @@ -163,21 +159,19 @@ public void Checking_FailOnNonEmptyScratchDirectory()
var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer);
try
{
ProvisionTestData(testDir);

var LoadDirectory = new Mock<ILoadDirectory>();
LoadDirectory.Setup(d => d.ForLoading).Returns(testDir);
var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "test");
ProvisionTestData(loadDirectory.ForLoading);

var attacher = new DrsFileAttacher
{
ManifestFileName = "GoDARTSv2.csv",
FilenameColumnName = "Image_Filename",
SecureLocalScratchArea = scratchDir
};
attacher.Initialize(LoadDirectory.Object, db);
attacher.Initialize(loadDirectory, db);

var ex = Assert.Throws<Exception>(() => attacher.Check(ThrowImmediatelyCheckNotifier.Quiet));
Assert.AreEqual(ex.Message, "SecureLocalScratchArea is not empty, please ensure it is empty before attempting to attach.");
Assert.AreEqual(ex?.Message, "SecureLocalScratchArea is not empty, please ensure it is empty before attempting to attach.");
}
finally
{
Expand All @@ -193,17 +187,15 @@ public void Checking_ManifestMismatch_MissingImages()
var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer);
try
{
ProvisionTestData(testDir, TestData.TestData.DRS_RETINAL_TEST_MANIFEST_ADDITIONAL_ENTRY);

var LoadDirectory = new Mock<ILoadDirectory>();
LoadDirectory.Setup(d => d.ForLoading).Returns(testDir);
var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "test");
ProvisionTestData(loadDirectory.ForLoading, TestData.TestData.DRS_RETINAL_TEST_MANIFEST_ADDITIONAL_ENTRY);

var attacher = new DrsMultiVolumeRarAttacher
{
ManifestFileName = "GoDARTSv2.csv",
FilenameColumnName = "Image_Filename"
};
attacher.Initialize(LoadDirectory.Object, db);
attacher.Initialize(loadDirectory, db);

var ex = Assert.Throws<Exception>(() => attacher.Check(ThrowImmediatelyCheckNotifier.Quiet));
Assert.AreEqual("These files are specified in the manifest but are not present in the archive: 2_2345678901_2016-05-19_RM_1_PW1024_PH768.png", ex?.Message);
Expand All @@ -221,17 +213,15 @@ public void Checking_ManifestMismatch_MissingManifestEntries()
var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer);
try
{
ProvisionTestData(testDir, TestData.TestData.DRS_RETINAL_TEST_MANIFEST_MISSING_ENTRY);

var LoadDirectory = new Mock<ILoadDirectory>();
LoadDirectory.Setup(d => d.ForLoading).Returns(testDir);
var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "test");
ProvisionTestData(loadDirectory.ForLoading, TestData.TestData.DRS_RETINAL_TEST_MANIFEST_MISSING_ENTRY);

var attacher = new DrsMultiVolumeRarAttacher
{
ManifestFileName = "GoDARTSv2.csv",
FilenameColumnName = "Image_Filename"
};
attacher.Initialize(LoadDirectory.Object, db);
attacher.Initialize(loadDirectory, db);

var ex = Assert.Throws<Exception>(() => attacher.Check(ThrowImmediatelyCheckNotifier.Quiet));
Assert.AreEqual("These files are present in the archive but are not specified in the manifest: 2_2345678901_2016-05-18_LM_2_PW1024_PH768.png", ex?.Message);
Expand Down Expand Up @@ -265,7 +255,7 @@ public void AttacherTest_Success()
};

attacher.Initialize(loadDirectory, DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(_databaseName));
attacher.Attach(job,new GracefulCancellationToken());
attacher.Attach(_job,new GracefulCancellationToken());
attacher.LoadCompletedSoDispose(ExitCodeType.Success, ThrowImmediatelyDataLoadEventListener.Quiet);

// Should now only be the CSV file in ForLoading (which would be archived during the real load process)
Expand All @@ -292,8 +282,7 @@ public void AttacherTest_Success()

private DiscoveredTable GetPhenotypeTable()
{
var database = DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(_databaseName);
return database.DiscoverTables(false).Single(t => t.GetRuntimeName() == "GoDARTSv2_TEST");
return DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(_databaseName).ExpectTable("GoDARTSv2_TEST");
}

private void TruncatePhenotypeTable()
Expand Down Expand Up @@ -334,7 +323,7 @@ public void AttacherTest_SuccessWithPreExtractedArchive()
};
attacher.Initialize(loadDirectory, DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(_databaseName));

attacher.Attach(job,new GracefulCancellationToken());
attacher.Attach(_job,new GracefulCancellationToken());
attacher.LoadCompletedSoDispose(ExitCodeType.Success, ThrowImmediatelyDataLoadEventListener.Quiet);

// Should now only be the CSV file in ForLoading (which would be archived during the real load process)
Expand Down Expand Up @@ -382,7 +371,7 @@ public void EnsureImagePixelDataIsNotCorrupted()
};

attacher.Initialize(loadDirectory, DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(_databaseName));
attacher.Attach(job, new GracefulCancellationToken());
attacher.Attach(_job, new GracefulCancellationToken());
attacher.LoadCompletedSoDispose(ExitCodeType.Success, ThrowImmediatelyDataLoadEventListener.Quiet);

// The stripped files will now be in the archive so unzip them
Expand Down Expand Up @@ -557,7 +546,7 @@ public void AttacherWithFilesystemArchiveProvider()
};
csvAttacher.Initialize(loadDirectory, database);

csvAttacher.Attach(job, new GracefulCancellationToken());
csvAttacher.Attach(_job, new GracefulCancellationToken());

var attacher = new DrsFileAttacher
{
Expand All @@ -571,7 +560,7 @@ public void AttacherWithFilesystemArchiveProvider()
};
attacher.Initialize(loadDirectory, database);

attacher.Attach(job, new GracefulCancellationToken());
attacher.Attach(_job, new GracefulCancellationToken());
attacher.LoadCompletedSoDispose(ExitCodeType.Success, ThrowImmediatelyDataLoadEventListener.Quiet);

Assert.AreEqual(3, archiveDir.EnumerateFiles("*.tar", SearchOption.AllDirectories).Count(),
Expand Down
48 changes: 11 additions & 37 deletions HICPluginTests/ExtractionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
using System.Linq;
using System.Text.RegularExpressions;
using DrsPlugin.Extraction;
using HICPluginTests;
using ICSharpCode.SharpZipLib.Tar;
using Moq;
using NUnit.Framework;
using Rdmp.Core.Curation;
using Rdmp.Core.Curation.Data;
using Rdmp.Core.Curation.Data.DataLoad;
using Rdmp.Core.DataExport.Data;
using Rdmp.Core.DataExport.DataExtraction;
using Rdmp.Core.DataExport.DataExtraction.Commands;
using Rdmp.Core.DataExport.DataExtraction.UserPicks;
using Rdmp.Core.DataFlowPipeline;
using Rdmp.Core.QueryBuilding;
using Rdmp.Core.ReusableLibraryCode.Progress;
Expand All @@ -38,10 +34,9 @@ public void FilenameReplacerTest()
dataset.Columns.Add("Image_Filename");
dataset.Rows.Add("R00001", @"17/05/2016", "R", "1", "1024", "768", "2_P12345_2016-05-07_RM_1_PW1024_PH768.png");

var extractionIdentifierColumn = new Mock<IColumn>();
extractionIdentifierColumn.Setup(c => c.GetRuntimeName()).Returns("ReleaseID");
var extractionIdentifierColumn = new MockColumn("ReleaseID");

var replacer = new DRSFilenameReplacer(extractionIdentifierColumn.Object, "Image_Filename");
var replacer = new DRSFilenameReplacer(extractionIdentifierColumn, "Image_Filename");

Assert.AreEqual("R00001_2016-05-17_1.png", replacer.GetCorrectFilename(dataset.Rows[0]));
}
Expand Down Expand Up @@ -245,34 +240,13 @@ private IExtractDatasetCommand SetupRequestObject(string projDir, DirectoryInfo
};
loadMetadata.SaveToDatabase();

var catalogue = Mock.Of<ICatalogue>(c=>c.LoadMetadata==loadMetadata);

var extractableDataset = Mock.Of<IExtractableDataSet>();
var datasetBundle = Mock.Of<IExtractableDatasetBundle>(
dsb => dsb.DataSet == extractableDataset);

var extractionDirectory = new Mock<IExtractionDirectory>();
extractionDirectory.Setup(d => d.GetDirectoryForDataset(It.IsAny<IExtractableDataSet>())).Returns(rootDir);

var cohort = new Mock<IExtractableCohort>();
cohort.Setup(c => c.GetPrivateIdentifier(It.IsAny<bool>())).Returns("PrivateID");
cohort.Setup(c => c.GetReleaseIdentifier(It.IsAny<bool>())).Returns("ReleaseID");

var extractableColumn = new Mock<IColumn>();
extractableColumn.Setup(c => c.GetRuntimeName()).Returns("CHI");
extractableColumn.Setup(c => c.IsExtractionIdentifier).Returns(true);
var queryTimeColumn = new QueryTimeColumn(extractableColumn.Object);
var queryBuilder = new Mock<ISqlQueryBuilder>();
queryBuilder.Setup(qb => qb.SelectColumns).Returns(new[] { queryTimeColumn }.ToList());
var request = Mock.Of<IExtractDatasetCommand>(
r =>
r.Catalogue==catalogue &&
r.DatasetBundle == datasetBundle &&
r.ColumnsToExtract==new List<IColumn> {extractableColumn.Object} &&
r.Directory==extractionDirectory.Object &&
r.ExtractableCohort==cohort.Object &&
r.QueryBuilder==queryBuilder.Object
);
return request;
var catalogue = new MockCatalogue(loadMetadata);

var extractionDirectory = new MockExtractionDirectory(rootDir);

var extractableColumn = new MockColumn("CHI",true);
var queryTimeColumn = new QueryTimeColumn(extractableColumn);
var queryBuilder = new MockSqlQueryBuilder(new List<QueryTimeColumn> { queryTimeColumn });
return new MockExtractDatasetCommand(catalogue,extractionDirectory,new List<IColumn> {extractableColumn},queryBuilder);
}
}
24 changes: 8 additions & 16 deletions HICPluginTests/Integration/SCIStoreDataTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
using System.IO;
using System.Linq;
using System.Xml.Serialization;
using Moq;
using HICPluginTests;
using NUnit.Framework;
using Rdmp.Core.Validation.Constraints.Secondary;
using Rdmp.Core.ReusableLibraryCode.Progress;
using SCIStorePlugin.Data;

Expand All @@ -25,17 +24,14 @@ public void TestResultsDuplicationInTestSetDetails()
data = (CombinedReportData) xmlSerialiser.Deserialize(fs);
}

var readCodeConstraint = new Mock<ReferentialIntegrityConstraint>();
readCodeConstraint.Setup(
c => c.Validate(It.IsAny<object>(), It.IsAny<object[]>(), It.IsAny<string[]>()))
.Returns(value:null);
var readCodeConstraint = new MockReferentialIntegrityConstraint();

var reportFactory = new SciStoreReportFactory(readCodeConstraint.Object);
var reportFactory = new SciStoreReportFactory(readCodeConstraint);
var report = reportFactory.Create(data, ThrowImmediatelyDataLoadEventListener.Quiet);

Assert.AreEqual(7, report.Samples.Count);

var totalNumResults = report.Samples.Aggregate(0, (s, n) => s + n.Results.Count);
var totalNumResults = report.Samples.Aggregate(0, static (s, n) => s + n.Results.Count);
Assert.AreEqual(21, totalNumResults);

}
Expand All @@ -55,17 +51,13 @@ public void Test_MultipleTestResultOrdersThatAreTheSame()
data = (CombinedReportData)xmlSerialiser.Deserialize(fs);
}

var readCodeConstraint = new Mock<ReferentialIntegrityConstraint>();
readCodeConstraint.Setup(
c => c.Validate(It.IsAny<object>(), It.IsAny<object[]>(), It.IsAny<string[]>()))
.Returns(value:null);

var reportFactory = new SciStoreReportFactory(readCodeConstraint.Object);
var readCodeConstraint = new MockReferentialIntegrityConstraint();
var reportFactory = new SciStoreReportFactory(readCodeConstraint);
var report = reportFactory.Create(data, ThrowImmediatelyDataLoadEventListener.Quiet);

Assert.AreEqual(7, report.Samples.Count);

var totalNumResults = report.Samples.Aggregate(0, (s, n) => s + n.Results.Count);
var totalNumResults = report.Samples.Aggregate(0, static (s, n) => s + n.Results.Count);
Assert.AreEqual(21, totalNumResults);

//artificially introduce duplication
Expand All @@ -81,7 +73,7 @@ public void Test_MultipleTestResultOrdersThatAreTheSame()
sciStoreSample.ResolveTestResultOrderDuplication();
}

var totalNumResultsAfterResolvingArtificiallyCreatedDuplication = report.Samples.Aggregate(0, (s, n) => s + n.Results.Count);
var totalNumResultsAfterResolvingArtificiallyCreatedDuplication = report.Samples.Aggregate(0, static (s, n) => s + n.Results.Count);
Assert.AreEqual(7, totalNumResultsAfterResolvingArtificiallyCreatedDuplication);


Expand Down
11 changes: 3 additions & 8 deletions HICPluginTests/Integration/SCIStoreWebServiceProviderTests.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
using System.IO;
using System.Xml.Serialization;
using HICPluginTests;
using Moq;
using NUnit.Framework;
using Rdmp.Core.Validation;
using Rdmp.Core.Validation.Constraints.Secondary;
using Rdmp.Core.ReusableLibraryCode.Progress;
using SCIStorePlugin.Data;
using Tests.Common;
Expand All @@ -22,12 +20,9 @@ public void LabWithDifferentClinicalCodeDescriptionsForSameTestCode()
var serializer = new XmlSerializer(typeof(CombinedReportData));
var lab = serializer.Deserialize(new StringReader(TestReports.report_with_multiple_descriptions)) as CombinedReportData;

var readCodeConstraint = new Mock<ReferentialIntegrityConstraint>();
readCodeConstraint.Setup(
c => c.Validate(It.IsAny<object>(), It.IsAny<object[]>(), It.IsAny<string[]>()))
.Returns(value:null);
var readCodeConstraint = new MockReferentialIntegrityConstraint();

var reportFactory = new SciStoreReportFactory(readCodeConstraint.Object);
var report = reportFactory.Create(lab, ThrowImmediatelyDataLoadEventListener.Quiet);
var reportFactory = new SciStoreReportFactory(readCodeConstraint);
reportFactory.Create(lab, ThrowImmediatelyDataLoadEventListener.Quiet);
}
}
Loading

0 comments on commit c9f841e

Please sign in to comment.