def test_save_events(mocker, transfer, transfer_file, tmp_path, file_path): # check there are no events initially assert not Event.objects.count() # set up valid events valid_events = [{ "event": { "identifier": ("e", "f4eea76b-1921-4152-b1b4-a93dbbfeaa11"), "event_id": "f4eea76b-1921-4152-b1b4-a93dbbfeaa11", "event_type": "ingestion", "event_datetime": load_premis_events_from_xml.parse_datetime("2019-09-28T00:50"), "event_detail": "the event detail", "event_outcome": "the event outcome", "event_outcome_detail": "the event outcome detail", "files": set([("f", "1")]), "agents": set([("a", "1")]), }, "event_files": [{ "identifier": ("f", "1"), "original_name": str(file_path.relative_to(tmp_path)), "events": set(), }], "event_agents": [{ "identifier": ("a", "1"), "name": "an agent", "type": "agent type", "events": set(), }], }] file_queryset = File.objects.filter(transfer=transfer) printfn = mocker.Mock() # save the event load_premis_events_from_xml.save_events(valid_events, file_queryset, printfn) printfn.assert_called_once_with( "Imported PREMIS ingestion event and assigned identifier f4eea76b-1921-4152-b1b4-a93dbbfeaa11" ) # a new agent was also created assert Agent.objects.filter(name="an agent", agenttype="agent type").exists() # check the saved event assert Event.objects.count() == 1 event = Event.objects.get(event_id="f4eea76b-1921-4152-b1b4-a93dbbfeaa11", file_uuid=transfer_file) assert event.event_type == "ingestion" assert event.event_detail == "the event detail" assert event.event_outcome == "the event outcome" assert event.event_outcome_detail == "the event outcome detail" event_datetime = event.event_datetime assert (event_datetime.year, event_datetime.month, event_datetime.day) == ( 2019, 9, 28, ) assert (event_datetime.hour, event_datetime.minute, event_datetime.second) == ( 0, 50, 0, )
def test_parse_datetime_with_empty_string(): assert load_premis_events_from_xml.parse_datetime("") is None
def test_parse_datetime_with_valid_date(): result = load_premis_events_from_xml.parse_datetime("2019-09-24") assert (2019, 9, 24) == (result.year, result.month, result.day) assert (0, 0, 0) == (result.hour, result.minute, result.second)
def test_parse_datetime_with_valid_datetime_and_timezone(): result = load_premis_events_from_xml.parse_datetime( "2019-09-24T16:54:21+04:00") assert (2019, 9, 24) == (result.year, result.month, result.day) assert (16, 54, 21) == (result.hour, result.minute, result.second) assert "+0400" == result.tzname()
def test_parse_datetime_with_invalid_value(): with pytest.raises(ValueError) as excinfo: load_premis_events_from_xml.parse_datetime("invalid value") assert str( excinfo.value) == "Unable to parse 'invalid value' as a datetime"