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