Revert bulk update patch

- Revert patch #2311
- Keep the refactor done to qsFiltersRoot
- Keep the refactor done to the items tables
- Add tests that now work with pg-safeupdate as a result
This commit is contained in:
Laurence Isla
2022-08-12 10:00:33 -05:00
committed by GitHub
parent 4ac47df528
commit 7de8d5446a
12 changed files with 161 additions and 282 deletions
-189
View File
@@ -388,17 +388,6 @@ spec = do
}
context "limited update" $ do
it "does not work when no limit query or filter is given" $
request methodPatch "/limited_update_items"
[("Prefer", "tx=commit"), ("Prefer", "count=exact")]
[json| {"name": "updated-item"} |]
`shouldRespondWith`
""
{ matchStatus = 404
, matchHeaders = [ matchHeaderAbsent hContentType
, "Content-Range" <:> "*/0" ]
}
it "works with the limit query param" $ do
get "/limited_update_items"
`shouldRespondWith`
@@ -624,181 +613,3 @@ spec = do
[json| {"tbl_name": "limited_update_items_no_pk"} |]
`shouldRespondWith` ""
{ matchStatus = 204 }
context "bulk updates" $ do
it "can update tables with simple pk" $ do
get "/bulk_update_items"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
]|]
request methodPatch "/bulk_update_items"
[("Prefer", "tx=commit")]
[json|[
{ "id": 1, "name": "item-1 - 1st", "observation": "Lost item" }
, { "id": 3, "name": "item-3 - 3rd", "observation": null }
]|]
`shouldRespondWith`
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType
, "Content-Range" <:> "0-1/*"
, "Preference-Applied" <:> "tx=commit" ]
}
get "/bulk_update_items?order=id"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1 - 1st", "observation": "Lost item" }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3 - 3rd", "observation": null }
]|]
request methodPost "/rpc/reset_items_tables"
[("Prefer", "tx=commit")]
[json| {"tbl_name": "bulk_update_items"} |]
`shouldRespondWith` ""
{ matchStatus = 204 }
it "can update tables with composite pk" $ do
get "/bulk_update_items_cpk"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
]|]
request methodPatch "/bulk_update_items_cpk"
[("Prefer", "tx=commit")]
[json|[
{ "id": 1, "name": "item-1", "observation": "Lost item" }
, { "id": 2, "name": "item-2", "observation": null }
]|]
`shouldRespondWith`
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType
, "Content-Range" <:> "0-1/*"
, "Preference-Applied" <:> "tx=commit" ]
}
get "/bulk_update_items_cpk?order=id"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": "Lost item" }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
]|]
request methodPost "/rpc/reset_items_tables"
[("Prefer", "tx=commit")]
[json| {"tbl_name": "bulk_update_items_cpk"} |]
`shouldRespondWith` ""
{ matchStatus = 204 }
it "updates with filters taking only the first item in the json array body" $ do
get "/bulk_update_items"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
]|]
request methodPatch "/bulk_update_items?id=eq.2"
[("Prefer", "tx=commit")]
[json|[
{ "id": 4, "name": "item-4", "observation": "Damaged item" }
, { "id": 3, "name": "item-3 - 3rd", "observation": null }
]|]
`shouldRespondWith`
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType
, "Content-Range" <:> "0-0/*"
, "Preference-Applied" <:> "tx=commit" ]
}
get "/bulk_update_items?order=id"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
, { "id": 4, "name": "item-4", "observation": "Damaged item" }
]|]
request methodPost "/rpc/reset_items_tables"
[("Prefer", "tx=commit")]
[json| {"tbl_name": "bulk_update_items"} |]
`shouldRespondWith` ""
{ matchStatus = 204 }
it "updates with limit and offset taking only the first item in the json array body" $ do
get "/bulk_update_items"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 2, "name": "item-2", "observation": null }
, { "id": 3, "name": "item-3", "observation": null }
]|]
request methodPatch "/bulk_update_items?limit=2&offset=1&order=id"
[("Prefer", "tx=commit")]
[json|[
{ "name": "item-4", "observation": "Damaged item" }
, { "name": "item-3 - 3rd", "observation": null }
]|]
`shouldRespondWith`
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType
, "Content-Range" <:> "0-1/*"
, "Preference-Applied" <:> "tx=commit" ]
}
get "/bulk_update_items?order=id"
`shouldRespondWith`
[json|[
{ "id": 1, "name": "item-1", "observation": null }
, { "id": 2, "name": "item-4", "observation": "Damaged item" }
, { "id": 3, "name": "item-4", "observation": "Damaged item" }
]|]
request methodPost "/rpc/reset_items_tables"
[("Prefer", "tx=commit")]
[json| {"tbl_name": "bulk_update_items"} |]
`shouldRespondWith` ""
{ matchStatus = 204 }
it "rejects a json array that isn't exclusively composed of objects" $
request methodPatch "/bulk_update_items"
[("Prefer", "tx=commit")]
[json|[
{ "id": 1, "name": "Item 1" }
, 2
, "Item 2"
, { "id": 3, "name": "Item 3" }
]|]
`shouldRespondWith`
[json| {"message":"All object keys must match","code":"PGRST102","hint":null,"details":null} |]
{ matchStatus = 400
, matchHeaders = [matchContentTypeJson]
}
it "rejects a json array that has objects with different keys" $
request methodPatch "/bulk_update_items"
[("Prefer", "tx=commit")]
[json|[
{ "id": 1, "name": "Item 1" }
, { "id": 2 }
, { "id": 3, "name": "Item 3" }
]|]
`shouldRespondWith`
[json| {"message":"All object keys must match","code":"PGRST102","hint":null,"details":null} |]
{ matchStatus = 400
, matchHeaders = [matchContentTypeJson]
}