def test_userreport(default_project, monkeypatch):
    """
    Test that user_report-type kafka messages end up in a user report being
    persisted. We additionally test some logic around upserting data in
    eventuser which is also present in the legacy endpoint.
    """
    event_id = uuid.uuid4().hex
    start_time = time.time() - 3600

    mgr = EventManager(data={
        "event_id": event_id,
        "user": {
            "email": "*****@*****.**"
        }
    })

    mgr.normalize()
    mgr.save(default_project.id)

    (evtuser, ) = EventUser.objects.all()
    assert not evtuser.name

    assert not UserReport.objects.all()

    assert process_userreport(
        {
            "type":
            "user_report",
            "start_time":
            start_time,
            "payload":
            json.dumps({
                "name": "Hans Gans",
                "event_id": event_id,
                "comments": "hello world",
                "email": "*****@*****.**",
            }),
            "project_id":
            default_project.id,
        },
        projects={default_project.id: default_project},
    )

    (report, ) = UserReport.objects.all()
    assert report.comments == "hello world"

    (evtuser, ) = EventUser.objects.all()
    assert evtuser.name == "Hans Gans"
def test_userreport_reverse_order(default_project, monkeypatch):
    """
    Test that ingesting a userreport before the event works. This is relevant
    for unreal crashes where the userreport is processed immediately in the
    ingest consumer while the rest of the event goes to processing tasks.
    """
    event_id = uuid.uuid4().hex
    start_time = time.time() - 3600

    assert process_userreport(
        {
            "type":
            "user_report",
            "start_time":
            start_time,
            "payload":
            json.dumps({
                "name": "Hans Gans",
                "event_id": event_id,
                "comments": "hello world",
                "email": "*****@*****.**",
            }),
            "project_id":
            default_project.id,
        },
        projects={default_project.id: default_project},
    )

    mgr = EventManager(data={
        "event_id": event_id,
        "user": {
            "email": "*****@*****.**"
        }
    })

    mgr.normalize()
    mgr.save(default_project.id)

    (report, ) = UserReport.objects.all()
    assert report.comments == "hello world"

    (evtuser, ) = EventUser.objects.all()
    # Event got saved after user report, and the sync only works in the
    # opposite direction. That's fine, we just accept it.
    assert evtuser.name is None