Skip to content

Commit

Permalink
test_create_table_error_rows_twice_with_duplicates, refs #1927
Browse files Browse the repository at this point in the history
  • Loading branch information
simonw committed Dec 8, 2022
1 parent 9342b60 commit dee18ed
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
6 changes: 5 additions & 1 deletion datasette/views/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,11 @@ async def post(self, request):
bad_pks = False
if len(actual_pks) == 1 and data.get("pk") and data["pk"] != actual_pks[0]:
bad_pks = True
elif len(actual_pks) > 1 and data.get("pks") and set(data["pks"]) != set(actual_pks):
elif (
len(actual_pks) > 1
and data.get("pks")
and set(data["pks"]) != set(actual_pks)
):
bad_pks = True
if bad_pks:
return _error(["pk cannot be changed for existing table"])
Expand Down
33 changes: 33 additions & 0 deletions tests/test_api_write.py
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,39 @@ async def test_create_table_error_if_pk_changed(ds_write):
}


@pytest.mark.asyncio
async def test_create_table_error_rows_twice_with_duplicates(ds_write):
# Error if you don't send ignore: True or replace: True
token = write_token(ds_write)
input = {
"rows": [{"id": 1, "name": "Row 1"}, {"id": 2, "name": "Row 2"}],
"table": "test_create_twice",
"pk": "id",
}
first_response = await ds_write.client.post(
"/data/-/create",
json=input,
headers={
"Authorization": "Bearer {}".format(token),
"Content-Type": "application/json",
},
)
assert first_response.status_code == 201
second_response = await ds_write.client.post(
"/data/-/create",
json=input,
headers={
"Authorization": "Bearer {}".format(token),
"Content-Type": "application/json",
},
)
assert second_response.status_code == 400
assert second_response.json() == {
"ok": False,
"errors": ["UNIQUE constraint failed: test_create_twice.id"],
}


@pytest.mark.asyncio
@pytest.mark.parametrize(
"path",
Expand Down

0 comments on commit dee18ed

Please sign in to comment.