def test_single_jurisdiction_multiple_admins(client, election_id): rv = client.put( f"/election/{election_id}/jurisdiction/file", data={ "jurisdictions": ( io.BytesIO( b"Jurisdiction,Admin Email\nJ1,[email protected]\nJ1,[email protected]" ), "jurisdictions.csv", ) }, ) assert_ok(rv) # Process the file in the background. assert bgcompute_update_election_jurisdictions_file() == 1 election = Election.query.filter_by(id=election_id).one() assert [j.name for j in election.jurisdictions] == ["J1"] jurisdiction = election.jurisdictions[0] assert [a.user.email for a in jurisdiction.jurisdiction_administrations] == [ "*****@*****.**", "*****@*****.**", ]
def test_metadata(client, election_id): rv = client.get(f"/election/{election_id}/jurisdiction/file") assert json.loads(rv.data) == {"file": None, "processing": None} rv = client.put( f"/election/{election_id}/jurisdiction/file", data={ "jurisdictions": ( io.BytesIO(b"Jurisdiction,Admin Email\n" b"J1,[email protected]"), "jurisdictions.csv", ) }, ) assert_ok(rv) election = Election.query.filter_by(id=election_id).one() assert election.jurisdictions_file.contents == ( "Jurisdiction,Admin Email\n" "J1,[email protected]" ) assert election.jurisdictions_file.name == "jurisdictions.csv" assert election.jurisdictions_file.uploaded_at # Get the file data before processing. rv = client.get(f"/election/{election_id}/jurisdiction/file") response = json.loads(rv.data) file = response["file"] processing = response["processing"] assert file["name"] == "jurisdictions.csv" assert file["uploadedAt"] assert processing["status"] == ProcessingStatus.READY_TO_PROCESS assert processing["startedAt"] is None assert processing["completedAt"] is None assert processing["error"] is None # Actually process the file. assert bgcompute_update_election_jurisdictions_file() == 1 # Now there should be data. rv = client.get(f"/election/{election_id}/jurisdiction/file") response = json.loads(rv.data) file = response["file"] processing = response["processing"] assert file["name"] == "jurisdictions.csv" assert file["uploadedAt"] assert processing["status"] == ProcessingStatus.PROCESSED assert processing["startedAt"] assert processing["completedAt"] assert processing["error"] is None rv = client.get(f"/election/{election_id}/jurisdiction/file/csv") assert ( rv.headers["Content-Disposition"] == 'attachment; filename="jurisdictions.csv"' ) assert rv.data.decode("utf-8") == election.jurisdictions_file.contents
def jurisdiction_ids(client: FlaskClient, election_id: str) -> List[str]: rv = client.put( f"/election/{election_id}/jurisdiction/file", data={ "jurisdictions": ( # We expect the API to order the jurisdictions by name, so we # upload them out of order. io.BytesIO(("Jurisdiction,Admin Email\n" f"J2,{DEFAULT_JA_EMAIL}\n" "J3,[email protected]\n" f"J1,{DEFAULT_JA_EMAIL}\n").encode()), "jurisdictions.csv", ) }, ) assert_ok(rv) bgcompute_update_election_jurisdictions_file() jurisdictions = (Jurisdiction.query.filter_by( election_id=election_id).order_by(Jurisdiction.name).all()) return [j.id for j in jurisdictions]
def test_no_jurisdiction(client, election_id): rv = client.put( f"/election/{election_id}/jurisdiction/file", data={ "jurisdictions": ( io.BytesIO(b"Jurisdiction,Admin Email"), "jurisdictions.csv", ) }, ) assert_ok(rv) # Process the file in the background. assert bgcompute_update_election_jurisdictions_file() == 1 election = Election.query.filter_by(id=election_id).one() assert election.jurisdictions == [] assert JurisdictionAdministration.query.count() == 0 assert User.query.count() == 0
def test_convert_emails_to_lowercase(client, election_id): rv = client.put( f"/election/{election_id}/jurisdiction/file", data={ "jurisdictions": ( io.BytesIO( b"Jurisdiction,Admin Email\n" b"J1,[email protected]\n" b"J2,[email protected]\n" b"J3,[email protected]\n" ), "jurisdictions.csv", ) }, ) assert_ok(rv) # Process the file in the background. assert bgcompute_update_election_jurisdictions_file() == 1 election = Election.query.filter_by(id=election_id).one() for jurisdiction in election.jurisdictions: for admin in jurisdiction.jurisdiction_administrations: assert admin.user.email == admin.user.email.lower()