Skip to content

Commit

Permalink
adding QueryTx and WriteTx tests, #22
Browse files Browse the repository at this point in the history
  • Loading branch information
almibe committed Feb 13, 2023
1 parent e8dfed2 commit 25f6cdf
Showing 1 changed file with 74 additions and 3 deletions.
77 changes: 74 additions & 3 deletions src/LigatureTestSuite/Main.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,36 @@ open Ligature

let inline todo<'T> : 'T = raise (System.NotImplementedException("todo"))

/// Unsafe helper function for creating Datasets.
let ds name =
match dataset name with
| Ok (ds) -> ds
| Error (_) -> todo

/// Unsafe helper function for creating Identifiers.
let id ident =
match identifier ident with
| Ok (i) -> i
| Error (_) -> todo

/// Unsafe helper function for creating statements for testing.
let statement (entity: string) (attribute: string) (value: Value) =
let e = id entity
let a = id attribute
{ Entity = e; Attribute = a; Value = value; }

let ligatureTestSuite (createInstance: Unit -> Ligature) =
let helloDS = ds "hello"
let hello2DS = ds "hello2"
let hello3DS = ds "hello3"

let jvName = statement "character:1" "name" (String "Jean Valjean")
let jvNumber = statement "character:1" "prisonerNumber" (Integer 24601)
let javertName = statement "character:2" "name" (String "Inspector Javert")
let nemesis = statement "character:2" "hasNemesis" (id "character:1" |> Identifier)
let statements = Array.sort [|jvName; jvNumber; javertName; nemesis|]

testList "Datasets Tests" [
testList "Ligature Test Suite" [
testCase "start with no Datasets" <| fun _ ->
let instance = createInstance ()
let datasets = instance.AllDatasets()
Expand All @@ -34,7 +55,57 @@ let ligatureTestSuite (createInstance: Unit -> Ligature) =
//TODO - add "match datasets prefix exact"
//TODO - add "match datasets prefix"
//TODO - add "match datasets range"
testCase "create and remove Dataset" <| fun _ ->
testCase "create and remove new Dataset" <| fun _ ->
let instance = createInstance ()
instance.CreateDataset helloDS |> ignore
instance.CreateDataset hello2DS |> ignore
instance.RemoveDataset helloDS |> ignore
instance.RemoveDataset hello3DS |> ignore
let datasets = instance.AllDatasets ()
Expect.equal datasets (Ok [|hello2DS|]) "Dataset should only contain hello2 Dataset."

testCase "new Dataset should be empty" <| fun _ ->
let instance = createInstance ()
instance.CreateDataset (helloDS) |> ignore
let result = instance.Query helloDS (fun tx -> tx.AllStatements ())
Expect.equal result (Ok [||]) "Newly created Dataset should be empty."
testCase "add new Statements to Dataset" <| fun _ ->
let instance = createInstance ()
todo
instance.CreateDataset (helloDS) |> ignore
instance.Write helloDS (fun tx -> Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements; Ok ()) |> ignore
let result = instance.Query helloDS (fun tx -> tx.AllStatements ())
let result = Result.map (fun statements -> Array.sort statements) result
Expect.equal result (Ok statements) "Dataset should contain new Statements."
testCase "add new Statements to Dataset with dupes" <| fun _ ->
let instance = createInstance ()
instance.CreateDataset (helloDS) |> ignore
instance.Write helloDS (fun tx ->
Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements
Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements
Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements
Ok ()) |> ignore
let result = instance.Query helloDS (fun tx -> tx.AllStatements ())
let result = Result.map (fun statements -> Array.sort statements) result
Expect.equal result (Ok statements) "Dataset should contain new Statements."
//TODO - add new Identifier test
testCase "removing Statements from Dataset" <| fun _ ->
let instance = createInstance ()
instance.CreateDataset (helloDS) |> ignore
instance.Write helloDS (fun tx ->
Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements
tx.RemoveStatement nemesis |> ignore
Ok ()) |> ignore
let result = instance.Query helloDS (fun tx -> tx.AllStatements ())
let result = Result.map (fun statements -> Array.sort statements) result
Expect.equal result (Ok (Array.filter (fun statement -> statement = nemesis |> not) statements)) "Dataset should contain all but removed Statements."
testCase "matching Statements in Dataset" <| fun _ ->
let instance = createInstance ()
instance.CreateDataset (helloDS) |> ignore
instance.Write helloDS (fun tx ->
Array.iter (fun statement -> tx.AddStatement statement |> ignore) statements
Ok ()) |> ignore
let results = instance.Query helloDS (fun tx -> tx.MatchStatements None None None)
let results = Result.map (fun statements -> Array.sort statements) results
Expect.equal results (Ok statements) ""
//TODO add more query cases
]

0 comments on commit 25f6cdf

Please sign in to comment.