Skip to content

Commit 8fb05af

Browse files
loudonlunestephenfin
authored andcommitted
tests: Add tests for new functionality
* Add tests for the API and parser changes. * Add new test mbox files. * Add new patch series tests. * Add test to check that dependencies are not shown when disabled. Signed-off-by: Adam Hassick <[email protected]> Acked-by: Aaron Conole <[email protected]> [stephenfin: Rename Project field from parse_dependencies to show_dependencies. Add some additional tests] Signed-off-by: Stephen Finucane <[email protected]>
1 parent bc2d1b1 commit 8fb05af

9 files changed

+1001
-5
lines changed

patchwork/tests/api/test_project.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ def assertSerialized(self, project_obj, project_json):
3535
self.assertEqual(
3636
project_obj.subject_match, project_json['subject_match']
3737
)
38+
self.assertEqual(
39+
project_obj.show_dependencies, project_json['show_dependencies']
40+
)
3841

3942
# nested fields
4043

@@ -74,6 +77,18 @@ def test_list_authenticated(self):
7477
self.assertIn('list_archive_url_format', resp.data[0])
7578
self.assertIn('commit_url_format', resp.data[0])
7679

80+
@utils.store_samples('project-list-1.3')
81+
def test_list_version_1_3(self):
82+
"""List projects using API v1.3.
83+
84+
Validate that newer fields are dropped for older API versions.
85+
"""
86+
create_project()
87+
resp = self.client.get(self.api_url(version='1.3'))
88+
self.assertEqual(status.HTTP_200_OK, resp.status_code)
89+
self.assertEqual(1, len(resp.data))
90+
self.assertNotIn('show_dependencies', resp.data[0])
91+
7792
@utils.store_samples('project-list-1.1')
7893
def test_list_version_1_1(self):
7994
"""List projects using API v1.1.
@@ -141,6 +156,19 @@ def test_detail_by_numeric_linkname(self):
141156
self.assertEqual(status.HTTP_200_OK, resp.status_code)
142157
self.assertSerialized(project, resp.data)
143158

159+
@utils.store_samples('project-detail-1.3')
160+
def test_detail_version_1_3(self):
161+
"""Show project using API v1.3.
162+
163+
Validate that newer fields are dropped for older API versions.
164+
"""
165+
project = create_project()
166+
167+
resp = self.client.get(self.api_url(project.pk, version='1.3'))
168+
self.assertEqual(status.HTTP_200_OK, resp.status_code)
169+
self.assertIn('name', resp.data)
170+
self.assertNotIn('show_dependencies', resp.data)
171+
144172
@utils.store_samples('project-detail-1.1')
145173
def test_detail_version_1_1(self):
146174
"""Show project using API v1.1.

patchwork/tests/api/test_series.py

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,20 @@ def assertSerialized(self, series_obj, series_json):
4444
self.assertIn(series_obj.get_mbox_url(), series_json['mbox'])
4545
self.assertIn(series_obj.get_absolute_url(), series_json['web_url'])
4646

47+
for dep, item in zip(
48+
series_obj.dependencies.all(), series_json['dependencies']
49+
):
50+
self.assertIn(
51+
reverse('api-series-detail', kwargs={'pk': dep.id}), item
52+
)
53+
54+
for dep, item in zip(
55+
series_obj.dependents.all(), series_json['dependents']
56+
):
57+
self.assertIn(
58+
reverse('api-series-detail', kwargs={'pk': dep.id}), item
59+
)
60+
4761
# nested fields
4862

4963
self.assertEqual(series_obj.project.id, series_json['project']['id'])
@@ -64,7 +78,9 @@ def test_list_empty(self):
6478
self.assertEqual(0, len(resp.data))
6579

6680
def _create_series(self):
67-
project_obj = create_project(linkname='myproject')
81+
project_obj = create_project(
82+
linkname='myproject', show_dependencies=True
83+
)
6884
person_obj = create_person(email='[email protected]')
6985
series_obj = create_series(project=project_obj, submitter=person_obj)
7086
create_cover(series=series_obj)
@@ -73,7 +89,7 @@ def _create_series(self):
7389
return series_obj
7490

7591
def test_list_anonymous(self):
76-
"""List patches as anonymous user."""
92+
"""List series as anonymous user."""
7793
series = self._create_series()
7894

7995
resp = self.client.get(self.api_url())
@@ -95,6 +111,35 @@ def test_list_authenticated(self):
95111
series_rsp = resp.data[0]
96112
self.assertSerialized(series, series_rsp)
97113

