Skip to content

Commit d2d7c53

Browse files
committed
test and fix ro-crate propertyValue parsing
1 parent 022c7a4 commit d2d7c53

6 files changed

Lines changed: 55 additions & 8 deletions

File tree

src/Core/OntologyAnnotation.fs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ type OntologyAnnotation(?name,?tsr,?tan, ?comments) =
5555
$"{Url.OntobeeOboPurl}{termSourceRef}_{localTAN}"
5656

5757
/// Will always be created without `OntologyAnnotion.Name`
58-
static member fromTermAnnotation (tan : string) =
58+
static member fromTermAnnotation (tan : string, ?name) =
59+
let name = Option.defaultValue "" name
5960
tan
6061
|> Regex.tryParseTermAnnotation
6162
|> Option.get
6263
|> fun r ->
6364
let accession = r.IDSpace + ":" + r.LocalID
64-
OntologyAnnotation.create ("", r.IDSpace, accession)
65+
OntologyAnnotation.create (name, r.IDSpace, accession)
6566

6667
/// Parses any value in `TermAccessionString` to term accession format "termsourceref:localtan". Exmp.: "MS:000001".
6768
///

src/Json/Process/PropertyValue.fs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,21 @@ module PropertyValue =
5757
let category =
5858
let name = get.Optional.Field "category" Decode.string
5959
let code = get.Optional.Field "categoryCode" Decode.string
60-
if name.IsNone && code.IsNone then None
61-
else Some(OntologyAnnotation.create(?name = name, ?tan = code))
60+
match name, code with
61+
| None, None -> None
62+
| _, None -> Some(OntologyAnnotation.create(?name = name))
63+
| _, Some code -> Some(OntologyAnnotation.fromTermAnnotation(code, ?name = name))
6264
let value =
63-
let value = get.Optional.Field "value" Decode.string
65+
let value = get.Optional.Field "value" AnnotationValue.decoder
6466
let code = get.Optional.Field "valueCode" Decode.string
6567
if value.IsNone && code.IsNone then None
6668
else Value.fromOptions value None code
6769
let unit =
6870
let name = get.Optional.Field "unit" Decode.string
6971
let code = get.Optional.Field "unitCode" Decode.string
70-
if name.IsNone && code.IsNone then None
71-
else Some(OntologyAnnotation.create(?name = name, ?tan = code))
72+
match name, code with
73+
| None, None -> None
74+
| _, None -> Some(OntologyAnnotation.create(?name = name))
75+
| _, Some code -> Some(OntologyAnnotation.fromTermAnnotation(code, ?name = name))
7276
create category value unit
7377
)

src/Json/Study.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ module Study =
170170
/// <param name="assays"></param>
171171
let encoder (assays: ArcAssay list option) (s : ArcStudy) =
172172
let study = s.Copy(true)
173-
let fileName = Identifier.Assay.fileNameFromIdentifier study.Identifier
173+
let fileName = Identifier.Study.fileNameFromIdentifier study.Identifier
174174
let assaysRaw = Helper.getAssayInformation assays study
175175
let assays =
176176
let n = ResizeArray()

tests/Json/ARCtrl.Json.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<Compile Include="Assay.Tests.fs" />
2727
<Compile Include="Study.Tests.fs" />
2828
<Compile Include="Investigation.Tests.fs" />
29+
<Compile Include="Process\ProcessParameterValue.fs" />
2930
<Compile Include="Process\ProcessInput.Tests.fs" />
3031
<Compile Include="Process\Protocol.Tests.fs" />
3132
<Compile Include="Process\Process.Tests.fs" />

tests/Json/Main.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ let all = testSequenced <| testList "Json" [
1616
Tests.Study.main
1717
Tests.Investigation.main
1818
Tests.Template.main
19+
Tests.Process.ProcessParameterValue.main
1920
Tests.Process.ProcessInput.main
2021
Tests.Process.Protocol.main
2122
Tests.Process.Process.main
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
module Tests.Process.ProcessParameterValue
2+
3+
open ARCtrl
4+
open ARCtrl.Process
5+
open ARCtrl.Json
6+
open TestingUtils
7+
open TestObjects.Json
8+
9+
let private tests_roCrate =
10+
testList "RO-Crate" [
11+
testCase "ReadWriteIntegerValue" (fun () ->
12+
let pp = ProtocolParameter.create(ParameterName = OntologyAnnotation("temperature","NCIT","http://purl.obolibrary.org/obo/NCIT_0000029"))
13+
let value = Value.Int 25
14+
let unit = OntologyAnnotation("degree Celsius","UO","http://purl.obolibrary.org/obo/UO_0000185")
15+
let ppv = ProcessParameterValue.create(pp,value,unit)
16+
17+
let roCrate = ProcessParameterValue.toROCrateJsonString() ppv
18+
let ppv2 = ProcessParameterValue.fromROCrateJsonString roCrate
19+
20+
Expect.equal ppv ppv2 "RO-Crate roundtrip failed"
21+
)
22+
testCase "ReadWriteOntologyValue" (fun () ->
23+
let pp = ProtocolParameter.create(ParameterName = OntologyAnnotation("organism","NCIT","http://purl.obolibrary.org/obo/NCIT_0000029"))
24+
let value = Value.Ontology (OntologyAnnotation(
25+
"chlamydomonas reinhardtii",
26+
"NCIT",
27+
"http://purl.obolibrary.org/obo/NCIT_0000030"
28+
))
29+
let ppv = ProcessParameterValue.create(pp,value)
30+
31+
let roCrate = ProcessParameterValue.toROCrateJsonString() ppv
32+
let ppv2 = ProcessParameterValue.fromROCrateJsonString roCrate
33+
34+
Expect.equal ppv ppv2 "RO-Crate roundtrip failed"
35+
)
36+
]
37+
38+
let main = testList "ProcessParameterValue" [
39+
tests_roCrate
40+
]

0 commit comments

Comments
 (0)