Add Json write Postgres tests
This commit is contained in:
@@ -1451,6 +1451,399 @@ let jsonTests = testList "Json" [
|
||||
verifyDocById json "four"
|
||||
}
|
||||
]
|
||||
testList "writeAll" [
|
||||
testTask "succeeds when there is data" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeAll PostgresDb.TableName writer
|
||||
verifyAllData (streamText stream)
|
||||
}
|
||||
testTask "succeeds when there is no data" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeAll PostgresDb.TableName writer
|
||||
verifyEmpty (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeAllOrdered" [
|
||||
testTask "succeeds when ordering numerically" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeAllOrdered PostgresDb.TableName writer [ Field.Named "n:NumValue" ]
|
||||
verifyExpectedOrder (streamText stream) "one" "three" (Some "two") (Some "four") (Some "five")
|
||||
}
|
||||
testTask "succeeds when ordering numerically descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeAllOrdered PostgresDb.TableName writer [ Field.Named "n:NumValue DESC" ]
|
||||
verifyExpectedOrder (streamText stream) "five" "four" (Some "two") (Some "three") (Some "one")
|
||||
}
|
||||
testTask "succeeds when ordering alphabetically" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeAllOrdered PostgresDb.TableName writer [ Field.Named "Id DESC" ]
|
||||
verifyExpectedOrder (streamText stream) "two" "three" (Some "one") (Some "four") (Some "five")
|
||||
}
|
||||
]
|
||||
testList "writeById" [
|
||||
testTask "succeeds when a document is found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeById PostgresDb.TableName writer "two"
|
||||
let json = streamText stream
|
||||
Expect.stringStarts json """{"Id": "two",""" "An incorrect document was returned"
|
||||
Expect.stringEnds json "}" "JSON should have ended with this document"
|
||||
}
|
||||
testTask "succeeds when a document is not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeById PostgresDb.TableName writer "three hundred eighty-seven"
|
||||
verifyNoDoc (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeByFields" [
|
||||
testTask "succeeds when documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFields
|
||||
PostgresDb.TableName writer All [ Field.In "Value" [ "purple"; "blue" ]; Field.Exists "Sub" ]
|
||||
verifySingleById (streamText stream) "four"
|
||||
}
|
||||
testTask "succeeds when documents are found using IN with numeric field" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFields PostgresDb.TableName writer All [ Field.In "NumValue" [ 2; 4; 6; 8 ] ]
|
||||
verifySingleById (streamText stream) "three"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFields
|
||||
PostgresDb.TableName writer All [ Field.Equal "Value" "mauve"; Field.NotEqual "NumValue" 40 ]
|
||||
verifyEmpty (streamText stream)
|
||||
}
|
||||
testTask "succeeds for InArray when matching documents exist" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! Definition.ensureTable PostgresDb.TableName
|
||||
for doc in ArrayDocument.TestDocuments do do! insert PostgresDb.TableName doc
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFields
|
||||
PostgresDb.TableName writer All [ Field.InArray "Values" PostgresDb.TableName [ "c" ] ]
|
||||
let json = streamText stream
|
||||
verifyBeginEnd json
|
||||
verifyDocById json "first"
|
||||
verifyDocById json "second"
|
||||
}
|
||||
testTask "succeeds for InArray when no matching documents exist" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! Definition.ensureTable PostgresDb.TableName
|
||||
for doc in ArrayDocument.TestDocuments do do! insert PostgresDb.TableName doc
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFields
|
||||
PostgresDb.TableName writer All [ Field.InArray "Values" PostgresDb.TableName [ "j" ] ]
|
||||
verifyEmpty (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeByFieldsOrdered" [
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFieldsOrdered
|
||||
PostgresDb.TableName writer All [ Field.Equal "Value" "purple" ] [ Field.Named "Id" ]
|
||||
verifyExpectedOrder (streamText stream) "five" "four" None None None
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByFieldsOrdered
|
||||
PostgresDb.TableName writer All [ Field.Equal "Value" "purple" ] [ Field.Named "Id DESC" ]
|
||||
verifyExpectedOrder (streamText stream) "four" "five" None None None
|
||||
}
|
||||
]
|
||||
testList "writeByContains" [
|
||||
testTask "succeeds when documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByContains PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |}
|
||||
let json = streamText stream
|
||||
verifyBeginEnd json
|
||||
verifyDocById json "two"
|
||||
verifyDocById json "four"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByContains PostgresDb.TableName writer {| Value = "mauve" |}
|
||||
verifyEmpty (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeByContainsOrdered" [
|
||||
// Id = two, Sub.Bar = blue; Id = four, Sub.Bar = red
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByContainsOrdered
|
||||
PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |} [ Field.Named "Sub.Bar" ]
|
||||
verifyExpectedOrder (streamText stream) "two" "four" None None None
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByContainsOrdered
|
||||
PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |} [ Field.Named "Sub.Bar DESC" ]
|
||||
verifyExpectedOrder (streamText stream) "four" "two" None None None
|
||||
}
|
||||
]
|
||||
testList "writeByJsonPath" [
|
||||
testTask "succeeds when documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByJsonPath PostgresDb.TableName writer "$.NumValue ? (@ < 15)"
|
||||
let json = streamText stream
|
||||
verifyBeginEnd json
|
||||
verifyDocById json "one"
|
||||
verifyDocById json "two"
|
||||
verifyDocById json "three"
|
||||
}
|
||||
testTask "succeeds when documents are not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByJsonPath PostgresDb.TableName writer "$.NumValue ? (@ < 0)"
|
||||
verifyEmpty (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeByJsonPathOrdered" [
|
||||
// Id = one, NumValue = 0; Id = two, NumValue = 10; Id = three, NumValue = 4
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByJsonPathOrdered
|
||||
PostgresDb.TableName writer "$.NumValue ? (@ < 15)" [ Field.Named "n:NumValue" ]
|
||||
verifyExpectedOrder (streamText stream) "one" "three" (Some "two") None None
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeByJsonPathOrdered
|
||||
PostgresDb.TableName writer "$.NumValue ? (@ < 15)" [ Field.Named "n:NumValue DESC" ]
|
||||
verifyExpectedOrder (streamText stream) "two" "three" (Some "one") None None
|
||||
}
|
||||
]
|
||||
testList "writeFirstByFields" [
|
||||
testTask "succeeds when a document is found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByFields PostgresDb.TableName writer Any [ Field.Equal "Value" "another" ]
|
||||
verifyDocById (streamText stream) "two"
|
||||
}
|
||||
testTask "succeeds when multiple documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByFields PostgresDb.TableName writer Any [ Field.Equal "Value" "purple" ]
|
||||
verifyAnyById (streamText stream) [ "five"; "four" ]
|
||||
}
|
||||
testTask "succeeds when a document is not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByFields PostgresDb.TableName writer Any [ Field.Equal "Value" "absent" ]
|
||||
verifyNoDoc (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeFirstByFieldsOrdered" [
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByFieldsOrdered
|
||||
PostgresDb.TableName writer Any [ Field.Equal "Value" "purple" ] [ Field.Named "Id" ]
|
||||
verifyDocById (streamText stream) "five"
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByFieldsOrdered
|
||||
PostgresDb.TableName writer Any [ Field.Equal "Value" "purple" ] [ Field.Named "Id DESC" ]
|
||||
verifyDocById (streamText stream) "four"
|
||||
}
|
||||
]
|
||||
testList "writeFirstByContains" [
|
||||
testTask "succeeds when a document is found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByContains PostgresDb.TableName writer {| Value = "another" |}
|
||||
verifyDocById (streamText stream) "two"
|
||||
}
|
||||
testTask "succeeds when multiple documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByContains PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |}
|
||||
verifyAnyById (streamText stream) [ "two"; "four" ]
|
||||
}
|
||||
testTask "succeeds when a document is not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByContains PostgresDb.TableName writer {| Value = "absent" |}
|
||||
verifyNoDoc (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeFirstByContainsOrdered" [
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByContainsOrdered
|
||||
PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |} [ Field.Named "Value" ]
|
||||
verifyDocById (streamText stream) "two"
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByContainsOrdered
|
||||
PostgresDb.TableName writer {| Sub = {| Foo = "green" |} |} [ Field.Named "Value DESC" ]
|
||||
verifyDocById (streamText stream) "four"
|
||||
}
|
||||
]
|
||||
testList "writeFirstByJsonPath" [
|
||||
testTask "succeeds when a document is found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByJsonPath PostgresDb.TableName writer """$.Value ? (@ == "FIRST!")"""
|
||||
verifyDocById (streamText stream) "one"
|
||||
}
|
||||
testTask "succeeds when multiple documents are found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByJsonPath PostgresDb.TableName writer """$.Sub.Foo ? (@ == "green")"""
|
||||
verifyAnyById (streamText stream) [ "two"; "four" ]
|
||||
}
|
||||
testTask "succeeds when a document is not found" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByJsonPath PostgresDb.TableName writer """$.Id ? (@ == "nope")"""
|
||||
verifyNoDoc (streamText stream)
|
||||
}
|
||||
]
|
||||
testList "writeFirstByJsonPathOrdered" [
|
||||
testTask "succeeds when sorting ascending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByJsonPathOrdered
|
||||
PostgresDb.TableName writer """$.Sub.Foo ? (@ == "green")""" [ Field.Named "Sub.Bar" ]
|
||||
verifyDocById (streamText stream) "two"
|
||||
}
|
||||
testTask "succeeds when sorting descending" {
|
||||
use db = PostgresDb.BuildDb()
|
||||
do! loadDocs ()
|
||||
|
||||
use stream = new MemoryStream()
|
||||
use writer = writeStream stream
|
||||
do! Json.writeFirstByJsonPathOrdered
|
||||
PostgresDb.TableName writer """$.Sub.Foo ? (@ == "green")""" [ Field.Named "Sub.Bar DESC" ]
|
||||
verifyDocById (streamText stream) "four"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
/// Integration tests for the Update module of the PostgreSQL library
|
||||
|
||||
Reference in New Issue
Block a user