-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathtest_pull_viewset.py
142 lines (128 loc) · 5.91 KB
/
test_pull_viewset.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import json
from unittest.mock import patch
from rest_framework.test import APIClient, APITestCase
from shared.django_apps.core.tests.factories import (
CommitFactory,
OwnerFactory,
PullFactory,
RepositoryFactory,
)
from core.models import Pull
class PullViewSetTests(APITestCase):
def setUp(self):
self.client = APIClient()
self.org = OwnerFactory(username="codecov", service="github")
other_org = OwnerFactory(username="other_org")
# Create different types of repos / pulls
self.repo = RepositoryFactory(author=self.org, name="testRepoName", active=True)
self.other_repo = RepositoryFactory(
author=other_org, name="otherRepoName", active=True
)
repo_with_permission = [self.repo.repoid]
self.user = OwnerFactory(
username="codecov-user",
service="github",
organizations=[self.org.ownerid],
permission=repo_with_permission,
)
self.open_pull = PullFactory(
pullid=10,
author=self.org,
repository=self.repo,
state="open",
head=CommitFactory(repository=self.repo, author=self.user).commitid,
base=CommitFactory(repository=self.repo, author=self.user).commitid,
)
PullFactory(pullid=11, author=self.org, repository=self.repo, state="closed")
PullFactory(pullid=12, author=other_org, repository=self.other_repo)
self.correct_kwargs = {
"service": "github",
"owner_username": "codecov",
"repo_name": "testRepoName",
}
def test_get_pulls(self):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
response = self.client.get("/api/github/codecov/testRepoName/pulls/")
self.assertEqual(response.status_code, 200)
content = json.loads(response.content.decode())
self.assertEqual(
len(content["results"]),
3,
"got the wrong number of pulls: {}".format(content["results"]),
)
def test_get_pulls_wrong_repo_token(self):
self.client.credentials(
HTTP_AUTHORIZATION="Token " + self.other_repo.upload_token
)
response = self.client.get("/api/github/codecov/testRepoName/pulls/")
self.assertEqual(response.status_code, 403)
def test_get_pulls_no_permissions(self):
response = self.client.get("/api/github/codecov/testRepoName/pulls/")
self.assertEqual(response.status_code, 401)
def test_get_pull(self):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
response = self.client.get("/api/github/codecov/testRepoName/pulls/10/")
self.assertEqual(response.status_code, 200)
content = json.loads(response.content.decode())
self.assertEqual(content["pullid"], 10)
def test_get_pull_no_permissions(self):
self.client.credentials(
HTTP_AUTHORIZATION="Token " + self.other_repo.upload_token
)
response = self.client.get("/api/github/codecov/testRepoName/pulls/10/")
self.assertEqual(response.status_code, 403)
@patch("services.task.TaskService.pulls_sync")
def test_update_pull_user_provided_base(self, pulls_sync_mock):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
response = self.client.put(
"/api/github/codecov/testRepoName/pulls/10/",
{"user_provided_base_sha": "new-sha"},
)
self.assertEqual(response.status_code, 200)
content = json.loads(response.content.decode())
self.assertEqual(content["user_provided_base_sha"], "new-sha")
self.assertEqual(
Pull.objects.get(pullid=10, repository=self.repo).user_provided_base_sha,
"new-sha",
)
pulls_sync_mock.assert_called_once_with(repoid=self.repo.repoid, pullid="10")
def test_update_pull_user_provided_base_no_permissions(self):
self.client.credentials(
HTTP_AUTHORIZATION="Token " + self.other_repo.upload_token
)
response = self.client.put(
"/api/github/codecov/testRepoName/pulls/10/",
{"user_provided_base_sha": "new-sha"},
)
self.assertEqual(response.status_code, 403)
@patch("services.task.TaskService.pulls_sync")
def test_create_new_pull_user_provided_base(self, pulls_sync_mock):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
self.client.force_login(user=self.user)
response = self.client.put(
"/api/github/codecov/testRepoName/pulls/15/",
{"user_provided_base_sha": "new-sha"},
)
self.assertEqual(response.status_code, 200)
content = json.loads(response.content.decode())
self.assertEqual(content["user_provided_base_sha"], "new-sha")
self.assertEqual(
Pull.objects.get(pullid=15, repository=self.repo).user_provided_base_sha,
"new-sha",
)
pulls_sync_mock.assert_called_once_with(repoid=self.repo.repoid, pullid="15")
@patch("services.task.TaskService.pulls_sync")
def test_post_pull_user_provided_base(self, pulls_sync_mock):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
response = self.client.post(
"/api/github/codecov/testRepoName/pulls/15/",
{"user_provided_base_sha": "new-sha"},
)
self.assertEqual(response.status_code, 405)
assert not pulls_sync_mock.called
def test_get_pull_no_pullid_provided(self):
self.client.credentials(HTTP_AUTHORIZATION="Token " + self.repo.upload_token)
response = self.client.get("/api/github/codecov/testRepoName/pulls/abc")
self.assertEqual(response.status_code, 400)
content = json.loads(response.content.decode())
self.assertEqual(content["pullid"], ["A valid integer is required."])