Skip to content

Commit 1bbe444

Browse files
committed
Add cassettes for addon runs
1 parent 941e8dc commit 1bbe444

5 files changed

Lines changed: 361 additions & 6 deletions

File tree

documentcloud/addon.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def store_run_data(self, data):
200200
if not isinstance(data, dict):
201201
raise TypeError("Invalid data")
202202

203-
return self.client.patch(f"addon_runs/{self.id}/", json=data)
203+
return self.client.patch(f"addon_runs/{self.id}/", json={"data": data})
204204

205205
def load_event_data(self):
206206
"""Load persistent data for this event"""
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- '*/*'
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Authorization:
10+
- Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzU4NzMwNDI5LCJpYXQiOjE3NTg3MzAxMjksImp0aSI6IjEyMzE1OGFkOWExYjQ3YTE5ZDdhMjdlYjMwNTdmMzRkIiwidXNlcl9pZCI6ImY2MDI5ZThhLWQ4YTItNDE4OC04YTIxLWNkMDczYTAyZWU1YyIsImF1ZCI6WyJzcXVhcmVsZXQiLCJtdWNrcm9jayIsImRvY3VtZW50Y2xvdWQiXSwiaXNzIjpbInNxdWFyZWxldCJdfQ.LduwXStVTHJGEoNw9eO-xQ0OVLF6b-kaeq-qXOCGJ06mc6JygXWOE7D9NnV7m-PzdtTKCGyQtOCe1RvU51ho5yFNJUwlLcYlmABbOQnvWOuuyqYvzoGXwULm99lV8KWW2Aetmldo_pUU3LY0VJS4Qe13ZaussP1Emsr68_uvy99FU8Xkm_jQqt4qoUDWuj-IeXkVj024Mv70VrCOBiTs_fmRHJixo12aNadUe9D0MhHoJxgBmRiRDqlq0Tu-jjP5I2_wY-c7iVSMUJTFInXHKRJadBaavvllrLZ4t47nc9G-ustuqnT_i8vrkN95LJmL87EK6NoVzS_O84c6DySZDA
11+
Connection:
12+
- keep-alive
13+
User-Agent:
14+
- python-requests/2.31.0 test-user
15+
method: GET
16+
uri: https://api.dev.documentcloud.org/api/addon_runs/27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe/
17+
response:
18+
body:
19+
string: '{"detail":"Given token not valid for any token type","code":"token_not_valid","messages":[{"token_class":"AccessToken","token_type":"access","message":"Token
20+
is invalid or expired"}]}'
21+
headers:
22+
Allow:
23+
- GET, PUT, PATCH, DELETE, HEAD, OPTIONS
24+
Connection:
25+
- keep-alive
26+
Content-Language:
27+
- en
28+
Content-Length:
29+
- '183'
30+
Content-Type:
31+
- application/json
32+
Cross-Origin-Opener-Policy:
33+
- same-origin
34+
Date:
35+
- Tue, 19 May 2026 12:54:31 GMT
36+
Referrer-Policy:
37+
- same-origin
38+
Server:
39+
- nginx/1.29.8
40+
Vary:
41+
- Accept, Origin, Accept-Language, Cookie
42+
X-Content-Type-Options:
43+
- nosniff
44+
X-Frame-Options:
45+
- DENY
46+
status:
47+
code: 403
48+
message: Forbidden
49+
- request:
50+
body: '{"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc1ODgxNjUyOSwiaWF0IjoxNzU4NzMwMTI5LCJqdGkiOiIzZWI4MzExNmQzNTA0Njc0YTViZGFiOGEyYjFkNDA0ZiIsInVzZXJfaWQiOiJmNjAyOWU4YS1kOGEyLTQxODgtOGEyMS1jZDA3M2EwMmVlNWMiLCJhdWQiOlsic3F1YXJlbGV0IiwibXVja3JvY2siLCJkb2N1bWVudGNsb3VkIl0sImlzcyI6WyJzcXVhcmVsZXQiXX0.jl0ql4G-9ZFn0yOWSyzlXLjBXaQF9ZzWoHf7vxfrK9e4MnQ5jZyCLrFR7-nkjbKy9q9WAjlO3u3ZV3bzYW0xobiOuZcvTEiucy8qnzQlXLDLOjMy1JLnyh7VJI4Si40BSs5l-UfSvUv3854l6V_fxwcx0asLFVclT0PrDnAuNt50uxxgsSAwzrsquqPOASuG_6DHiD-DIE-MrWYiNc2Z5fy7eQFRt600oTOPRfLLmVixlqN33QfHO6GZQsM20vinJxyOXWvjtsGmcaJooxIkyU56HLObx6fxokzEGKzvHXLeF7zbrZuHaww8fPmFTtq-QjaY7Pt2vxmJnbBIIvRh-g"}'
51+
headers:
52+
Accept:
53+
- '*/*'
54+
Accept-Encoding:
55+
- gzip, deflate
56+
Connection:
57+
- keep-alive
58+
Content-Length:
59+
- '682'
60+
Content-Type:
61+
- application/json
62+
User-Agent:
63+
- python-requests/2.31.0
64+
method: POST
65+
uri: https://dev.squarelet.com/api/refresh/
66+
response:
67+
body:
68+
string: '{"detail":"Token is invalid","code":"token_not_valid"}'
69+
headers:
70+
Allow:
71+
- POST, OPTIONS
72+
Connection:
73+
- keep-alive
74+
Content-Length:
75+
- '54'
76+
Content-Type:
77+
- application/json
78+
Cross-Origin-Opener-Policy:
79+
- same-origin
80+
Date:
81+
- Tue, 19 May 2026 12:54:31 GMT
82+
Referrer-Policy:
83+
- same-origin
84+
Server:
85+
- nginx/1.29.8
86+
Server-Timing:
87+
- TimerPanel_utime;dur=28.828999999973348;desc="User CPU time", TimerPanel_stime;dur=0.0;desc="System
88+
CPU time", TimerPanel_total;dur=28.828999999973348;desc="Total CPU time",
89+
TimerPanel_total_time;dur=39.24408298917115;desc="Elapsed time", SQLPanel_sql_time;dur=0.6609990086872131;desc="SQL
90+
3 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls"
91+
Set-Cookie:
92+
- op_browser_state=4b30254fc88d36c6b0a21c762b8607d5e34f30f158a79440cb58e2a0;
93+
Path=/
94+
Vary:
95+
- Accept, Origin, Cookie
96+
WWW-Authenticate:
97+
- Bearer realm="api"
98+
X-Content-Type-Options:
99+
- nosniff
100+
X-Frame-Options:
101+
- DENY
102+
djdt-store-id:
103+
- 6cecf048e9574b87865d35848218f804
104+
status:
105+
code: 401
106+
message: Unauthorized
107+
- request:
108+
body: '{"username": "test-user", "password": "test-password"}'
109+
headers:
110+
Accept:
111+
- '*/*'
112+
Accept-Encoding:
113+
- gzip, deflate
114+
Connection:
115+
- keep-alive
116+
Content-Length:
117+
- '54'
118+
Content-Type:
119+
- application/json
120+
User-Agent:
121+
- python-requests/2.31.0
122+
method: POST
123+
uri: https://dev.squarelet.com/api/token/
124+
response:
125+
body:
126+
string: '{"refresh":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3OTI4MTY3MSwiaWF0IjoxNzc5MTk1MjcxLCJqdGkiOiI2Zjc4M2JjNWI1MTc0ZWQ2OGQwODQ3ZGM4NGQ2ZjM0ZCIsInVzZXJfaWQiOiJlMmRiNzJlNi01OWQwLTQzZTQtYTVmMC01NTNiY2E2ODBlMjIiLCJhdWQiOlsic3F1YXJlbGV0IiwibXVja3JvY2siLCJkb2N1bWVudGNsb3VkIl0sImlzcyI6InNxdWFyZWxldCJ9.QlB40rVEix4qjfXJjHYw_NuSvM-1WS-kEY-yxTMl-CJYvTcBob_9L8O-wMQ0oegrC9HrE2W4kCOJcJrtTfMYiNspILWa4mB04VGagwQuuQRO_kvk8km3A6wa5-Vg-P6rGOTac6iBmM1SKCVI_FQ58o8ZDAs0fhcteA7RUDWOvP3ihV51qre6_z4WlxpwO-pKcv9_DZ6uldXt5UI-eEkXYQKb4_MxHZEu_MN6QMRzFGxWNJ8OfvUfjjeT2k6BrcB3cVi9m-E0sNBmHLFNkPgVGU4gqCCop2ifiRFU1ItLYYPwWRzCYoJHshudCwMgHVSfT15JwA-OhtYr_bBvSN-7YA","access":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc5MTk1NTcxLCJpYXQiOjE3NzkxOTUyNzEsImp0aSI6IjQzYzM5MjBhN2JhZTQ3YWNhMGZhZmFkNDAwM2RhMzFhIiwidXNlcl9pZCI6ImUyZGI3MmU2LTU5ZDAtNDNlNC1hNWYwLTU1M2JjYTY4MGUyMiIsImF1ZCI6WyJzcXVhcmVsZXQiLCJtdWNrcm9jayIsImRvY3VtZW50Y2xvdWQiXSwiaXNzIjoic3F1YXJlbGV0In0.LWZGVfF5v7LgFFHvmo5q6i0hHMdytd5EhwvgIxCDj8N6UPKB-74JIUfIJhqJnAOiTGWlP3g-jUI3a8QLjIyRQjlVW03xwCeeNy0NWVBShdbdj8-s8X2JO1Xs8vMZ4YcyQhYUMK6Ow9ARzsAE7GDLQCh0zRROgbYuWv_ZJcEmN3RUGiJVpkLCiEu7vvfXUdb3Tn-1hnRW1mWxuU200u6hi-Of3hALQILuE-VB8bCaHABujpsy8sjZERukCIeNME52ZanvQxYeWb9DVgurehknPft_w5VXdYlO4webYJrgn0enbVm2Chw14iKjCP-6Xq6wivRz5SiwOsnfQGcU3bDoLA"}'
127+
headers:
128+
Allow:
129+
- POST, OPTIONS
130+
Connection:
131+
- keep-alive
132+
Content-Length:
133+
- '1353'
134+
Content-Type:
135+
- application/json
136+
Cross-Origin-Opener-Policy:
137+
- same-origin
138+
Date:
139+
- Tue, 19 May 2026 12:54:31 GMT
140+
Referrer-Policy:
141+
- same-origin
142+
Server:
143+
- nginx/1.29.8
144+
Server-Timing:
145+
- TimerPanel_utime;dur=284.20699999992394;desc="User CPU time", TimerPanel_stime;dur=412.77900000000045;desc="System
146+
CPU time", TimerPanel_total;dur=696.9859999999244;desc="Total CPU time", TimerPanel_total_time;dur=237.52075000084005;desc="Elapsed
147+
time", SQLPanel_sql_time;dur=14.25995901809074;desc="SQL 4 queries", CachePanel_total_time;dur=0;desc="Cache
148+
0 Calls"
149+
Set-Cookie:
150+
- op_browser_state=4b30254fc88d36c6b0a21c762b8607d5e34f30f158a79440cb58e2a0;
151+
Path=/
152+
Vary:
153+
- Accept, Origin, Cookie
154+
X-Content-Type-Options:
155+
- nosniff
156+
X-Frame-Options:
157+
- DENY
158+
djdt-store-id:
159+
- aab09d28b4fa48cabacca76d0eb9ff1e
160+
status:
161+
code: 200
162+
message: OK
163+
- request:
164+
body: null
165+
headers:
166+
Accept:
167+
- '*/*'
168+
Accept-Encoding:
169+
- gzip, deflate
170+
Authorization:
171+
- Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc5MTk1NTcxLCJpYXQiOjE3NzkxOTUyNzEsImp0aSI6IjQzYzM5MjBhN2JhZTQ3YWNhMGZhZmFkNDAwM2RhMzFhIiwidXNlcl9pZCI6ImUyZGI3MmU2LTU5ZDAtNDNlNC1hNWYwLTU1M2JjYTY4MGUyMiIsImF1ZCI6WyJzcXVhcmVsZXQiLCJtdWNrcm9jayIsImRvY3VtZW50Y2xvdWQiXSwiaXNzIjoic3F1YXJlbGV0In0.LWZGVfF5v7LgFFHvmo5q6i0hHMdytd5EhwvgIxCDj8N6UPKB-74JIUfIJhqJnAOiTGWlP3g-jUI3a8QLjIyRQjlVW03xwCeeNy0NWVBShdbdj8-s8X2JO1Xs8vMZ4YcyQhYUMK6Ow9ARzsAE7GDLQCh0zRROgbYuWv_ZJcEmN3RUGiJVpkLCiEu7vvfXUdb3Tn-1hnRW1mWxuU200u6hi-Of3hALQILuE-VB8bCaHABujpsy8sjZERukCIeNME52ZanvQxYeWb9DVgurehknPft_w5VXdYlO4webYJrgn0enbVm2Chw14iKjCP-6Xq6wivRz5SiwOsnfQGcU3bDoLA
172+
Connection:
173+
- keep-alive
174+
User-Agent:
175+
- python-requests/2.31.0 test-user
176+
method: GET
177+
uri: https://api.dev.documentcloud.org/api/addon_runs/27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe/
178+
response:
179+
body:
180+
string: '{"uuid":"27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe","addon":10,"event":null,"user":100003,"status":"queued","progress":0,"message":"","file_url":null,"file_expires_at":null,"dismissed":false,"rating":0,"comment":"","credits_spent":0,"created_at":"2026-05-19T12:41:37.038271Z","updated_at":"2026-05-19T12:41:37.039319Z","data":{}}'
181+
headers:
182+
Allow:
183+
- GET, PUT, PATCH, DELETE, HEAD, OPTIONS
184+
Connection:
185+
- keep-alive
186+
Content-Language:
187+
- en
188+
Content-Length:
189+
- '324'
190+
Content-Type:
191+
- application/json
192+
Cross-Origin-Opener-Policy:
193+
- same-origin
194+
Date:
195+
- Tue, 19 May 2026 12:54:31 GMT
196+
Referrer-Policy:
197+
- same-origin
198+
Server:
199+
- nginx/1.29.8
200+
Vary:
201+
- Accept, Origin, Accept-Language, Cookie
202+
X-Content-Type-Options:
203+
- nosniff
204+
X-Frame-Options:
205+
- DENY
206+
status:
207+
code: 200
208+
message: OK
209+
version: 1
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
interactions:
2+
- request:
3+
body: '{"data": {"foo": "bar", "n": 42}}'
4+
headers:
5+
Accept:
6+
- '*/*'
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Authorization:
10+
- Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc5MTk1NTcxLCJpYXQiOjE3NzkxOTUyNzEsImp0aSI6IjQzYzM5MjBhN2JhZTQ3YWNhMGZhZmFkNDAwM2RhMzFhIiwidXNlcl9pZCI6ImUyZGI3MmU2LTU5ZDAtNDNlNC1hNWYwLTU1M2JjYTY4MGUyMiIsImF1ZCI6WyJzcXVhcmVsZXQiLCJtdWNrcm9jayIsImRvY3VtZW50Y2xvdWQiXSwiaXNzIjoic3F1YXJlbGV0In0.LWZGVfF5v7LgFFHvmo5q6i0hHMdytd5EhwvgIxCDj8N6UPKB-74JIUfIJhqJnAOiTGWlP3g-jUI3a8QLjIyRQjlVW03xwCeeNy0NWVBShdbdj8-s8X2JO1Xs8vMZ4YcyQhYUMK6Ow9ARzsAE7GDLQCh0zRROgbYuWv_ZJcEmN3RUGiJVpkLCiEu7vvfXUdb3Tn-1hnRW1mWxuU200u6hi-Of3hALQILuE-VB8bCaHABujpsy8sjZERukCIeNME52ZanvQxYeWb9DVgurehknPft_w5VXdYlO4webYJrgn0enbVm2Chw14iKjCP-6Xq6wivRz5SiwOsnfQGcU3bDoLA
11+
Connection:
12+
- keep-alive
13+
Content-Length:
14+
- '33'
15+
Content-Type:
16+
- application/json
17+
User-Agent:
18+
- python-requests/2.31.0 test-user
19+
method: PATCH
20+
uri: https://api.dev.documentcloud.org/api/addon_runs/27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe/
21+
response:
22+
body:
23+
string: '{"uuid":"27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe","addon":10,"event":null,"user":100003,"status":"queued","progress":0,"message":"","file_url":null,"file_expires_at":null,"dismissed":false,"rating":0,"comment":"","credits_spent":0,"created_at":"2026-05-19T12:41:37.038271Z","updated_at":"2026-05-19T12:54:31.765179Z","data":{"foo":"bar","n":42}}'
24+
headers:
25+
Allow:
26+
- GET, PUT, PATCH, DELETE, HEAD, OPTIONS
27+
Connection:
28+
- keep-alive
29+
Content-Language:
30+
- en
31+
Content-Length:
32+
- '342'
33+
Content-Type:
34+
- application/json
35+
Cross-Origin-Opener-Policy:
36+
- same-origin
37+
Date:
38+
- Tue, 19 May 2026 12:54:31 GMT
39+
Referrer-Policy:
40+
- same-origin
41+
Server:
42+
- nginx/1.29.8
43+
Vary:
44+
- Accept, Origin, Accept-Language, Cookie
45+
X-Content-Type-Options:
46+
- nosniff
47+
X-Frame-Options:
48+
- DENY
49+
status:
50+
code: 200
51+
message: OK
52+
- request:
53+
body: null
54+
headers:
55+
Accept:
56+
- '*/*'
57+
Accept-Encoding:
58+
- gzip, deflate
59+
Authorization:
60+
- Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc5MTk1NTcxLCJpYXQiOjE3NzkxOTUyNzEsImp0aSI6IjQzYzM5MjBhN2JhZTQ3YWNhMGZhZmFkNDAwM2RhMzFhIiwidXNlcl9pZCI6ImUyZGI3MmU2LTU5ZDAtNDNlNC1hNWYwLTU1M2JjYTY4MGUyMiIsImF1ZCI6WyJzcXVhcmVsZXQiLCJtdWNrcm9jayIsImRvY3VtZW50Y2xvdWQiXSwiaXNzIjoic3F1YXJlbGV0In0.LWZGVfF5v7LgFFHvmo5q6i0hHMdytd5EhwvgIxCDj8N6UPKB-74JIUfIJhqJnAOiTGWlP3g-jUI3a8QLjIyRQjlVW03xwCeeNy0NWVBShdbdj8-s8X2JO1Xs8vMZ4YcyQhYUMK6Ow9ARzsAE7GDLQCh0zRROgbYuWv_ZJcEmN3RUGiJVpkLCiEu7vvfXUdb3Tn-1hnRW1mWxuU200u6hi-Of3hALQILuE-VB8bCaHABujpsy8sjZERukCIeNME52ZanvQxYeWb9DVgurehknPft_w5VXdYlO4webYJrgn0enbVm2Chw14iKjCP-6Xq6wivRz5SiwOsnfQGcU3bDoLA
61+
Connection:
62+
- keep-alive
63+
User-Agent:
64+
- python-requests/2.31.0 test-user
65+
method: GET
66+
uri: https://api.dev.documentcloud.org/api/addon_runs/27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe/
67+
response:
68+
body:
69+
string: '{"uuid":"27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe","addon":10,"event":null,"user":100003,"status":"queued","progress":0,"message":"","file_url":null,"file_expires_at":null,"dismissed":false,"rating":0,"comment":"","credits_spent":0,"created_at":"2026-05-19T12:41:37.038271Z","updated_at":"2026-05-19T12:54:31.765179Z","data":{"n":42,"foo":"bar"}}'
70+
headers:
71+
Allow:
72+
- GET, PUT, PATCH, DELETE, HEAD, OPTIONS
73+
Connection:
74+
- keep-alive
75+
Content-Language:
76+
- en
77+
Content-Length:
78+
- '342'
79+
Content-Type:
80+
- application/json
81+
Cross-Origin-Opener-Policy:
82+
- same-origin
83+
Date:
84+
- Tue, 19 May 2026 12:54:31 GMT
85+
Referrer-Policy:
86+
- same-origin
87+
Server:
88+
- nginx/1.29.8
89+
Vary:
90+
- Accept, Origin, Accept-Language, Cookie
91+
X-Content-Type-Options:
92+
- nosniff
93+
X-Frame-Options:
94+
- DENY
95+
status:
96+
code: 200
97+
message: OK
98+
version: 1

