V3 rc2 (#2)
- Implements `Field` type for by-field actions (**BREAKING**) - Adds `RemoveFields*` functions/methods for removing fields from documents
This commit was merged in pull request #2.
This commit is contained in:
@@ -45,13 +45,13 @@ let all =
|
||||
testList "whereByField" [
|
||||
test "succeeds when a logical operator is passed" {
|
||||
Expect.equal
|
||||
(Query.whereByField "theField" GT "@test")
|
||||
(Query.whereByField (Field.GT "theField" 0) "@test")
|
||||
"data ->> 'theField' > @test"
|
||||
"WHERE clause not correct"
|
||||
}
|
||||
test "succeeds when an existence operator is passed" {
|
||||
Expect.equal
|
||||
(Query.whereByField "thatField" NEX "")
|
||||
(Query.whereByField (Field.NEX "thatField") "")
|
||||
"data ->> 'thatField' IS NULL"
|
||||
"WHERE clause not correct"
|
||||
}
|
||||
@@ -107,7 +107,7 @@ let all =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Count.byField tbl "thatField" EQ)
|
||||
(Query.Count.byField tbl (Field.EQ "thatField" 0))
|
||||
$"SELECT COUNT(*) AS it FROM {tbl} WHERE data ->> 'thatField' = @field"
|
||||
"JSON field text comparison count query not correct"
|
||||
}
|
||||
@@ -121,7 +121,7 @@ let all =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Exists.byField tbl "Test" LT)
|
||||
(Query.Exists.byField tbl (Field.LT "Test" 0))
|
||||
$"SELECT EXISTS (SELECT 1 FROM {tbl} WHERE data ->> 'Test' < @field) AS it"
|
||||
"JSON field text comparison exists query not correct"
|
||||
}
|
||||
@@ -135,7 +135,7 @@ let all =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Find.byField tbl "Golf" GE)
|
||||
(Query.Find.byField tbl (Field.GE "Golf" 0))
|
||||
$"SELECT data FROM {tbl} WHERE data ->> 'Golf' >= @field"
|
||||
"SELECT by JSON comparison query not correct"
|
||||
}
|
||||
@@ -149,7 +149,7 @@ let all =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Delete.byField tbl "gone" NEX)
|
||||
(Query.Delete.byField tbl (Field.NEX "gone"))
|
||||
$"DELETE FROM {tbl} WHERE data ->> 'gone' IS NULL"
|
||||
"DELETE by JSON comparison query not correct"
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! theCount = conn.countByField PostgresDb.TableName "Value" EQ "purple"
|
||||
let! theCount = conn.countByField PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.equal theCount 2 "There should have been 2 matching documents"
|
||||
}
|
||||
testTask "countByContains succeeds" {
|
||||
@@ -257,7 +257,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! exists = conn.existsByField PostgresDb.TableName "Sub" EX ""
|
||||
let! exists = conn.existsByField PostgresDb.TableName (Field.EX "Sub")
|
||||
Expect.isTrue exists "There should have been existing documents"
|
||||
}
|
||||
testTask "succeeds when documents do not exist" {
|
||||
@@ -265,7 +265,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! exists = conn.existsByField PostgresDb.TableName "NumValue" EQ "six"
|
||||
let! exists = conn.existsByField PostgresDb.TableName (Field.EQ "NumValue" "six")
|
||||
Expect.isFalse exists "There should not have been existing documents"
|
||||
}
|
||||
]
|
||||
@@ -354,7 +354,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! docs = conn.findByField<JsonDocument> PostgresDb.TableName "Value" EQ "another"
|
||||
let! docs = conn.findByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.equal (List.length docs) 1 "There should have been one document returned"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
@@ -362,7 +362,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! docs = conn.findByField<JsonDocument> PostgresDb.TableName "Value" EQ "mauve"
|
||||
let! docs = conn.findByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "mauve")
|
||||
Expect.isEmpty docs "There should have been no documents returned"
|
||||
}
|
||||
]
|
||||
@@ -408,7 +408,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName "Value" EQ "another"
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.isSome doc "There should have been a document returned"
|
||||
Expect.equal doc.Value.Id "two" "The incorrect document was returned"
|
||||
}
|
||||
@@ -417,7 +417,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName "Value" EQ "purple"
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.isSome doc "There should have been a document returned"
|
||||
Expect.contains [ "five"; "four" ] doc.Value.Id "An incorrect document was returned"
|
||||
}
|
||||
@@ -426,7 +426,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName "Value" EQ "absent"
|
||||
let! doc = conn.findFirstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "absent")
|
||||
Expect.isNone doc "There should not have been a document returned"
|
||||
}
|
||||
]
|
||||
@@ -562,8 +562,8 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.patchByField PostgresDb.TableName "Value" EQ "purple" {| NumValue = 77 |}
|
||||
let! after = conn.countByField PostgresDb.TableName "NumValue" EQ "77"
|
||||
do! conn.patchByField PostgresDb.TableName (Field.EQ "Value" "purple") {| NumValue = 77 |}
|
||||
let! after = conn.countByField PostgresDb.TableName (Field.EQ "NumValue" "77")
|
||||
Expect.equal after 2 "There should have been 2 documents returned"
|
||||
}
|
||||
testTask "succeeds when no document is updated" {
|
||||
@@ -573,7 +573,7 @@ let integrationTests =
|
||||
Expect.equal before 0 "There should have been no documents returned"
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.patchByField PostgresDb.TableName "Value" EQ "burgundy" {| Foo = "green" |}
|
||||
do! conn.patchByField PostgresDb.TableName (Field.EQ "Value" "burgundy") {| Foo = "green" |}
|
||||
}
|
||||
]
|
||||
testList "patchByContains" [
|
||||
@@ -616,6 +616,162 @@ let integrationTests =
|
||||
do! conn.patchByJsonPath PostgresDb.TableName "$.NumValue ? (@ < 0)" {| Foo = "green" |}
|
||||
}
|
||||
]
|
||||
testList "removeFieldsById" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsById PostgresDb.TableName "two" [ "Sub"; "Value" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsById PostgresDb.TableName "two" [ "Sub" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsById PostgresDb.TableName "two" [ "AFieldThatIsNotThere" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsById PostgresDb.TableName "two" [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "removeFieldsByField" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Sub"; "Value" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Sub" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByField PostgresDb.TableName (Field.NE "Abracadabra" "apple") [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "removeFieldsByContains" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByContains PostgresDb.TableName {| NumValue = 17 |} [ "Sub"; "Value" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByContains PostgresDb.TableName {| NumValue = 17 |} [ "Sub" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByContains PostgresDb.TableName {| NumValue = 17 |} [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByContains PostgresDb.TableName {| Abracadabra = "apple" |} [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "removeFieldsByJsonPath" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Sub"; "Value" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.removeFieldsByJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Sub" ]
|
||||
let! noSubs = conn.countByField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = conn.countByField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use conn = mkConn db
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByJsonPath PostgresDb.TableName "$.Abracadabra ? (@ == \"apple\")" [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "deleteById" [
|
||||
testTask "succeeds when a document is deleted" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
@@ -642,7 +798,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.deleteByField PostgresDb.TableName "Value" EQ "purple"
|
||||
do! conn.deleteByField PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
let! remaining = conn.countAll PostgresDb.TableName
|
||||
Expect.equal remaining 3 "There should have been 3 documents remaining"
|
||||
}
|
||||
@@ -651,7 +807,7 @@ let integrationTests =
|
||||
use conn = mkConn db
|
||||
do! loadDocs conn
|
||||
|
||||
do! conn.deleteByField PostgresDb.TableName "Value" EQ "crimson"
|
||||
do! conn.deleteByField PostgresDb.TableName (Field.EQ "Value" "crimson")
|
||||
let! remaining = conn.countAll PostgresDb.TableName
|
||||
Expect.equal remaining 5 "There should have been 5 documents remaining"
|
||||
}
|
||||
|
||||
@@ -18,15 +18,23 @@ let unitTests =
|
||||
("@test", Sql.jsonb """{"Something":"good"}""")
|
||||
"JSON parameter not constructed correctly"
|
||||
}
|
||||
test "fieldParam succeeds" {
|
||||
let it = fieldParam 242
|
||||
Expect.equal (fst it) "@field" "Field parameter name not correct"
|
||||
match snd it with
|
||||
| SqlValue.Parameter value ->
|
||||
Expect.equal value.ParameterName "@field" "Parameter name not correct"
|
||||
Expect.equal value.Value 242 "Parameter value not correct"
|
||||
| _ -> Expect.isTrue false "The parameter was not a Parameter type"
|
||||
}
|
||||
testList "addFieldParam" [
|
||||
test "succeeds when a parameter is added" {
|
||||
let paramList = addFieldParam "@field" (Field.EQ "it" "242") []
|
||||
Expect.hasLength paramList 1 "There should have been a parameter added"
|
||||
let it = paramList[0]
|
||||
Expect.equal (fst it) "@field" "Field parameter name not correct"
|
||||
match snd it with
|
||||
| SqlValue.Parameter value ->
|
||||
Expect.equal value.ParameterName "@field" "Parameter name not correct"
|
||||
Expect.equal value.Value "242" "Parameter value not correct"
|
||||
| _ -> Expect.isTrue false "The parameter was not a Parameter type"
|
||||
}
|
||||
test "succeeds when a parameter is not added" {
|
||||
let paramList = addFieldParam "@field" (Field.EX "tacos") []
|
||||
Expect.isEmpty paramList "There should not have been any parameters added"
|
||||
}
|
||||
]
|
||||
test "noParams succeeds" {
|
||||
Expect.isEmpty noParams "The no-params sequence should be empty"
|
||||
}
|
||||
@@ -110,7 +118,7 @@ let unitTests =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Patch.byField PostgresDb.TableName "Snail" LT)
|
||||
(Query.Patch.byField PostgresDb.TableName (Field.LT "Snail" 0))
|
||||
$"UPDATE {PostgresDb.TableName} SET data = data || @data WHERE data ->> 'Snail' < @field"
|
||||
"UPDATE partial by ID statement not correct"
|
||||
}
|
||||
@@ -127,6 +135,32 @@ let unitTests =
|
||||
"UPDATE partial by JSON Path statement not correct"
|
||||
}
|
||||
]
|
||||
testList "RemoveFields" [
|
||||
test "byId succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byId "tbl")
|
||||
"UPDATE tbl SET data = data - @name WHERE data ->> 'Id' = @id"
|
||||
"Remove field by ID query not correct"
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byField "tbl" (Field.LT "Fly" 0))
|
||||
"UPDATE tbl SET data = data - @name WHERE data ->> 'Fly' < @field"
|
||||
"Remove field by field query not correct"
|
||||
}
|
||||
test "byContains succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byContains "tbl")
|
||||
"UPDATE tbl SET data = data - @name WHERE data @> @criteria"
|
||||
"Remove field by contains query not correct"
|
||||
}
|
||||
test "byJsonPath succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byJsonPath "tbl")
|
||||
"UPDATE tbl SET data = data - @name WHERE data @? @path::jsonpath"
|
||||
"Remove field by JSON path query not correct"
|
||||
}
|
||||
]
|
||||
testList "Delete" [
|
||||
test "byContains succeeds" {
|
||||
Expect.equal (Query.Delete.byContains PostgresDb.TableName)
|
||||
@@ -357,7 +391,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! theCount = Count.byField PostgresDb.TableName "Value" EQ "purple"
|
||||
let! theCount = Count.byField PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.equal theCount 2 "There should have been 2 matching documents"
|
||||
}
|
||||
testTask "byContains succeeds" {
|
||||
@@ -397,14 +431,14 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = Exists.byField PostgresDb.TableName "Sub" EX ""
|
||||
let! exists = Exists.byField PostgresDb.TableName (Field.EX "Sub")
|
||||
Expect.isTrue exists "There should have been existing documents"
|
||||
}
|
||||
testTask "succeeds when documents do not exist" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = Exists.byField PostgresDb.TableName "NumValue" EQ "six"
|
||||
let! exists = Exists.byField PostgresDb.TableName (Field.EQ "NumValue" "six")
|
||||
Expect.isFalse exists "There should not have been existing documents"
|
||||
}
|
||||
]
|
||||
@@ -486,14 +520,14 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = Find.byField<JsonDocument> PostgresDb.TableName "Value" EQ "another"
|
||||
let! docs = Find.byField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.equal (List.length docs) 1 "There should have been one document returned"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = Find.byField<JsonDocument> PostgresDb.TableName "Value" EQ "mauve"
|
||||
let! docs = Find.byField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "mauve")
|
||||
Expect.isEmpty docs "There should have been no documents returned"
|
||||
}
|
||||
]
|
||||
@@ -534,7 +568,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName "Value" EQ "another"
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.isSome doc "There should have been a document returned"
|
||||
Expect.equal doc.Value.Id "two" "The incorrect document was returned"
|
||||
}
|
||||
@@ -542,7 +576,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName "Value" EQ "purple"
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.isSome doc "There should have been a document returned"
|
||||
Expect.contains [ "five"; "four" ] doc.Value.Id "An incorrect document was returned"
|
||||
}
|
||||
@@ -550,7 +584,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName "Value" EQ "absent"
|
||||
let! doc = Find.firstByField<JsonDocument> PostgresDb.TableName (Field.EQ "Value" "absent")
|
||||
Expect.isNone doc "There should not have been a document returned"
|
||||
}
|
||||
]
|
||||
@@ -682,8 +716,8 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Patch.byField PostgresDb.TableName "Value" EQ "purple" {| NumValue = 77 |}
|
||||
let! after = Count.byField PostgresDb.TableName "NumValue" EQ "77"
|
||||
do! Patch.byField PostgresDb.TableName (Field.EQ "Value" "purple") {| NumValue = 77 |}
|
||||
let! after = Count.byField PostgresDb.TableName (Field.EQ "NumValue" "77")
|
||||
Expect.equal after 2 "There should have been 2 documents returned"
|
||||
}
|
||||
testTask "succeeds when no document is updated" {
|
||||
@@ -693,7 +727,7 @@ let integrationTests =
|
||||
Expect.equal before 0 "There should have been no documents returned"
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! Patch.byField PostgresDb.TableName "Value" EQ "burgundy" {| Foo = "green" |}
|
||||
do! Patch.byField PostgresDb.TableName (Field.EQ "Value" "burgundy") {| Foo = "green" |}
|
||||
}
|
||||
]
|
||||
testList "byContains" [
|
||||
@@ -735,6 +769,148 @@ let integrationTests =
|
||||
}
|
||||
]
|
||||
]
|
||||
testList "RemoveFields" [
|
||||
testList "byId" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byId PostgresDb.TableName "two" [ "Sub"; "Value" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byId PostgresDb.TableName "two" [ "Sub" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byId PostgresDb.TableName "two" [ "AFieldThatIsNotThere" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byId PostgresDb.TableName "two" [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "byField" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Sub"; "Value" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Sub" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byField PostgresDb.TableName (Field.EQ "NumValue" "17") [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byField PostgresDb.TableName (Field.NE "Abracadabra" "apple") [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "byContains" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byContains PostgresDb.TableName {| NumValue = 17 |} [ "Sub"; "Value" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byContains PostgresDb.TableName {| NumValue = 17 |} [ "Sub" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byContains PostgresDb.TableName {| NumValue = 17 |} [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byContains PostgresDb.TableName {| Abracadabra = "apple" |} [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "byJsonPath" [
|
||||
testTask "succeeds when multiple fields are removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Sub"; "Value" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 1 "There should be 1 document without Value fields"
|
||||
}
|
||||
testTask "succeeds when a single field is removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Sub" ]
|
||||
let! noSubs = Count.byField PostgresDb.TableName (Field.NEX "Sub")
|
||||
Expect.equal noSubs 4 "There should now be 4 documents without Sub fields"
|
||||
let! noValue = Count.byField PostgresDb.TableName (Field.NEX "Value")
|
||||
Expect.equal noValue 0 "There should be no documents without Value fields"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byJsonPath PostgresDb.TableName "$.NumValue ? (@ == 17)" [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byJsonPath PostgresDb.TableName "$.Abracadabra ? (@ == \"apple\")" [ "Value" ]
|
||||
}
|
||||
]
|
||||
]
|
||||
testList "Delete" [
|
||||
testList "byId" [
|
||||
testTask "succeeds when a document is deleted" {
|
||||
@@ -759,7 +935,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Delete.byField PostgresDb.TableName "Value" EQ "purple"
|
||||
do! Delete.byField PostgresDb.TableName (Field.EQ "Value" "purple")
|
||||
let! remaining = Count.all PostgresDb.TableName
|
||||
Expect.equal remaining 3 "There should have been 3 documents remaining"
|
||||
}
|
||||
@@ -767,7 +943,7 @@ let integrationTests =
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Delete.byField PostgresDb.TableName "Value" EQ "crimson"
|
||||
do! Delete.byField PostgresDb.TableName (Field.EQ "Value" "crimson")
|
||||
let! remaining = Count.all PostgresDb.TableName
|
||||
Expect.equal remaining 5 "There should have been 5 documents remaining"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module SqliteExtensionTests
|
||||
|
||||
open System.Text.Json
|
||||
open BitBadger.Documents
|
||||
open BitBadger.Documents.Sqlite
|
||||
open BitBadger.Documents.Tests
|
||||
@@ -117,7 +118,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! theCount = conn.countByField SqliteDb.TableName "Value" EQ "purple"
|
||||
let! theCount = conn.countByField SqliteDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.equal theCount 2L "There should have been 2 matching documents"
|
||||
}
|
||||
testList "existsById" [
|
||||
@@ -144,7 +145,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = conn.existsByField SqliteDb.TableName "NumValue" EQ 10
|
||||
let! exists = conn.existsByField SqliteDb.TableName (Field.EQ "NumValue" 10)
|
||||
Expect.isTrue exists "There should have been existing documents"
|
||||
}
|
||||
testTask "succeeds when no matching documents exist" {
|
||||
@@ -152,7 +153,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = conn.existsByField SqliteDb.TableName "Nothing" EQ "none"
|
||||
let! exists = conn.existsByField SqliteDb.TableName (Field.EQ "Nothing" "none")
|
||||
Expect.isFalse exists "There should not have been any existing documents"
|
||||
}
|
||||
]
|
||||
@@ -205,7 +206,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = conn.findByField<JsonDocument> SqliteDb.TableName "Sub.Foo" EQ "green"
|
||||
let! docs = conn.findByField<JsonDocument> SqliteDb.TableName (Field.EQ "Sub.Foo" "green")
|
||||
Expect.equal (List.length docs) 2 "There should have been two documents returned"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
@@ -213,7 +214,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = conn.findByField<JsonDocument> SqliteDb.TableName "Value" EQ "mauve"
|
||||
let! docs = conn.findByField<JsonDocument> SqliteDb.TableName (Field.EQ "Value" "mauve")
|
||||
Expect.isTrue (List.isEmpty docs) "There should have been no documents returned"
|
||||
}
|
||||
]
|
||||
@@ -223,7 +224,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName "Value" EQ "another"
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.isTrue (Option.isSome doc) "There should have been a document returned"
|
||||
Expect.equal doc.Value.Id "two" "The incorrect document was returned"
|
||||
}
|
||||
@@ -232,7 +233,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName "Sub.Foo" EQ "green"
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Sub.Foo" "green")
|
||||
Expect.isTrue (Option.isSome doc) "There should have been a document returned"
|
||||
Expect.contains [ "two"; "four" ] doc.Value.Id "An incorrect document was returned"
|
||||
}
|
||||
@@ -241,7 +242,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName "Value" EQ "absent"
|
||||
let! doc = conn.findFirstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Value" "absent")
|
||||
Expect.isFalse (Option.isSome doc) "There should not have been a document returned"
|
||||
}
|
||||
]
|
||||
@@ -329,8 +330,8 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
do! conn.patchByField SqliteDb.TableName "Value" EQ "purple" {| NumValue = 77 |}
|
||||
let! after = conn.countByField SqliteDb.TableName "NumValue" EQ 77
|
||||
do! conn.patchByField SqliteDb.TableName (Field.EQ "Value" "purple") {| NumValue = 77 |}
|
||||
let! after = conn.countByField SqliteDb.TableName (Field.EQ "NumValue" 77)
|
||||
Expect.equal after 2L "There should have been 2 documents returned"
|
||||
}
|
||||
testTask "succeeds when no document is updated" {
|
||||
@@ -341,7 +342,67 @@ let integrationTests =
|
||||
Expect.isEmpty before "There should have been no documents returned"
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.patchByField SqliteDb.TableName "Value" EQ "burgundy" {| Foo = "green" |}
|
||||
do! conn.patchByField SqliteDb.TableName (Field.EQ "Value" "burgundy") {| Foo = "green" |}
|
||||
}
|
||||
]
|
||||
testList "removeFieldsById" [
|
||||
testTask "succeeds when fields are removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
do! conn.removeFieldsById SqliteDb.TableName "two" [ "Sub"; "Value" ]
|
||||
try
|
||||
let! _ = conn.findById<string, JsonDocument> SqliteDb.TableName "two"
|
||||
Expect.isTrue false "The updated document should have failed to parse"
|
||||
with
|
||||
| :? JsonException -> ()
|
||||
| exn as ex -> Expect.isTrue false $"Threw {ex.GetType().Name} ({ex.Message})"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsById SqliteDb.TableName "two" [ "AFieldThatIsNotThere" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsById SqliteDb.TableName "two" [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "removeFieldByField" [
|
||||
testTask "succeeds when a field is removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
do! conn.removeFieldsByField SqliteDb.TableName (Field.EQ "NumValue" 17) [ "Sub" ]
|
||||
try
|
||||
let! _ = conn.findById<string, JsonDocument> SqliteDb.TableName "four"
|
||||
Expect.isTrue false "The updated document should have failed to parse"
|
||||
with
|
||||
| :? JsonException -> ()
|
||||
| exn as ex -> Expect.isTrue false $"Threw {ex.GetType().Name} ({ex.Message})"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByField SqliteDb.TableName (Field.EQ "NumValue" 17) [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
use conn = Configuration.dbConn ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! conn.removeFieldsByField SqliteDb.TableName (Field.NE "Abracadabra" "apple") [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "deleteById" [
|
||||
@@ -370,7 +431,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
do! conn.deleteByField SqliteDb.TableName "Value" NE "purple"
|
||||
do! conn.deleteByField SqliteDb.TableName (Field.NE "Value" "purple")
|
||||
let! remaining = conn.countAll SqliteDb.TableName
|
||||
Expect.equal remaining 2L "There should have been 2 documents remaining"
|
||||
}
|
||||
@@ -379,7 +440,7 @@ let integrationTests =
|
||||
use conn = Configuration.dbConn ()
|
||||
do! loadDocs ()
|
||||
|
||||
do! conn.deleteByField SqliteDb.TableName "Value" EQ "crimson"
|
||||
do! conn.deleteByField SqliteDb.TableName (Field.EQ "Value" "crimson")
|
||||
let! remaining = conn.countAll SqliteDb.TableName
|
||||
Expect.equal remaining 5L "There should have been 5 documents remaining"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module SqliteTests
|
||||
|
||||
open System.Text.Json
|
||||
open BitBadger.Documents
|
||||
open BitBadger.Documents.Sqlite
|
||||
open BitBadger.Documents.Tests
|
||||
@@ -26,11 +27,28 @@ let unitTests =
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.Patch.byField "tbl" "Part" NE)
|
||||
(Query.Patch.byField "tbl" (Field.NE "Part" 0))
|
||||
"UPDATE tbl SET data = json_patch(data, json(@data)) WHERE data ->> 'Part' <> @field"
|
||||
"UPDATE partial by JSON comparison query not correct"
|
||||
}
|
||||
]
|
||||
testList "RemoveFields" [
|
||||
test "byId succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byId "tbl" [ SqliteParameter("@name", "one") ])
|
||||
"UPDATE tbl SET data = json_remove(data, @name) WHERE data ->> 'Id' = @id"
|
||||
"Remove field by ID query not correct"
|
||||
}
|
||||
test "byField succeeds" {
|
||||
Expect.equal
|
||||
(Query.RemoveFields.byField
|
||||
"tbl"
|
||||
(Field.GT "Fly" 0)
|
||||
[ SqliteParameter("@name0", "one"); SqliteParameter("@name1", "two") ])
|
||||
"UPDATE tbl SET data = json_remove(data, @name0, @name1) WHERE data ->> 'Fly' > @field"
|
||||
"Remove field by field query not correct"
|
||||
}
|
||||
]
|
||||
]
|
||||
testList "Parameters" [
|
||||
test "idParam succeeds" {
|
||||
@@ -43,11 +61,19 @@ let unitTests =
|
||||
Expect.equal theParam.ParameterName "@test" "The parameter name is incorrect"
|
||||
Expect.equal theParam.Value """{"Nice":"job"}""" "The parameter value is incorrect"
|
||||
}
|
||||
test "fieldParam succeeds" {
|
||||
let theParam = fieldParam 99
|
||||
Expect.equal theParam.ParameterName "@field" "The parameter name is incorrect"
|
||||
Expect.equal theParam.Value 99 "The parameter value is incorrect"
|
||||
}
|
||||
testList "addFieldParam" [
|
||||
test "succeeds when adding a parameter" {
|
||||
let paramList = addFieldParam "@field" (Field.EQ "it" 99) []
|
||||
Expect.hasLength paramList 1 "There should have been a parameter added"
|
||||
let theParam = paramList[0]
|
||||
Expect.equal theParam.ParameterName "@field" "The parameter name is incorrect"
|
||||
Expect.equal theParam.Value 99 "The parameter value is incorrect"
|
||||
}
|
||||
test "succeeds when not adding a parameter" {
|
||||
let paramList = addFieldParam "@it" (Field.NEX "Coffee") []
|
||||
Expect.isEmpty paramList "There should not have been any parameters added"
|
||||
}
|
||||
]
|
||||
test "noParams succeeds" {
|
||||
Expect.isEmpty noParams "The parameter list should have been empty"
|
||||
}
|
||||
@@ -277,7 +303,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! theCount = Count.byField SqliteDb.TableName "Value" EQ "purple"
|
||||
let! theCount = Count.byField SqliteDb.TableName (Field.EQ "Value" "purple")
|
||||
Expect.equal theCount 2L "There should have been 2 matching documents"
|
||||
}
|
||||
]
|
||||
@@ -303,14 +329,14 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = Exists.byField SqliteDb.TableName "NumValue" EQ 10
|
||||
let! exists = Exists.byField SqliteDb.TableName (Field.EQ "NumValue" 10)
|
||||
Expect.isTrue exists "There should have been existing documents"
|
||||
}
|
||||
testTask "succeeds when no matching documents exist" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! exists = Exists.byField SqliteDb.TableName "Nothing" LT "none"
|
||||
let! exists = Exists.byField SqliteDb.TableName (Field.LT "Nothing" "none")
|
||||
Expect.isFalse exists "There should not have been any existing documents"
|
||||
}
|
||||
]
|
||||
@@ -360,14 +386,14 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = Find.byField<JsonDocument> SqliteDb.TableName "NumValue" GT 15
|
||||
let! docs = Find.byField<JsonDocument> SqliteDb.TableName (Field.GT "NumValue" 15)
|
||||
Expect.equal (List.length docs) 2 "There should have been two documents returned"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! docs = Find.byField<JsonDocument> SqliteDb.TableName "NumValue" GT 100
|
||||
let! docs = Find.byField<JsonDocument> SqliteDb.TableName (Field.GT "NumValue" 100)
|
||||
Expect.isTrue (List.isEmpty docs) "There should have been no documents returned"
|
||||
}
|
||||
]
|
||||
@@ -376,7 +402,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName "Value" EQ "another"
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Value" "another")
|
||||
Expect.isTrue (Option.isSome doc) "There should have been a document returned"
|
||||
Expect.equal doc.Value.Id "two" "The incorrect document was returned"
|
||||
}
|
||||
@@ -384,7 +410,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName "Sub.Foo" EQ "green"
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Sub.Foo" "green")
|
||||
Expect.isTrue (Option.isSome doc) "There should have been a document returned"
|
||||
Expect.contains [ "two"; "four" ] doc.Value.Id "An incorrect document was returned"
|
||||
}
|
||||
@@ -392,7 +418,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName "Value" EQ "absent"
|
||||
let! doc = Find.firstByField<JsonDocument> SqliteDb.TableName (Field.EQ "Value" "absent")
|
||||
Expect.isFalse (Option.isSome doc) "There should not have been a document returned"
|
||||
}
|
||||
]
|
||||
@@ -474,8 +500,8 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Patch.byField SqliteDb.TableName "Value" EQ "purple" {| NumValue = 77 |}
|
||||
let! after = Count.byField SqliteDb.TableName "NumValue" EQ 77
|
||||
do! Patch.byField SqliteDb.TableName (Field.EQ "Value" "purple") {| NumValue = 77 |}
|
||||
let! after = Count.byField SqliteDb.TableName (Field.EQ "NumValue" 77)
|
||||
Expect.equal after 2L "There should have been 2 documents returned"
|
||||
}
|
||||
testTask "succeeds when no document is updated" {
|
||||
@@ -485,7 +511,63 @@ let integrationTests =
|
||||
Expect.isEmpty before "There should have been no documents returned"
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! Patch.byField SqliteDb.TableName "Value" EQ "burgundy" {| Foo = "green" |}
|
||||
do! Patch.byField SqliteDb.TableName (Field.EQ "Value" "burgundy") {| Foo = "green" |}
|
||||
}
|
||||
]
|
||||
]
|
||||
testList "RemoveFields" [
|
||||
testList "byId" [
|
||||
testTask "succeeds when fields is removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byId SqliteDb.TableName "two" [ "Sub"; "Value" ]
|
||||
try
|
||||
let! _ = Find.byId<string, JsonDocument> SqliteDb.TableName "two"
|
||||
Expect.isTrue false "The updated document should have failed to parse"
|
||||
with
|
||||
| :? JsonException -> ()
|
||||
| exn as ex -> Expect.isTrue false $"Threw {ex.GetType().Name} ({ex.Message})"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byId SqliteDb.TableName "two" [ "AFieldThatIsNotThere" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byId SqliteDb.TableName "two" [ "Value" ]
|
||||
}
|
||||
]
|
||||
testList "byField" [
|
||||
testTask "succeeds when a field is removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! RemoveFields.byField SqliteDb.TableName (Field.EQ "NumValue" 17) [ "Sub" ]
|
||||
try
|
||||
let! _ = Find.byId<string, JsonDocument> SqliteDb.TableName "four"
|
||||
Expect.isTrue false "The updated document should have failed to parse"
|
||||
with
|
||||
| :? JsonException -> ()
|
||||
| exn as ex -> Expect.isTrue false $"Threw {ex.GetType().Name} ({ex.Message})"
|
||||
}
|
||||
testTask "succeeds when a field is not removed" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byField SqliteDb.TableName (Field.EQ "NumValue" 17) [ "Nothing" ]
|
||||
}
|
||||
testTask "succeeds when no document is matched" {
|
||||
use! db = SqliteDb.BuildDb()
|
||||
|
||||
// This not raising an exception is the test
|
||||
do! RemoveFields.byField SqliteDb.TableName (Field.NE "Abracadabra" "apple") [ "Value" ]
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -513,7 +595,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Delete.byField SqliteDb.TableName "Value" NE "purple"
|
||||
do! Delete.byField SqliteDb.TableName (Field.NE "Value" "purple")
|
||||
let! remaining = Count.all SqliteDb.TableName
|
||||
Expect.equal remaining 2L "There should have been 2 documents remaining"
|
||||
}
|
||||
@@ -521,7 +603,7 @@ let integrationTests =
|
||||
use! db = SqliteDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
do! Delete.byField SqliteDb.TableName "Value" EQ "crimson"
|
||||
do! Delete.byField SqliteDb.TableName (Field.EQ "Value" "crimson")
|
||||
let! remaining = Count.all SqliteDb.TableName
|
||||
Expect.equal remaining 5L "There should have been 5 documents remaining"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user