114+
def test_list_dependencies(self):
115+
"""Test toggling dependency tracking on and off."""
116+
project_obj = create_project(
117+
linkname='myproject', show_dependencies=True
118+
)
119+
person_obj = create_person(email='[email protected]')
120+
series_a = create_series(project=project_obj, submitter=person_obj)
121+
create_cover(series=series_a)
122+
create_patch(series=series_a)
123+
series_b = create_series(project=project_obj, submitter=person_obj)
124+
create_cover(series=series_b)
125+
create_patch(series=series_b)
126+
series_a.add_dependencies([series_b])
127+
128+
resp = self.client.get(self.api_url())
129+
self.assertEqual(2, len(resp.data))
130+
for series_data in resp.data:
131+
self.assertIn('dependents', series_data)
132+
self.assertIn('dependencies', series_data)
133+
134+
project_obj.show_dependencies = False
135+
project_obj.save()
136+
137+
resp = self.client.get(self.api_url())
138+
self.assertEqual(2, len(resp.data))
139+
for series_data in resp.data:
140+
self.assertNotIn('dependents', series_data)
141+
self.assertNotIn('dependencies', series_data)
142+
98143
def test_list_filter_project(self):
99144
"""Filter series by project."""
100145
series = self._create_series()
@@ -125,7 +170,7 @@ def test_list_filter_owner(self):
125170