tests/conftest.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
# Future
2-
from __future__ import division, print_function, unicode_literals
3-
41
# Standard Library
2+
import os
53
import time
64
from uuid import uuid4
75

@@ -19,7 +17,7 @@
1917
USERNAME = "test-user"
2018
PASSWORD = "test-password"
2119
TIMEOUT = 2.0
22-
DEFAULT_DOCUMENT_URI = "https://assets.documentcloud.org/documents/20071460/test.pdf"
20+
DEFAULT_DOCUMENT_URI = "https://s3.documentcloud.org/documents/20071460/test.pdf"
2321

2422
# pylint: disable=redefined-outer-name
2523

@@ -150,6 +148,20 @@ def project(client, document_factory):
150148
project.delete()
151149

152150

151+
DEFAULT_ADDON_RUN_ID = "27d5bff2-2ff7-4b2e-bf5b-20ee9f02a1fe"
152+
153+
154+
@pytest.fixture(scope="session")
155+
def addon_run():
156+
"""Yield an AddOnRun UUID for VCR-based addon tests.
157+
158+
Defaults to the UUID baked into the recorded cassettes so replay works
159+
out of the box. Override via DC_TEST_ADDON_RUN_ID to re-record against a
160+
different run on the dev server.
161+
"""
162+
yield os.environ.get("DC_TEST_ADDON_RUN_ID", DEFAULT_ADDON_RUN_ID)
163+
164+
153165
@pytest.fixture(scope="session")
154166
def project_factory(client):
155167
projects = []

0 commit comments

Comments
 (0)