Skip to content

Commit

Permalink
refactor server tests to call helper functions to upload files and ha…
Browse files Browse the repository at this point in the history
…ndle error testing
  • Loading branch information
carolinemodic committed Oct 29, 2024
1 parent ac4064d commit f79cacd
Show file tree
Hide file tree
Showing 23 changed files with 1,584 additions and 2,011 deletions.
31 changes: 11 additions & 20 deletions server/tests/api/test_activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,43 +318,34 @@ def test_file_upload_errors(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={"manifest": (io.BytesIO(b"invalid"), "manifest.csv")},
rv = setup_ballot_manifest_upload(
client, io.BytesIO(b"invalid"), election_id, jurisdiction_ids[0]
)
assert_ok(rv)

rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(b"Batch Name,Number of Ballots\n" b"A,1"),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"A,1"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

election = Election.query.get(election_id)
election.audit_type = AuditType.BATCH_COMPARISON
db_session.commit()

rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/batch-tallies",
data={"batchTallies": (io.BytesIO(b"invalid"), "tallies.csv")},
rv = setup_batch_tallies_upload(
client, io.BytesIO(b"invalid"), election_id, jurisdiction_ids[0]
)
assert rv.status_code == 200

election = Election.query.get(election_id)
election.audit_type = AuditType.BALLOT_COMPARISON
db_session.commit()

rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/cvrs",
data={
"cvrs": (io.BytesIO(b""), "cvrs.csv"),
"cvrFileType": "DOMINION",
},
rv = setup_cvrs_upload(
client, io.BytesIO(b""), election_id, jurisdiction_ids[0], "DOMINION"
)
assert_ok(rv)

Expand Down
135 changes: 62 additions & 73 deletions server/tests/api/test_ballot_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,11 @@ def test_ballot_manifest_upload(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(
b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,100\n" b"6,0\n"
),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,100\n" b"6,0\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -32,7 +27,7 @@ def test_ballot_manifest_upload(
json.loads(rv.data),
{
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand Down Expand Up @@ -62,14 +57,11 @@ def test_ballot_manifest_clear(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n"),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand Down Expand Up @@ -98,29 +90,21 @@ def test_ballot_manifest_replace_as_audit_admin(
):
# Check that AA can also get/put/clear manifest
set_logged_in_user(client, UserType.AUDIT_ADMIN, DEFAULT_AA_EMAIL)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(
b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,100\n" b"6,0,,\n"
),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,100\n" b"6,0,,\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

file_id = Jurisdiction.query.get(jurisdiction_ids[0]).manifest_file_id

rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,6\n"),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"12,6\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand Down Expand Up @@ -150,22 +134,22 @@ def test_ballot_manifest_replace_as_audit_admin(
assert json.loads(rv.data) == {"file": None, "processing": None}


def test_ballot_manifest_upload_missing_file(
def test_ballot_manifest_upload_missing_file_path(
client: FlaskClient, election_id: str, jurisdiction_ids: List[str]
):
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
rv = client.post(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest/upload-complete",
data={},
)
assert rv.status_code == 400
assert json.loads(rv.data) == {
"errors": [
{
"errorType": "Bad Request",
"message": "Missing required file parameter 'manifest'",
"message": "Missing required JSON parameter: storagePathKey",
}
]
}
Expand All @@ -177,9 +161,24 @@ def test_ballot_manifest_upload_bad_csv(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={"manifest": (io.BytesIO(b"not a CSV file"), "random.txt")},
rv = client.post(
"/api/file-upload",
data={
"file": (
io.BytesIO(b"not a CSV file"),
"random.txt",
),
"key": "test_dir/random.txt",
},
)
assert_ok(rv)
rv = client.post(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest/upload-complete",
data={
"storagePathKey": "test_dir/random.txt",
"fileName": "random.txt",
"fileType": "text/plain",
},
)
assert rv.status_code == 400
assert json.loads(rv.data) == {
Expand All @@ -202,14 +201,11 @@ def test_ballot_manifest_upload_missing_field(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(header_row.encode() + b"\n1,2,3"),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(header_row.encode() + b"\n1,2,3"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -220,7 +216,7 @@ def test_ballot_manifest_upload_missing_field(
json.loads(rv.data),
{
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand All @@ -239,14 +235,12 @@ def test_ballot_manifest_upload_invalid_num_ballots(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,not a number\n"),
"manifest.csv",
)
},

rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,not a number\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -257,7 +251,7 @@ def test_ballot_manifest_upload_invalid_num_ballots(
json.loads(rv.data),
{
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand All @@ -276,16 +270,11 @@ def test_ballot_manifest_upload_duplicate_batch_name(
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(
b"Batch Name,Number of Ballots\n" b"12,23\n" b"12,100\n" b"6,0\n"
),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"12,23\n" b"12,100\n" b"6,0\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -296,7 +285,7 @@ def test_ballot_manifest_upload_duplicate_batch_name(
json.loads(rv.data),
{
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand Down
23 changes: 10 additions & 13 deletions server/tests/api/test_ballots.py
Original file line number Diff line number Diff line change
Expand Up @@ -1248,19 +1248,16 @@ def test_ballots_human_sort_order(
"Batch 2",
"Batch 10",
]
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(
(
"Batch Name,Number of Ballots\n"
+ "\n".join(f"{batch},10" for batch in human_ordered_batches)
).encode()
),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(
(
"Batch Name,Number of Ballots\n"
+ "\n".join(f"{batch},10" for batch in human_ordered_batches)
).encode()
),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand Down
34 changes: 15 additions & 19 deletions server/tests/api/test_jurisdictions.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,11 @@ def test_jurisdictions_list_with_manifest(
manifest = (
b"Batch Name,Number of Ballots\n" b"1,23\n" b"2,101\n" b"3,122\n" b"4,400"
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(manifest),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(manifest),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -94,7 +91,7 @@ def test_jurisdictions_list_with_manifest(
"name": "J1",
"ballotManifest": {
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand Down Expand Up @@ -140,7 +137,9 @@ def test_jurisdictions_list_with_manifest(
rv = client.get(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest/csv"
)
assert rv.headers["Content-Disposition"] == 'attachment; filename="manifest.csv"'
assert rv.headers["Content-Disposition"].startswith(
'attachment; filename="manifest'
)
assert rv.data == manifest


Expand All @@ -155,14 +154,11 @@ def test_duplicate_batch_name(client, election_id, jurisdiction_ids):
set_logged_in_user(
client, UserType.JURISDICTION_ADMIN, default_ja_email(election_id)
)
rv = client.put(
f"/api/election/{election_id}/jurisdiction/{jurisdiction_ids[0]}/ballot-manifest",
data={
"manifest": (
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"1,101\n"),
"manifest.csv",
)
},
rv = setup_ballot_manifest_upload(
client,
io.BytesIO(b"Batch Name,Number of Ballots\n" b"1,23\n" b"1,101\n"),
election_id,
jurisdiction_ids[0],
)
assert_ok(rv)

Expand All @@ -176,7 +172,7 @@ def test_duplicate_batch_name(client, election_id, jurisdiction_ids):
"name": "J1",
"ballotManifest": {
"file": {
"name": "manifest.csv",
"name": asserts_startswith("manifest"),
"uploadedAt": assert_is_date,
},
"processing": {
Expand Down
Loading

0 comments on commit f79cacd

Please sign in to comment.