126171
@utils.store_samples('series-list-1-0')
127172
def test_list_version_1_0(self):
128-
"""List patches using API v1.0.
173+
"""List series using API v1.0.
129174
130175
Validate that newer fields are dropped for older API versions.
131176
"""
@@ -152,7 +197,7 @@ def test_list_bug_335(self):
152197
create_cover(series=series_obj)
153198
create_patch(series=series_obj)
154199

155-
with self.assertNumQueries(6):
200+
with self.assertNumQueries(8):
156201
self.client.get(self.api_url())
157202

158203
@utils.store_samples('series-detail')
@@ -164,9 +209,29 @@ def test_detail(self):
164209
self.assertEqual(status.HTTP_200_OK, resp.status_code)
165210
self.assertSerialized(series, resp.data)
166211

212+
@utils.store_samples('series-detail-1-3')
213+
def test_detail_version_1_3(self):
214+
"""Show series using API v1.3.
215+
216+
Validate that newer fields are dropped for older API versions.
217+
"""
218+
series = self._create_series()
219+
220+
resp = self.client.get(self.api_url(series.id, version='1.3'))
221+
self.assertIn('url', resp.data)
222+
self.assertIn('web_url', resp.data)
223+
self.assertIn('web_url', resp.data['cover_letter'])
224+
self.assertIn('mbox', resp.data['cover_letter'])
225+
self.assertIn('web_url', resp.data['patches'][0])
226+
self.assertNotIn('dependents', resp.data)
227+
self.assertNotIn('dependencies', resp.data)
228+
167229
@utils.store_samples('series-detail-1-0')
168230
def test_detail_version_1_0(self):
169-
"""Show series using API v1.0."""
231+
"""Show series using API v1.0.
232+
233+
Validate that newer fields are dropped for older API versions.
234+
"""
170235
series = self._create_series()
171236

172237
resp = self.client.get(self.api_url(series.id, version='1.0'))
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
From [email protected] Mon Jun 10 21:09:07 2024
2+
Return-Path: <[email protected]>
3+
From: Adam Hassick <[email protected]>
4+
5+
Subject: [PATCH v1 0/2] Add test files for testing
6+
Date: Mon, 10 Jun 2024 17:09:07 -0400
7+
Message-ID: <[email protected]>
8+
MIME-Version: 1.0
9+
Content-Transfer-Encoding: 8bit
10+
11+
Add a test program and a makefile.
12+
Big surprise here, but this is all for testing.
13+
14+
Adam Hassick (2):
15+
Add test program
16+
Add a Makefile
17+
18+
Makefile | 9 +++++++++
19+
test.c | 8 ++++++++
20+
2 files changed, 17 insertions(+)
21+
create mode 100644 Makefile
22+
create mode 100644 test.c
23+
24+
--
25+
2.45.2
26+
27+
28+
From [email protected] Mon Jun 10 21:09:09 2024
29+
Return-Path: <[email protected]>
30+
From: Adam Hassick <[email protected]>
31+
32+
Subject: [PATCH v1 1/2] Add test program
33+
Date: Mon, 10 Jun 2024 17:09:09 -0400
34+
Message-ID: <[email protected]>
35+
In-Reply-To: <[email protected]>
36+
References: <[email protected]>
37+
MIME-Version: 1.0
38+
Content-Transfer-Encoding: 8bit
39+
40+
41+
42+
Signed-off-by: Adam Hassick <[email protected]>
43+
---
44+
test.c | 8 ++++++++
45+
1 file changed, 8 insertions(+)
46+
create mode 100644 test.c
47+
48+
diff --git a/test.c b/test.c
49+
new file mode 100644
50+
index 0000000..5096204
51+
--- /dev/null
52+
+++ b/test.c
53+
@@ -0,0 +1,8 @@
54+
+
55+
+#include <stdio.h>
56+
+
57+
+int main() {
58+
+ printf("HELLOOOOO!!!! Hi there!");
59+
+ return 0;
60+
+}
61+
+
62+
--
63+
2.45.2
64+
65+
66+
From [email protected] Mon Jun 10 21:09:11 2024
67+
Return-Path: <[email protected]>
68+
From: Adam Hassick <[email protected]>
69+
70+
Subject: [PATCH v1 2/2] Add a Makefile
71+
Date: Mon, 10 Jun 2024 17:09:11 -0400
72+
Message-ID: <[email protected]>
73+
In-Reply-To: <[email protected]>
74+
References: <[email protected]>
75+
MIME-Version: 1.0
76+
Content-Transfer-Encoding: 8bit
77+
78+
How are people supposed to build this without a Makefile?
79+
80+
Signed-off-by: Adam Hassick <[email protected]>
81+
---
82+
Makefile | 9 +++++++++
83+
1 file changed, 9 insertions(+)
84+
create mode 100644 Makefile
85+
86+
diff --git a/Makefile b/Makefile
87+
new file mode 100644
88+
index 0000000..2126a0e
89+
--- /dev/null
90+
+++ b/Makefile
91+
@@ -0,0 +1,9 @@
92+
+
93+
+CC=gcc
94+
+
95+
+test: test.c
96+
+ $(CC) -O2 -march=native -mtune=native test.c -o test
97+
+
98+
+test-debug: test.c
99+
+ $(CC) -O0 -g test.c -o test
100+
+
101+
--
102+
2.45.2
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
From [email protected] Wed Jun 12 20:40:05 2024
2+
Return-Path: <[email protected]>
3+
From: Adam Hassick <[email protected]>
4+
5+
Cc: Adam Hassick <[email protected]>
6+
Subject: [PATCH v1 0/2] More changes
7+
Date: Wed, 12 Jun 2024 16:40:05 -0400
8+
Message-ID: <[email protected]>
9+
MIME-Version: 1.0
10+
Content-Transfer-Encoding: 8bit
11+
12+
Tests.
13+
14+
Adam Hassick (2):
15+
test: Change the test function
16+
Fix Makefile
17+
18+
Makefile | 2 +-
19+
test.c | 10 ++++++++--
20+
2 files changed, 9 insertions(+), 3 deletions(-)
21+
22+
--
23+
2.45.2
24+
25+
26+
From [email protected] Wed Jun 12 20:40:06 2024
27+
Return-Path: <[email protected]>
28+
From: Adam Hassick <[email protected]>
29+
30+
Cc: Adam Hassick <[email protected]>
31+
Subject: [PATCH v1 1/2] test: Change the test function
32+
Date: Wed, 12 Jun 2024 16:40:06 -0400
33+
Message-ID: <[email protected]>
34+
In-Reply-To: <[email protected]>
35+
References: <[email protected]>
36+
MIME-Version: 1.0
37+
Content-Transfer-Encoding: 8bit
38+
39+
I don't like what it did before. Let's make it do something more
40+
interesting this time.
41+
42+
Depends-on: {depends_token_1}
43+
Signed-off-by: Adam Hassick <[email protected]>
44+
---
45+
test.c | 10 ++++++++--
46+
1 file changed, 8 insertions(+), 2 deletions(-)
47+
48+
diff --git a/test.c b/test.c
49+
index f6cd16e..a868311 100644
50+
--- a/test.c
51+
+++ b/test.c
52+
@@ -1,11 +1,17 @@
53+
54+
#include <stdio.h>
55+
+#include <stdlib.h>
56+
#include <string.h>
57+
58+
// This function does things.
59+
void thingymabob(char *string) {{
60+
- printf("Here's your argument: %s\n", string);
61+
- printf("Here is the length of your argument: %li\n", strlen(string));
62+
+ double f = atof(string);
63+
+
64+
+ if (f > 5.0) {{
65+
+ printf("I'm satisfied.\n");
66+
+ }} else {{
67+
+ fprintf(stderr, "I'm not satisfied.\n");
68+
+ }}
69+
}}
70+
71+
// Entry point.
72+
--
73+
2.45.2
74+
75+
76+
From [email protected] Wed Jun 12 20:40:07 2024
77+
Return-Path: <[email protected]>
78+
From: Adam Hassick <[email protected]>
79+
80+
Cc: Adam Hassick <[email protected]>
81+
Subject: [PATCH v1 2/2] Fix Makefile
82+
Date: Wed, 12 Jun 2024 16:40:07 -0400
83+
Message-ID: <[email protected]>
84+
X-Mailer: git-send-email 2.45.2
85+
In-Reply-To: <[email protected]>
86+
References: <[email protected]>
87+
MIME-Version: 1.0
88+
Content-Transfer-Encoding: 8bit
89+
90+
The test-debug target did not generate the correct file.
91+
92+
Depends-on: {depends_token_2}
93+
Signed-off-by: Adam Hassick <[email protected]>
94+
---
95+
Makefile | 2 +-
96+
1 file changed, 1 insertion(+), 1 deletion(-)
97+
98+
diff --git a/Makefile b/Makefile
99+
index 3583b93..78a2bf0 100644
100+
--- a/Makefile
101+
+++ b/Makefile
102+
@@ -9,5 +9,5 @@ test: test.c
103+
$(CC) -O2 -march=native -mtune=native -Wall -Werror -pedantic test.c -o test
104+
105+
test-debug: test.c
106+
- $(CC) -O0 -g test.c -Wall -Werror -pedantic -o test
107+
+ $(CC) -O0 -g test.c -Wall -Werror -pedantic -o test-debug
108+
109+
--
110+
2.45.2

0 commit comments

Comments
 (0)