Skip to content

Commit ab18007

Browse files
authored
test(backup): Add more model tests (#52923)
Add a number of tests for the exportable Organization*, Project*, User*, and Team models. Issue: getsentry/team-ospo#156
1 parent 14da39a commit ab18007

File tree

1 file changed

+97
-2
lines changed

1 file changed

+97
-2
lines changed

tests/sentry/backup/test_models.py

Lines changed: 97 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from __future__ import annotations
22

33
import tempfile
4+
from datetime import datetime
45
from pathlib import Path
56
from typing import Type
67

78
from click.testing import CliRunner
89
from django.core.management import call_command
10+
from django.utils import timezone
911

1012
from sentry.incidents.models import (
1113
AlertRule,
@@ -21,8 +23,26 @@
2123
DashboardWidgetQuery,
2224
DashboardWidgetTypes,
2325
)
24-
from sentry.models.environment import Environment
26+
from sentry.models.environment import Environment, EnvironmentProject
27+
from sentry.models.options.project_option import ProjectOption
28+
from sentry.models.options.user_option import UserOption
2529
from sentry.models.organization import Organization
30+
from sentry.models.organizationaccessrequest import OrganizationAccessRequest
31+
from sentry.models.organizationmapping import OrganizationMapping
32+
from sentry.models.organizationmember import OrganizationMember
33+
from sentry.models.organizationmemberteam import OrganizationMemberTeam
34+
from sentry.models.project import Project
35+
from sentry.models.projectbookmark import ProjectBookmark
36+
from sentry.models.projectkey import ProjectKey
37+
from sentry.models.projectownership import ProjectOwnership
38+
from sentry.models.projectredirect import ProjectRedirect
39+
from sentry.models.projectteam import ProjectTeam
40+
from sentry.models.team import Team
41+
from sentry.models.user import User
42+
from sentry.models.useremail import UserEmail
43+
from sentry.models.userip import UserIP
44+
from sentry.models.userpermission import UserPermission
45+
from sentry.models.userrole import UserRole, UserRoleUser
2646
from sentry.monitors.models import Monitor, MonitorEnvironment, MonitorType, ScheduleType
2747
from sentry.runner.commands.backup import import_, validate
2848
from sentry.silo import unguarded_write
@@ -169,6 +189,13 @@ def test_environment(self):
169189
self.create_environment()
170190
return self.import_export_then_validate()
171191

192+
@targets_models(EnvironmentProject)
193+
def test_environment_project(self):
194+
env = self.create_environment()
195+
project = self.create_project()
196+
EnvironmentProject.objects.create(project=project, environment=env, is_hidden=False)
197+
return self.import_export_then_validate()
198+
172199
@targets_models(Monitor)
173200
def test_monitor(self):
174201
self.create_monitor()
@@ -184,8 +211,76 @@ def test_monitor_environment(self):
184211
)
185212
return self.import_export_then_validate()
186213

187-
@targets_models(Organization)
214+
@targets_models(Organization, OrganizationMapping)
188215
def test_organization(self):
189216
user = self.create_user()
190217
self.create_organization(owner=user)
191218
return self.import_export_then_validate()
219+
220+
@targets_models(OrganizationAccessRequest, OrganizationMember, OrganizationMemberTeam, Team)
221+
def test_organization_membership(self):
222+
organization = self.create_organization(name="test_org", owner=self.user)
223+
user = self.create_user("[email protected]")
224+
member = self.create_member(organization=organization, user=user, role="member")
225+
team = self.create_team(name="foo", organization=organization)
226+
227+
self.create_team_membership(user=user, team=team)
228+
OrganizationAccessRequest.objects.create(member=member, team=team)
229+
return self.import_export_then_validate()
230+
231+
@targets_models(Project, ProjectKey, ProjectOption, ProjectTeam)
232+
def test_project(self):
233+
self.create_project()
234+
return self.import_export_then_validate()
235+
236+
@targets_models(ProjectBookmark)
237+
def test_project_bookmark(self):
238+
user = self.create_user()
239+
project = self.create_project()
240+
self.create_project_bookmark(project=project, user=user)
241+
return self.import_export_then_validate()
242+
243+
@targets_models(ProjectKey)
244+
def test_project_key(self):
245+
project = self.create_project()
246+
self.create_project_key(project)
247+
return self.import_export_then_validate()
248+
249+
@targets_models(ProjectOwnership)
250+
def test_project_ownership(self):
251+
project = self.create_project()
252+
ProjectOwnership.objects.create(
253+
project=project, raw='{"hello":"hello"}', schema={"hello": "hello"}
254+
)
255+
return self.import_export_then_validate()
256+
257+
@targets_models(ProjectRedirect)
258+
def test_project_redirect(self):
259+
project = self.create_project()
260+
ProjectRedirect.record(project, "old_slug")
261+
return self.import_export_then_validate()
262+
263+
@targets_models(User, UserEmail, UserOption, UserPermission)
264+
def test_user(self):
265+
user = self.create_user()
266+
self.add_user_permission(user, "users.admin")
267+
UserOption.objects.create(user=user, key="timezone", value="Europe/Vienna")
268+
return self.import_export_then_validate()
269+
270+
@targets_models(UserIP)
271+
def test_user_ip(self):
272+
user = self.create_user()
273+
UserIP.objects.create(
274+
user=user,
275+
ip_address="127.0.0.2",
276+
first_seen=datetime(2012, 4, 5, 3, 29, 45, tzinfo=timezone.utc),
277+
last_seen=datetime(2012, 4, 5, 3, 29, 45, tzinfo=timezone.utc),
278+
)
279+
return self.import_export_then_validate()
280+
281+
@targets_models(UserRole, UserRoleUser)
282+
def test_user_role(self):
283+
user = self.create_user()
284+
role = UserRole.objects.create(name="test-role")
285+
UserRoleUser.objects.create(user=user, role=role)
286+
return self.import_export_then_validate()

0 commit comments

Comments
 (0)