Skip to content

Commit 1066ca3

Browse files
committed
adds unit tests
1 parent 533839b commit 1066ca3

File tree

4 files changed

+202
-1
lines changed

4 files changed

+202
-1
lines changed

src/posit/connect/resources.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def find(self, uid) -> T:
123123
result = self._cls(self._ctx, self._parent, **result)
124124

125125
if not result:
126-
raise ValueError("")
126+
raise ValueError(f"Failed to find instance where {self._uid} is '{uid}'")
127127

128128
return result
129129

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[
2+
{
3+
"id": "54",
4+
"ppid": "20253",
5+
"pid": "20253",
6+
"key": "tHawGvHZTosJA2Dx",
7+
"remote_id": "S3ViZXJuZXRlczpyZW5kZXItci1tYXJrZG93bi1zaXRlLWtnODJo",
8+
"app_id": "54",
9+
"variant_id": "54",
10+
"bundle_id": "54",
11+
"start_time": "2006-01-02T15:04:05-07:00",
12+
"end_time": "2006-01-02T15:04:05-07:00",
13+
"last_heartbeat_time": "2006-01-02T15:04:05-07:00",
14+
"queued_time": "2006-01-02T15:04:05-07:00",
15+
"queue_name": "default",
16+
"tag": "build_report",
17+
"exit_code": 0,
18+
"status": 0,
19+
"hostname": "connect",
20+
"cluster": "Kubernetes",
21+
"image": "someorg/image:jammy",
22+
"run_as": "rstudio-connect"
23+
}
24+
]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"id": "54",
3+
"ppid": "20253",
4+
"pid": "20253",
5+
"key": "tHawGvHZTosJA2Dx",
6+
"remote_id": "S3ViZXJuZXRlczpyZW5kZXItci1tYXJrZG93bi1zaXRlLWtnODJo",
7+
"app_id": "54",
8+
"variant_id": "54",
9+
"bundle_id": "54",
10+
"start_time": "2006-01-02T15:04:05-07:00",
11+
"end_time": "2006-01-02T15:04:05-07:00",
12+
"last_heartbeat_time": "2006-01-02T15:04:05-07:00",
13+
"queued_time": "2006-01-02T15:04:05-07:00",
14+
"queue_name": "default",
15+
"tag": "build_report",
16+
"exit_code": 0,
17+
"status": 0,
18+
"hostname": "connect",
19+
"cluster": "Kubernetes",
20+
"image": "someorg/image:jammy",
21+
"run_as": "rstudio-connect"
22+
}

tests/posit/connect/test_jobs.py

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import pytest
2+
import responses
3+
4+
from posit.connect.client import Client
5+
6+
from .api import load_mock # type: ignore
7+
8+
9+
class TestJobsMixin:
10+
@responses.activate
11+
def test(self):
12+
responses.get(
13+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
14+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
15+
)
16+
17+
responses.get(
18+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs",
19+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs.json"),
20+
)
21+
22+
c = Client("https://connect.example", "12345")
23+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
24+
25+
assert len(content.jobs) == 1
26+
27+
28+
class TestJobsFind:
29+
@responses.activate
30+
def test(self):
31+
responses.get(
32+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
33+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
34+
)
35+
36+
responses.get(
37+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs/tHawGvHZTosJA2Dx",
38+
json=load_mock(
39+
"v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs/tHawGvHZTosJA2Dx.json"
40+
),
41+
)
42+
43+
c = Client("https://connect.example", "12345")
44+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
45+
46+
job = content.jobs.find("tHawGvHZTosJA2Dx")
47+
assert job["key"] == "tHawGvHZTosJA2Dx"
48+
49+
@responses.activate
50+
def test_cached(self):
51+
responses.get(
52+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
53+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
54+
)
55+
56+
responses.get(
57+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs",
58+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs.json"),
59+
)
60+
61+
c = Client("https://connect.example", "12345")
62+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
63+
64+
assert content.jobs
65+
job = content.jobs.find("tHawGvHZTosJA2Dx")
66+
assert job["key"] == "tHawGvHZTosJA2Dx"
67+
68+
@responses.activate
69+
def test_miss(self):
70+
responses.get(
71+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
72+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
73+
)
74+
75+
responses.get(
76+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs",
77+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs.json"),
78+
)
79+
80+
c = Client("https://connect.example", "12345")
81+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
82+
83+
assert content.jobs
84+
with pytest.raises(ValueError):
85+
content.jobs.find("not-found")
86+
87+
88+
class TestJobsFindBy:
89+
@responses.activate
90+
def test(self):
91+
responses.get(
92+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
93+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
94+
)
95+
96+
responses.get(
97+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs",
98+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs.json"),
99+
)
100+
101+
c = Client("https://connect.example", "12345")
102+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
103+
104+
job = content.jobs.find_by(key="tHawGvHZTosJA2Dx")
105+
assert job
106+
assert job["key"] == "tHawGvHZTosJA2Dx"
107+
108+
class TestJobsReload:
109+
@responses.activate
110+
def test(self):
111+
responses.get(
112+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
113+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
114+
)
115+
116+
mock_get = responses.get(
117+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs",
118+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs.json"),
119+
)
120+
121+
c = Client("https://connect.example", "12345")
122+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
123+
124+
assert len(content.jobs) == 1
125+
assert mock_get.call_count == 1
126+
127+
content.jobs.reload()
128+
129+
assert len(content.jobs) == 1
130+
assert mock_get.call_count == 2
131+
132+
class TestJobDestory:
133+
@responses.activate
134+
def test(self):
135+
responses.get(
136+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066",
137+
json=load_mock("v1/content/f2f37341-e21d-3d80-c698-a935ad614066.json"),
138+
)
139+
140+
responses.get(
141+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs/tHawGvHZTosJA2Dx",
142+
json=load_mock(
143+
"v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs/tHawGvHZTosJA2Dx.json"
144+
),
145+
)
146+
147+
responses.delete(
148+
"https://connect.example/__api__/v1/content/f2f37341-e21d-3d80-c698-a935ad614066/jobs/tHawGvHZTosJA2Dx",
149+
)
150+
151+
c = Client("https://connect.example", "12345")
152+
content = c.content.get("f2f37341-e21d-3d80-c698-a935ad614066")
153+
154+
job = content.jobs.find("tHawGvHZTosJA2Dx")
155+
job.destroy()

0 commit comments

Comments
 (0)