123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import datetime
- from uuid import uuid4
- from django.urls import reverse
- from sentry.replays.testutils import assert_expected_response, mock_expected_response, mock_replay
- from sentry.testutils import APITestCase, ReplaysSnubaTestCase
- REPLAYS_FEATURES = {"organizations:session-replay": True}
- class OrganizationReplayDetailsTest(APITestCase, ReplaysSnubaTestCase):
- endpoint = "sentry-api-0-project-replay-details"
- def setUp(self):
- super().setUp()
- self.login_as(user=self.user)
- self.replay_id = uuid4().hex
- self.url = reverse(
- self.endpoint, args=(self.organization.slug, self.project.slug, self.replay_id)
- )
- def test_feature_flag_disabled(self):
- response = self.client.get(self.url)
- assert response.status_code == 404
- def test_no_replay_found(self):
- with self.feature(REPLAYS_FEATURES):
- response = self.client.get(self.url)
- assert response.status_code == 404
- def test_get_one_replay(self):
- """Test only one replay returned."""
- replay1_id = self.replay_id
- replay2_id = uuid4().hex
- seq1_timestamp = datetime.datetime.now() - datetime.timedelta(seconds=10)
- seq2_timestamp = datetime.datetime.now() - datetime.timedelta(seconds=5)
- self.store_replays(mock_replay(seq1_timestamp, self.project.id, replay1_id))
- self.store_replays(mock_replay(seq2_timestamp, self.project.id, replay1_id))
- self.store_replays(mock_replay(seq1_timestamp, self.project.id, replay2_id))
- self.store_replays(mock_replay(seq2_timestamp, self.project.id, replay2_id))
- with self.feature(REPLAYS_FEATURES):
- # Replay 1.
- response = self.client.get(self.url)
- assert response.status_code == 200
- response_data = response.json()
- assert "data" in response_data
- assert response_data["data"]["id"] == replay1_id
- # Replay 2.
- response = self.client.get(
- reverse(self.endpoint, args=(self.organization.slug, self.project.slug, replay2_id))
- )
- assert response.status_code == 200
- response_data = response.json()
- assert "data" in response_data
- assert response_data["data"]["id"] == replay2_id
- def test_get_replay_schema(self):
- """Test replay schema is well-formed."""
- replay1_id = self.replay_id
- replay2_id = uuid4().hex
- seq1_timestamp = datetime.datetime.now() - datetime.timedelta(seconds=25)
- seq2_timestamp = datetime.datetime.now() - datetime.timedelta(seconds=7)
- seq3_timestamp = datetime.datetime.now() - datetime.timedelta(seconds=4)
- trace_id_1 = uuid4().hex
- trace_id_2 = uuid4().hex
- # Assert values from this non-returned replay do not pollute the returned
- # replay.
- self.store_replays(mock_replay(seq1_timestamp, self.project.id, replay2_id))
- self.store_replays(mock_replay(seq3_timestamp, self.project.id, replay2_id))
- self.store_replays(
- mock_replay(
- seq1_timestamp,
- self.project.id,
- replay1_id,
- trace_ids=[trace_id_1],
- urls=["http://localhost:3000/"],
- )
- )
- self.store_replays(
- mock_replay(
- seq2_timestamp,
- self.project.id,
- replay1_id,
- segment_id=1,
- trace_ids=[trace_id_2],
- urls=["http://www.sentry.io/"],
- )
- )
- self.store_replays(
- mock_replay(
- seq3_timestamp,
- self.project.id,
- replay1_id,
- segment_id=2,
- trace_ids=[trace_id_2],
- urls=["http://localhost:3000/"],
- )
- )
- with self.feature(REPLAYS_FEATURES):
- response = self.client.get(self.url)
- assert response.status_code == 200
- response_data = response.json()
- assert "data" in response_data
- expected_response = mock_expected_response(
- self.project.id,
- replay1_id,
- seq1_timestamp,
- seq3_timestamp,
- trace_ids=[
- trace_id_1,
- trace_id_2,
- ],
- urls=[
- "http://localhost:3000/",
- "http://www.sentry.io/",
- "http://localhost:3000/",
- ],
- count_segments=3,
- )
- assert_expected_response(response_data["data"], expected_response)
|