34 |
34 |
from astakos.im.tests.common import *
|
35 |
35 |
|
36 |
36 |
|
|
37 |
NotFound = type('NotFound', (), {})
|
|
38 |
|
|
39 |
|
|
40 |
def find(f, seq):
|
|
41 |
for item in seq:
|
|
42 |
if f(item):
|
|
43 |
return item
|
|
44 |
return NotFound
|
|
45 |
|
|
46 |
|
37 |
47 |
class ProjectAPITest(TestCase):
|
38 |
48 |
|
39 |
49 |
def setUp(self):
|
... | ... | |
47 |
57 |
"service_origin": "service1",
|
48 |
58 |
"ui_visible": True}
|
49 |
59 |
r, _ = register.add_resource(resource11)
|
50 |
|
register.update_resources([(r, 100)])
|
|
60 |
register.update_base_default(r, 100)
|
51 |
61 |
resource12 = {"name": "service1.resource12",
|
52 |
62 |
"desc": "resource11 desc",
|
53 |
63 |
"service_type": "type1",
|
54 |
64 |
"service_origin": "service1",
|
55 |
65 |
"unit": "bytes"}
|
56 |
66 |
r, _ = register.add_resource(resource12)
|
57 |
|
register.update_resources([(r, 1024)])
|
|
67 |
register.update_base_default(r, 1024)
|
58 |
68 |
|
59 |
69 |
# create user
|
60 |
70 |
self.user1 = get_local_user("test@grnet.gr")
|
... | ... | |
73 |
83 |
"ui_visible": False,
|
74 |
84 |
"api_visible": False}
|
75 |
85 |
r, _ = register.add_resource(pending_app)
|
76 |
|
register.update_resources([(r, 3)])
|
77 |
|
accepted = AstakosUser.objects.accepted()
|
78 |
|
quotas.update_base_quota(accepted, r.name, 3)
|
|
86 |
register.update_base_default(r, 3)
|
|
87 |
request = {"resources": {r.name: {"member_capacity": 3,
|
|
88 |
"project_capacity": 3}}}
|
|
89 |
functions.modify_projects_in_bulk(Q(is_base=True), request)
|
79 |
90 |
|
80 |
91 |
def create(self, app, headers):
|
81 |
92 |
dump = json.dumps(app)
|
... | ... | |
92 |
103 |
body = json.loads(r.content)
|
93 |
104 |
return r.status_code, body
|
94 |
105 |
|
95 |
|
def project_action(self, project_id, action, headers):
|
96 |
|
action = json.dumps({action: "reason"})
|
|
106 |
def project_action(self, project_id, action, app_id=None, headers=None):
|
|
107 |
action_data = {"reason": ""}
|
|
108 |
if app_id is not None:
|
|
109 |
action_data["app_id"] = app_id
|
|
110 |
action = json.dumps({action: action_data})
|
97 |
111 |
r = self.client.post(reverse("api_project_action",
|
98 |
112 |
kwargs={"project_id": project_id}),
|
99 |
113 |
action, content_type="application/json",
|
100 |
114 |
**headers)
|
101 |
115 |
return r.status_code
|
102 |
116 |
|
103 |
|
def app_action(self, app_id, action, headers):
|
104 |
|
action = json.dumps({action: "reason"})
|
105 |
|
r = self.client.post(reverse("api_application_action",
|
106 |
|
kwargs={"app_id": app_id}),
|
107 |
|
action, content_type="application/json",
|
108 |
|
**headers)
|
109 |
|
return r.status_code
|
110 |
|
|
111 |
117 |
def memb_action(self, memb_id, action, headers):
|
112 |
118 |
action = json.dumps({action: "reason"})
|
113 |
119 |
r = self.client.post(reverse("api_membership_action",
|
... | ... | |
148 |
154 |
r = client.get(reverse("api_project", kwargs={"project_id": 1}),
|
149 |
155 |
**h_owner)
|
150 |
156 |
self.assertEqual(r.status_code, 404)
|
151 |
|
r = client.get(reverse("api_application", kwargs={"app_id": 1}),
|
152 |
|
**h_owner)
|
153 |
|
self.assertEqual(r.status_code, 404)
|
154 |
|
r = client.get(reverse("api_membership", kwargs={"memb_id": 1}),
|
|
157 |
r = client.get(reverse("api_membership", kwargs={"memb_id": 100}),
|
155 |
158 |
**h_owner)
|
156 |
159 |
self.assertEqual(r.status_code, 404)
|
157 |
160 |
|
158 |
161 |
status = self.memb_action(1, "accept", h_admin)
|
159 |
|
self.assertEqual(status, 404)
|
|
162 |
self.assertEqual(status, 409)
|
160 |
163 |
|
161 |
164 |
app1 = {"name": "test.pr",
|
162 |
165 |
"end_date": "2013-5-5T20:20:20Z",
|
163 |
166 |
"join_policy": "auto",
|
164 |
167 |
"max_members": 5,
|
165 |
168 |
"resources": {"service1.resource11": {
|
|
169 |
"project_capacity": 1024,
|
166 |
170 |
"member_capacity": 512}}
|
167 |
171 |
}
|
168 |
172 |
|
169 |
|
status, body = self.modify(app1, 1, h_owner)
|
|
173 |
status, body = self.modify(app1, 100, h_owner)
|
170 |
174 |
self.assertEqual(status, 404)
|
171 |
175 |
|
172 |
176 |
# Create
|
... | ... | |
182 |
186 |
self.assertEqual(r.status_code, 200)
|
183 |
187 |
body = json.loads(r.content)
|
184 |
188 |
self.assertEqual(body["id"], project_id)
|
185 |
|
self.assertEqual(body["application"], app_id)
|
186 |
|
self.assertEqual(body["state"], "pending")
|
|
189 |
self.assertEqual(body["last_application"]["id"], app_id)
|
|
190 |
self.assertEqual(body["last_application"]["state"], "pending")
|
|
191 |
self.assertEqual(body["state"], "uninitialized")
|
187 |
192 |
self.assertEqual(body["owner"], self.user1.uuid)
|
188 |
193 |
|
189 |
194 |
# Approve forbidden
|
190 |
|
status = self.app_action(app_id, "approve", h_owner)
|
|
195 |
status = self.project_action(project_id, "approve", app_id=app_id,
|
|
196 |
headers=h_owner)
|
191 |
197 |
self.assertEqual(status, 403)
|
192 |
198 |
|
193 |
199 |
# Create another with the same name
|
... | ... | |
201 |
207 |
app_p3["name"] = "new.pr"
|
202 |
208 |
status, body = self.create(app_p3, h_owner)
|
203 |
209 |
self.assertEqual(status, 201)
|
|
210 |
project3_id = body["id"]
|
204 |
211 |
project3_app_id = body["application"]
|
205 |
212 |
|
206 |
213 |
# No more pending allowed
|
... | ... | |
208 |
215 |
self.assertEqual(status, 409)
|
209 |
216 |
|
210 |
217 |
# Cancel
|
211 |
|
status = self.app_action(project3_app_id, "cancel", h_owner)
|
|
218 |
status = self.project_action(project3_id, "cancel",
|
|
219 |
app_id=project3_app_id, headers=h_owner)
|
212 |
220 |
self.assertEqual(status, 200)
|
213 |
221 |
|
214 |
|
# Modify
|
|
222 |
# Get project
|
|
223 |
r = client.get(reverse("api_project",
|
|
224 |
kwargs={"project_id": project3_id}),
|
|
225 |
**h_owner)
|
|
226 |
body = json.loads(r.content)
|
|
227 |
self.assertEqual(body["state"], "deleted")
|
|
228 |
|
|
229 |
# Modify of uninitialized failed
|
215 |
230 |
app2 = {"name": "test.pr",
|
216 |
231 |
"start_date": "2013-5-5T20:20:20Z",
|
217 |
232 |
"end_date": "2013-7-5T20:20:20Z",
|
... | ... | |
219 |
234 |
"leave_policy": "auto",
|
220 |
235 |
"max_members": 3,
|
221 |
236 |
"resources": {"service1.resource11": {
|
|
237 |
"project_capacity": 1024,
|
222 |
238 |
"member_capacity": 1024}}
|
223 |
239 |
}
|
224 |
|
|
225 |
240 |
status, body = self.modify(app2, project_id, h_owner)
|
|
241 |
self.assertEqual(status, 409)
|
|
242 |
|
|
243 |
# Create the project again
|
|
244 |
status, body = self.create(app2, h_owner)
|
226 |
245 |
self.assertEqual(status, 201)
|
227 |
|
self.assertEqual(project_id, body["id"])
|
228 |
|
app2_id = body["application"]
|
229 |
|
assertGreater(app2_id, app_id)
|
|
246 |
project_id = body["id"]
|
|
247 |
app_id = body["application"]
|
230 |
248 |
|
231 |
249 |
# Dismiss failed
|
232 |
|
status = self.app_action(app2_id, "dismiss", h_owner)
|
|
250 |
status = self.project_action(project_id, "dismiss", app_id,
|
|
251 |
headers=h_owner)
|
233 |
252 |
self.assertEqual(status, 409)
|
234 |
253 |
|
235 |
254 |
# Deny
|
236 |
|
status = self.app_action(app2_id, "deny", h_admin)
|
|
255 |
status = self.project_action(project_id, "deny", app_id,
|
|
256 |
headers=h_admin)
|
237 |
257 |
self.assertEqual(status, 200)
|
238 |
258 |
|
239 |
|
r = client.get(reverse("api_application", kwargs={"app_id": app2_id}),
|
|
259 |
# Get project
|
|
260 |
r = client.get(reverse("api_project",
|
|
261 |
kwargs={"project_id": project_id}),
|
240 |
262 |
**h_owner)
|
241 |
263 |
body = json.loads(r.content)
|
242 |
|
self.assertEqual(body["state"], "denied")
|
|
264 |
self.assertEqual(body["last_application"]["id"], app_id)
|
|
265 |
self.assertEqual(body["last_application"]["state"], "denied")
|
|
266 |
self.assertEqual(body["state"], "uninitialized")
|
243 |
267 |
|
244 |
268 |
# Dismiss
|
245 |
|
status = self.app_action(app2_id, "dismiss", h_owner)
|
|
269 |
status = self.project_action(project_id, "dismiss", app_id,
|
|
270 |
headers=h_owner)
|
246 |
271 |
self.assertEqual(status, 200)
|
247 |
272 |
|
248 |
|
# Resubmit
|
249 |
|
status, body = self.modify(app2, project_id, h_owner)
|
|
273 |
# Get project
|
|
274 |
r = client.get(reverse("api_project",
|
|
275 |
kwargs={"project_id": project_id}),
|
|
276 |
**h_owner)
|
|
277 |
body = json.loads(r.content)
|
|
278 |
self.assertEqual(body["last_application"]["id"], app_id)
|
|
279 |
self.assertEqual(body["last_application"]["state"], "dismissed")
|
|
280 |
self.assertEqual(body["state"], "deleted")
|
|
281 |
|
|
282 |
# Create the project again
|
|
283 |
status, body = self.create(app2, h_owner)
|
250 |
284 |
self.assertEqual(status, 201)
|
251 |
|
app3_id = body["application"]
|
|
285 |
project_id = body["id"]
|
|
286 |
app_id = body["application"]
|
252 |
287 |
|
253 |
288 |
# Approve
|
254 |
|
status = self.app_action(app3_id, "approve", h_admin)
|
|
289 |
status = self.project_action(project_id, "approve", app_id,
|
|
290 |
headers=h_admin)
|
255 |
291 |
self.assertEqual(status, 200)
|
256 |
292 |
|
257 |
|
# Get related apps
|
258 |
|
req = {"body": json.dumps({"project": project_id})}
|
259 |
|
r = client.get(reverse("api_applications"), req, **h_owner)
|
260 |
|
self.assertEqual(r.status_code, 200)
|
261 |
|
body = json.loads(r.content)
|
262 |
|
self.assertEqual(len(body), 3)
|
263 |
|
|
264 |
|
# Get apps
|
265 |
|
r = client.get(reverse("api_applications"), **h_owner)
|
266 |
|
self.assertEqual(r.status_code, 200)
|
|
293 |
# Check memberships
|
|
294 |
r = client.get(reverse("api_memberships"), **h_plain)
|
267 |
295 |
body = json.loads(r.content)
|
268 |
|
self.assertEqual(len(body), 5)
|
|
296 |
self.assertEqual(len(body), 1)
|
269 |
297 |
|
270 |
298 |
# Enroll
|
271 |
299 |
status, body = self.enroll(project_id, self.user3, h_owner)
|
272 |
300 |
self.assertEqual(status, 200)
|
273 |
301 |
m_plain_id = body["id"]
|
274 |
302 |
|
|
303 |
# Get project
|
|
304 |
r = client.get(reverse("api_project",
|
|
305 |
kwargs={"project_id": project_id}),
|
|
306 |
**h_owner)
|
|
307 |
body = json.loads(r.content)
|
275 |
308 |
# Join
|
276 |
309 |
status, body = self.join(project_id, h_owner)
|
277 |
310 |
self.assertEqual(status, 200)
|
... | ... | |
280 |
313 |
# Check memberships
|
281 |
314 |
r = client.get(reverse("api_memberships"), **h_plain)
|
282 |
315 |
body = json.loads(r.content)
|
283 |
|
self.assertEqual(len(body), 1)
|
284 |
|
m = body[0]
|
|
316 |
self.assertEqual(len(body), 2)
|
|
317 |
m = find(lambda m: m["project"] == project_id, body)
|
|
318 |
self.assertNotEqual(m, NotFound)
|
285 |
319 |
self.assertEqual(m["user"], self.user3.uuid)
|
286 |
320 |
self.assertEqual(m["state"], "accepted")
|
287 |
321 |
|
288 |
322 |
r = client.get(reverse("api_memberships"), **h_owner)
|
289 |
323 |
body = json.loads(r.content)
|
290 |
|
self.assertEqual(len(body), 2)
|
|
324 |
self.assertEqual(len(body), 3)
|
291 |
325 |
|
292 |
326 |
# Check membership
|
293 |
327 |
r = client.get(reverse("api_membership", kwargs={"memb_id": memb_id}),
|
... | ... | |
359 |
393 |
## Simple user mode
|
360 |
394 |
r = client.get(reverse("api_projects"), **h_plain)
|
361 |
395 |
body = json.loads(r.content)
|
362 |
|
self.assertEqual(len(body), 1)
|
|
396 |
self.assertEqual(len(body), 2)
|
363 |
397 |
p = body[0]
|
364 |
398 |
with assertRaises(KeyError):
|
365 |
399 |
p["pending_application"]
|
366 |
400 |
|
367 |
401 |
## Owner mode
|
368 |
|
filters = {"filter": {"state": ["active", "cancelled"]}}
|
369 |
|
req = {"body": json.dumps(filters)}
|
370 |
|
r = client.get(reverse("api_projects"), req, **h_owner)
|
|
402 |
filters = {"state": "active"}
|
|
403 |
r = client.get(reverse("api_projects"), filters, **h_owner)
|
371 |
404 |
body = json.loads(r.content)
|
372 |
405 |
self.assertEqual(len(body), 2)
|
373 |
|
assertIn("pending_application", body[0])
|
374 |
406 |
|
375 |
|
filters = {"filter": {"state": "pending"}}
|
376 |
|
req = {"body": json.dumps(filters)}
|
377 |
|
r = client.get(reverse("api_projects"), req, **h_owner)
|
|
407 |
filters = {"state": "deleted"}
|
|
408 |
r = client.get(reverse("api_projects"), filters, **h_owner)
|
378 |
409 |
body = json.loads(r.content)
|
379 |
|
self.assertEqual(len(body), 1)
|
380 |
|
self.assertEqual(body[0]["id"], project2_id)
|
|
410 |
self.assertEqual(len(body), 2)
|
381 |
411 |
|
382 |
|
filters = {"filter": {"name": "test.pr"}}
|
383 |
|
req = {"body": json.dumps(filters)}
|
384 |
|
r = client.get(reverse("api_projects"), req, **h_owner)
|
|
412 |
filters = {"state": "uninitialized"}
|
|
413 |
r = client.get(reverse("api_projects"), filters, **h_owner)
|
385 |
414 |
body = json.loads(r.content)
|
386 |
415 |
self.assertEqual(len(body), 2)
|
387 |
416 |
|
|
417 |
filters = {"name": "test.pr"}
|
|
418 |
r = client.get(reverse("api_projects"), filters, **h_owner)
|
|
419 |
body = json.loads(r.content)
|
|
420 |
self.assertEqual(len(body), 4)
|
|
421 |
|
388 |
422 |
# Leave failed
|
389 |
423 |
status = self.memb_action(m_plain_id, "leave", h_owner)
|
390 |
424 |
self.assertEqual(status, 403)
|
... | ... | |
394 |
428 |
self.assertEqual(status, 200)
|
395 |
429 |
|
396 |
430 |
# Suspend failed
|
397 |
|
status = self.project_action(project_id, "suspend", h_owner)
|
|
431 |
status = self.project_action(project_id, "suspend", headers=h_owner)
|
398 |
432 |
self.assertEqual(status, 403)
|
399 |
433 |
|
400 |
434 |
# Unsuspend failed
|
401 |
|
status = self.project_action(project_id, "unsuspend", h_admin)
|
|
435 |
status = self.project_action(project_id, "unsuspend", headers=h_admin)
|
402 |
436 |
self.assertEqual(status, 409)
|
403 |
437 |
|
404 |
438 |
# Suspend
|
405 |
|
status = self.project_action(project_id, "suspend", h_admin)
|
|
439 |
status = self.project_action(project_id, "suspend", headers=h_admin)
|
406 |
440 |
self.assertEqual(status, 200)
|
407 |
441 |
|
408 |
442 |
# Cannot view project
|
... | ... | |
411 |
445 |
self.assertEqual(r.status_code, 403)
|
412 |
446 |
|
413 |
447 |
# Unsuspend
|
414 |
|
status = self.project_action(project_id, "unsuspend", h_admin)
|
|
448 |
status = self.project_action(project_id, "unsuspend", headers=h_admin)
|
415 |
449 |
self.assertEqual(status, 200)
|
416 |
450 |
|
417 |
451 |
# Cannot approve, project with same name exists
|
418 |
|
status = self.app_action(project2_app_id, "approve", h_admin)
|
|
452 |
status = self.project_action(project2_id, "approve", project2_app_id,
|
|
453 |
headers=h_admin)
|
419 |
454 |
self.assertEqual(status, 409)
|
420 |
455 |
|
421 |
456 |
# Terminate
|
422 |
|
status = self.project_action(project_id, "terminate", h_admin)
|
|
457 |
status = self.project_action(project_id, "terminate", headers=h_admin)
|
423 |
458 |
self.assertEqual(status, 200)
|
424 |
459 |
|
425 |
460 |
# Join failed
|
... | ... | |
427 |
462 |
self.assertEqual(status, 409)
|
428 |
463 |
|
429 |
464 |
# Can approve now
|
430 |
|
status = self.app_action(project2_app_id, "approve", h_admin)
|
|
465 |
status = self.project_action(project2_id, "approve", project2_app_id,
|
|
466 |
headers=h_admin)
|
431 |
467 |
self.assertEqual(status, 200)
|
432 |
468 |
|
433 |
469 |
# Join new project
|
... | ... | |
436 |
472 |
m_project2 = body["id"]
|
437 |
473 |
|
438 |
474 |
# Get memberships of project
|
439 |
|
body = {"body": json.dumps({"project": project2_id})}
|
440 |
|
r = client.get(reverse("api_memberships"), body, **h_owner)
|
|
475 |
filters = {"project": project2_id}
|
|
476 |
r = client.get(reverse("api_memberships"), filters, **h_owner)
|
441 |
477 |
body = json.loads(r.content)
|
442 |
478 |
self.assertEqual(len(body), 1)
|
443 |
479 |
self.assertEqual(body[0]["id"], m_project2)
|
... | ... | |
447 |
483 |
self.assertEqual(status, 200)
|
448 |
484 |
|
449 |
485 |
# Reinstate failed
|
450 |
|
status = self.project_action(project_id, "reinstate", h_admin)
|
|
486 |
status = self.project_action(project_id, "reinstate", headers=h_admin)
|
451 |
487 |
self.assertEqual(status, 409)
|
452 |
488 |
|
453 |
489 |
# Rename
|
... | ... | |
461 |
497 |
r = client.get(reverse("api_project",
|
462 |
498 |
kwargs={"project_id": project_id}), **h_owner)
|
463 |
499 |
body = json.loads(r.content)
|
464 |
|
self.assertEqual(body["application"], app3_id)
|
465 |
|
self.assertEqual(body["pending_application"], app2_renamed_id)
|
|
500 |
self.assertEqual(body["last_application"]["id"], app2_renamed_id)
|
466 |
501 |
self.assertEqual(body["state"], "terminated")
|
467 |
502 |
assertIn("deactivation_date", body)
|
|
503 |
self.assertEqual(body["last_application"]["state"], "pending")
|
|
504 |
self.assertEqual(body["last_application"]["name"], "new.name")
|
|
505 |
status = self.project_action(project_id, "approve", app2_renamed_id,
|
|
506 |
headers=h_admin)
|
|
507 |
self.assertEqual(r.status_code, 200)
|
468 |
508 |
|
469 |
|
# Get application
|
470 |
|
r = client.get(reverse("api_application",
|
471 |
|
kwargs={"app_id": app2_renamed_id}), **h_plain)
|
472 |
|
self.assertEqual(r.status_code, 403)
|
|
509 |
# Change homepage
|
|
510 |
status, body = self.modify({"homepage": "new.page"},
|
|
511 |
project_id, h_owner)
|
|
512 |
self.assertEqual(status, 201)
|
473 |
513 |
|
474 |
|
r = client.get(reverse("api_application",
|
475 |
|
kwargs={"app_id": app2_renamed_id}), **h_owner)
|
476 |
|
self.assertEqual(r.status_code, 200)
|
|
514 |
r = client.get(reverse("api_project",
|
|
515 |
kwargs={"project_id": project_id}), **h_owner)
|
477 |
516 |
body = json.loads(r.content)
|
478 |
|
self.assertEqual(body["state"], "pending")
|
479 |
|
self.assertEqual(body["name"], "new.name")
|
480 |
|
|
481 |
|
# Approve (automatically reinstates)
|
482 |
|
action = json.dumps({"approve": ""})
|
483 |
|
r = client.post(reverse("api_application_action",
|
484 |
|
kwargs={"app_id": app2_renamed_id}),
|
485 |
|
action, content_type="application/json", **h_admin)
|
|
517 |
self.assertEqual(body["homepage"], "")
|
|
518 |
self.assertEqual(body["last_application"]["homepage"], "new.page")
|
|
519 |
homepage_app = body["last_application"]["id"]
|
|
520 |
status = self.project_action(project_id, "approve", homepage_app,
|
|
521 |
headers=h_admin)
|
486 |
522 |
self.assertEqual(r.status_code, 200)
|
|
523 |
r = client.get(reverse("api_project",
|
|
524 |
kwargs={"project_id": project_id}), **h_owner)
|
|
525 |
body = json.loads(r.content)
|
|
526 |
self.assertEqual(body["homepage"], "new.page")
|
487 |
527 |
|
488 |
528 |
# Bad requests
|
489 |
529 |
r = client.head(reverse("api_projects"), **h_admin)
|
... | ... | |
495 |
535 |
self.assertEqual(r.status_code, 405)
|
496 |
536 |
self.assertTrue('Allow' in r)
|
497 |
537 |
|
498 |
|
r = client.head(reverse("api_applications"), **h_admin)
|
499 |
|
self.assertEqual(r.status_code, 405)
|
500 |
|
self.assertTrue('Allow' in r)
|
501 |
|
|
502 |
538 |
r = client.head(reverse("api_memberships"), **h_admin)
|
503 |
539 |
self.assertEqual(r.status_code, 405)
|
504 |
540 |
self.assertTrue('Allow' in r)
|
505 |
541 |
|
506 |
|
status = self.project_action(1, "nonex", h_owner)
|
|
542 |
status = self.project_action(1, "nonex", headers=h_owner)
|
507 |
543 |
self.assertEqual(status, 400)
|
508 |
544 |
|
509 |
545 |
action = json.dumps({"suspend": "", "unsuspend": ""})
|
... | ... | |
561 |
597 |
status, body = self.create(ap, h_owner)
|
562 |
598 |
self.assertEqual(status, 400)
|
563 |
599 |
|
564 |
|
ap["resources"] = {"service1.resource11": {"member_capacity": 512}}
|
|
600 |
ap["resources"] = {"service1.resource11": {
|
|
601 |
"member_capacity": 512}}
|
|
602 |
status, body = self.create(ap, h_owner)
|
|
603 |
self.assertEqual(status, 400)
|
|
604 |
|
|
605 |
ap["resources"] = {"service1.resource11": {"member_capacity": 512,
|
|
606 |
"project_capacity": 1024}}
|
565 |
607 |
status, body = self.create(ap, h_owner)
|
566 |
608 |
self.assertEqual(status, 201)
|
567 |
609 |
|
... | ... | |
570 |
612 |
self.assertEqual(status, 400)
|
571 |
613 |
|
572 |
614 |
ap["name"] = "domain.name"
|
573 |
|
ap.pop("max_members")
|
574 |
|
status, body = self.create(ap, h_owner)
|
575 |
|
self.assertEqual(status, 400)
|
576 |
|
|
577 |
|
filters = {"filter": {"state": "nonex"}}
|
578 |
|
req = {"body": json.dumps(filters)}
|
579 |
|
r = client.get(reverse("api_projects"), req, **h_owner)
|
580 |
|
self.assertEqual(r.status_code, 400)
|
581 |
615 |
|
582 |
|
filters = {"filter": {"nonex": "nonex"}}
|
583 |
|
req = {"body": json.dumps(filters)}
|
584 |
|
r = client.get(reverse("api_projects"), req, **h_owner)
|
585 |
|
self.assertEqual(r.status_code, 400)
|
586 |
|
|
587 |
|
req = {"body": json.dumps({"project": "nonex"})}
|
588 |
|
r = client.get(reverse("api_applications"), req, **h_owner)
|
589 |
|
self.assertEqual(r.status_code, 400)
|
590 |
|
|
591 |
|
req = {"body": json.dumps({"project": "nonex"})}
|
592 |
|
r = client.get(reverse("api_memberships"), req, **h_owner)
|
|
616 |
filters = {"state": "nonex"}
|
|
617 |
r = client.get(reverse("api_projects"), filters, **h_owner)
|
593 |
618 |
self.assertEqual(r.status_code, 400)
|
594 |
619 |
|
595 |
620 |
|
... | ... | |
601 |
626 |
# astakos resources
|
602 |
627 |
self.resource = Resource.objects.create(name="astakos.pending_app",
|
603 |
628 |
uplimit=0,
|
|
629 |
project_default=0,
|
604 |
630 |
ui_visible=False,
|
605 |
631 |
api_visible=False,
|
606 |
632 |
service_type="astakos")
|
... | ... | |
608 |
634 |
# custom service resources
|
609 |
635 |
self.resource = Resource.objects.create(name="service1.resource",
|
610 |
636 |
uplimit=100,
|
|
637 |
project_default=0,
|
611 |
638 |
service_type="service1")
|
612 |
639 |
self.admin = get_local_user("projects-admin@synnefo.org")
|
613 |
640 |
self.admin.uuid = 'uuid1'
|
... | ... | |
673 |
700 |
@im_settings(PROJECT_ADMINS=['uuid1'])
|
674 |
701 |
def test_applications(self):
|
675 |
702 |
# let user have 2 pending applications
|
676 |
|
quotas.update_base_quota([self.user], 'astakos.pending_app', 2)
|
|
703 |
|
|
704 |
# TODO figure this out
|
|
705 |
request = {"resources": {"astakos.pending_app":
|
|
706 |
{"member_capacity": 3,
|
|
707 |
"project_capacity": 3}}}
|
|
708 |
functions.modify_project(self.user.uuid, request)
|
677 |
709 |
|
678 |
710 |
r = self.user_client.get(reverse('project_add'), follow=True)
|
679 |
711 |
self.assertRedirects(r, reverse('project_add'))
|