Fixes #1395 - Adds new `POST /orgs/<orgid>/jobs/retryFailed` API endpoint to retry all failed background jobs for a specific org. - Also adds `POST /orgs/all/jobs/retryFailed` for superadmin to retry all failed background jobs for all orgs
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """background jobs tests, named to run after everything else has finished"""
 | |
| 
 | |
| import requests
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from .conftest import API_PREFIX
 | |
| 
 | |
| 
 | |
| job_id = None
 | |
| 
 | |
| 
 | |
| def test_background_jobs_list(admin_auth_headers, default_org_id):
 | |
|     r = requests.get(
 | |
|         f"{API_PREFIX}/orgs/{default_org_id}/jobs/", headers=admin_auth_headers
 | |
|     )
 | |
|     assert r.status_code == 200
 | |
|     data = r.json()
 | |
|     items = data["items"]
 | |
| 
 | |
|     assert items
 | |
|     assert len(items) == data["total"]
 | |
| 
 | |
|     for item in items:
 | |
|         assert item["id"]
 | |
|         assert item["type"]
 | |
|         assert item["oid"]
 | |
|         assert item["success"] in (True, False, None)
 | |
|         assert item["started"]
 | |
|         finished = item["finished"]
 | |
|         assert finished or finished is None
 | |
| 
 | |
|     global job_id
 | |
|     job_id = [item for item in items if item["finished"] and item["success"]][0]["id"]
 | |
|     assert job_id
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize("job_type", [("create-replica"), ("delete-replica")])
 | |
| def test_background_jobs_list_filter_by_type(
 | |
|     admin_auth_headers, default_org_id, job_type
 | |
| ):
 | |
|     r = requests.get(
 | |
|         f"{API_PREFIX}/orgs/{default_org_id}/jobs/?jobType={job_type}",
 | |
|         headers=admin_auth_headers,
 | |
|     )
 | |
|     assert r.status_code == 200
 | |
|     data = r.json()
 | |
|     items = data["items"]
 | |
| 
 | |
|     assert items
 | |
|     assert len(items) == data["total"]
 | |
| 
 | |
|     for item in items:
 | |
|         assert item["type"] == job_type
 | |
| 
 | |
| 
 | |
| def test_background_jobs_list_filter_by_success(admin_auth_headers, default_org_id):
 | |
|     r = requests.get(
 | |
|         f"{API_PREFIX}/orgs/{default_org_id}/jobs/?success=True",
 | |
|         headers=admin_auth_headers,
 | |
|     )
 | |
|     assert r.status_code == 200
 | |
|     data = r.json()
 | |
|     items = data["items"]
 | |
| 
 | |
|     assert items
 | |
|     assert len(items) == data["total"]
 | |
| 
 | |
|     for item in items:
 | |
|         assert item["success"]
 | |
| 
 | |
| 
 | |
| def test_background_jobs_no_failures(admin_auth_headers, default_org_id):
 | |
|     r = requests.get(
 | |
|         f"{API_PREFIX}/orgs/{default_org_id}/jobs/?success=False",
 | |
|         headers=admin_auth_headers,
 | |
|     )
 | |
|     assert r.status_code == 200
 | |
|     data = r.json()
 | |
|     assert data["items"] == []
 | |
|     assert data["total"] == 0
 | |
| 
 | |
| 
 | |
| def test_get_background_job(admin_auth_headers, default_org_id):
 | |
|     r = requests.get(
 | |
|         f"{API_PREFIX}/orgs/{default_org_id}/jobs/{job_id}", headers=admin_auth_headers
 | |
|     )
 | |
|     assert r.status_code == 200
 | |
|     data = r.json()
 | |
| 
 | |
|     assert data["id"]
 | |
|     assert data["type"] in ("create-replica", "delete-replica")
 | |
|     assert data["oid"] == default_org_id
 | |
|     assert data["success"]
 | |
|     assert data["started"]
 | |
|     assert data["finished"]
 | |
|     assert data["file_path"]
 | |
|     assert data["object_type"]
 | |
|     assert data["object_id"]
 | |
|     assert data["replica_storage"]
 | |
| 
 | |
| 
 | |
| def test_retry_all_failed_bg_jobs_not_superuser(crawler_auth_headers):
 | |
|     r = requests.post(
 | |
|         f"{API_PREFIX}/orgs/all/jobs/retryFailed", headers=crawler_auth_headers
 | |
|     )
 | |
|     assert r.status_code == 403
 | |
|     assert r.json()["detail"] == "Not Allowed"
 |