From d94eb638c51a249e33bc400f1633b9785b3c2556 Mon Sep 17 00:00:00 2001 From: Oliver Maus Date: Tue, 9 Jan 2024 18:03:35 +0100 Subject: [PATCH] Add fixtures & unit tests for ParamBasedParsers --- playground.fsx | 31 +++++++++++++++--- .../Fixtures/correct/assay_simple.xlsx | Bin 0 -> 23111 bytes .../Fixtures/correct/study_simple.xlsx | Bin 0 -> 21152 bytes .../IntegrationTests/AssayMetadata.fs | 26 ++++++++++++++- .../IntegrationTests/InvestigationMetadata.fs | 10 ++++++ .../IntegrationTests/StudyMetadata.fs | 21 +++++++++++- 6 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 tests/ARCTokenization.Tests/Fixtures/correct/assay_simple.xlsx create mode 100644 tests/ARCTokenization.Tests/Fixtures/correct/study_simple.xlsx diff --git a/playground.fsx b/playground.fsx index aa85dbf..ea6f5c6 100644 --- a/playground.fsx +++ b/playground.fsx @@ -7,12 +7,9 @@ //File.Copy(dllBasePath + "/FsSpreadsheet.ExcelIO/bin/Debug/netstandard2.0/FsSpreadsheet.ExcelIO.dll", dllBasePath + "/FsSpreadsheet.ExcelIO/bin/Debug/netstandard2.0/FsSpreadsheet.ExcelIO_Copy.dll", true) //File.Copy(@"C:\Repos\nfdi4plants\ArcGraphModel\src\ArcGraphModel\bin\Debug\net6.0\ArcGraphModel.dll", @"C:\Repos\nfdi4plants\ArcGraphModel\src\ArcGraphModel\bin\Debug\net6.0\ArcGraphModel_Copy.dll", true) -#r "nuget: DocumentFormat.OpenXml" #r "nuget: FSharpAux" #r "nuget: FsOboParser" -#r "nuget: FsSpreadsheet, 3.1.1" -#r "nuget: FsSpreadsheet.ExcelIO, 3.1.1" -#r "nuget: FSharp.FGL" +#r "nuget: FsSpreadsheet.ExcelIO, 4.1.0" #r "nuget: FSharp.FGL.ArrayAdjacencyGraph" open DocumentFormat.OpenXml @@ -45,6 +42,32 @@ open FsOboParser open ControlledVocabulary open type ControlledVocabulary.ParamBase open ARCTokenization +open ARCTokenization.StructuralOntology + +System.IO.Directory.GetCurrentDirectory() +let fakePath = CvParam(cvTerm = AFSO.``File Path``, v = System.IO.Directory.GetCurrentDirectory() + "/tests/ARCTokenization.Tests/Fixtures/correct/investigation_simple.xlsx") + +let fakePath = CvParam(cvTerm = AFSO.``File Path``, v = "tests/ARCTokenization.Tests/Fixtures/correct/assay_simple.xlsx") +let actual = ParamBasedParsers.parseIsaMetadataSheetFromCvp "assay_simple.xlsx" Assay.parseMetadataSheetFromFile [fakePath] |> Seq.head +actual.Length +let exp = + ARCMock.AssayMetadataTokens( + Assay_File_Name = [@"measurement1\isa.assay.xlsx"], + Assay_Performer_First_Name = ["Oliver"; "Marius"], + Assay_Performer_Last_Name = ["Maus"; "Katz"], + Assay_Performer_Mid_Initials = [""; "G."], + Assay_Performer_Email = ["maus@nfdi4plants.org"], + Assay_Performer_Affiliation = ["RPTU University of Kaiserslautern"], + Assay_Performer_Roles = ["research assistant"], + Assay_Performer_Roles_Term_Accession_Number = ["http://purl.org/spar/scoro/research-assistant"], + Assay_Performer_Roles_Term_Source_REF = ["scoro"] + ) + |> List.concat +exp.Length +actual |> List.fold (fun acc ip -> $"{acc}\n{ip.Name}") "" |> printfn "%s" +exp |> List.iter (fun ip -> printfn $"{ip.Name}") +for i = 0 to 33 do + printfn $"{List.tryItem i actual |> Option.map (fun x -> x.Name) |> Option.defaultValue System.String.Empty}\t{List.tryItem i exp |> Option.map (fun x -> x.Name) |> Option.defaultValue System.String.Empty}" let testAccession1 = "TO:00000001" let testName1 = "Test" diff --git a/tests/ARCTokenization.Tests/Fixtures/correct/assay_simple.xlsx b/tests/ARCTokenization.Tests/Fixtures/correct/assay_simple.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d3ad4bc9730ce33279fbfba98d9a128ba5446e9f GIT binary patch literal 23111 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 IoWUR-0038qZ~y=R literal 0 HcmV?d00001 diff --git a/tests/ARCTokenization.Tests/Fixtures/correct/study_simple.xlsx b/tests/ARCTokenization.Tests/Fixtures/correct/study_simple.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7dd9d68bb214c909c4c26497175a9e6b0eb9b857 GIT binary patch literal 21152 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 u5&;1Chwc445&mvX{k1!Q_+PsJX List.map (fun p -> CvParam(p, ParamValue.CvValue (CvTerm.create(accession = "AGMO:00000001", name = "Metadata Section Key", ref = "AGMO")), [])) \ No newline at end of file + |> List.map (fun p -> CvParam(p, ParamValue.CvValue (CvTerm.create(accession = "AGMO:00000001", name = "Metadata Section Key", ref = "AGMO")), [])) + + open ARCTokenization.StructuralOntology + + let allExpectedMetadataTermsFull = + ARCMock.AssayMetadataTokens( + Assay_File_Name = [@"measurement1\isa.assay.xlsx"], + Assay_Performer_First_Name = ["Oliver"; "Marius"], + Assay_Performer_Last_Name = ["Maus"; "Katz"], + Assay_Performer_Mid_Initials = [""; "G."], + Assay_Performer_Email = ["maus@nfdi4plants.org"], + Assay_Performer_Affiliation = ["RPTU University of Kaiserslautern"], + Assay_Performer_Roles = ["research assistant"], + Assay_Performer_Roles_Term_Accession_Number = ["http://purl.org/spar/scoro/research-assistant"], + Assay_Performer_Roles_Term_Source_REF = ["scoro"] + ) + |> List.concat // use flat list + + [] + let ``Simple study is parsed from filepath CvParam with all structural ontology terms in order`` () = + let fakePath = CvParam(cvTerm = AFSO.``File Path``, v = "Fixtures/correct/assay_simple.xlsx") + let actual = ParamBasedParsers.parseIsaMetadataSheetFromCvp "assay_simple.xlsx" Assay.parseMetadataSheetFromFile [fakePath] |> Seq.head + Assert.All((List.zip allExpectedMetadataTermsFull actual), (fun (expected,actual) -> + CvParam.structuralEquality (expected) (actual :?> CvParam) + )) \ No newline at end of file diff --git a/tests/ARCTokenization.Tests/IntegrationTests/InvestigationMetadata.fs b/tests/ARCTokenization.Tests/IntegrationTests/InvestigationMetadata.fs index 6fb8120..d0e6b3e 100644 --- a/tests/ARCTokenization.Tests/IntegrationTests/InvestigationMetadata.fs +++ b/tests/ARCTokenization.Tests/IntegrationTests/InvestigationMetadata.fs @@ -55,4 +55,14 @@ module InvestigationMetadata = let ``Simple investigation is parsed with all structural ontology terms in order`` () = Assert.All((List.zip allExpectedMetadataTermsFull parsedInvestigationMetadataSimple), (fun (expected,actual) -> CvParam.structuralEquality (expected) (actual :?> CvParam) + )) + + open ARCTokenization.StructuralOntology + + [] + let ``Simple investigation is parsed from filepath CvParam with all structural ontology terms in order`` () = + let fakePath = CvParam(cvTerm = AFSO.``File Path``, v = "Fixtures/correct/investigation_simple.xlsx") + let actual = ParamBasedParsers.parseIsaMetadataSheetFromCvp "investigation_simple.xlsx" Investigation.parseMetadataSheetFromFile [fakePath] |> Seq.head + Assert.All((List.zip allExpectedMetadataTermsFull actual), (fun (expected,actual) -> + CvParam.structuralEquality (expected) (actual :?> CvParam) )) \ No newline at end of file diff --git a/tests/ARCTokenization.Tests/IntegrationTests/StudyMetadata.fs b/tests/ARCTokenization.Tests/IntegrationTests/StudyMetadata.fs index 287cbf7..da47d99 100644 --- a/tests/ARCTokenization.Tests/IntegrationTests/StudyMetadata.fs +++ b/tests/ARCTokenization.Tests/IntegrationTests/StudyMetadata.fs @@ -12,4 +12,23 @@ module StudyMetadata = let allExpectedMetadataTermsEmpty = Terms.StudyMetadata.nonObsoleteNonRootCvTerms - |> List.map (fun p -> CvParam(p, ParamValue.CvValue (CvTerm.create(accession = "AGMO:00000001", name = "Metadata Section Key", ref = "AGMO")), [])) \ No newline at end of file + |> List.map (fun p -> CvParam(p, ParamValue.CvValue (CvTerm.create(accession = "AGMO:00000001", name = "Metadata Section Key", ref = "AGMO")), [])) + + let allExpectedMetadataTermsFull = + ARCMock.StudyMetadataTokens( + Study_Identifier = ["experiment1_material"], + Study_Title = ["Prototype for experimental data"], + Study_Description = ["In this a devised study to have an exemplary experimental material description."], + Study_File_Name = [@"experiment1_material\isa.study.xlsx"] + ) + |> List.concat // use flat list + + open ARCTokenization.StructuralOntology + + [] + let ``Simple study is parsed from filepath CvParam with all structural ontology terms in order`` () = + let fakePath = CvParam(cvTerm = AFSO.``File Path``, v = "Fixtures/correct/study_simple.xlsx") + let actual = ParamBasedParsers.parseIsaMetadataSheetFromCvp "study_simple.xlsx" Study.parseMetadataSheetfromFile [fakePath] |> Seq.head + Assert.All((List.zip allExpectedMetadataTermsFull actual), (fun (expected,actual) -> + CvParam.structuralEquality (expected) (actual :?> CvParam) + )) \ No newline at end of file