Esempio n. 1
0
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,
            )
Esempio n. 2
0
def test_parse_datetime_with_empty_string():
    assert load_premis_events_from_xml.parse_datetime("") is None
Esempio n. 3
0
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)
Esempio n. 4
0
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()
Esempio n. 5
0
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"