def test_handle_release_bad_hash(monkeypatch, tmp_path): monkeypatch.setattr(settings, "RELEASE_STORAGE", tmp_path / "releases") upload = tmp_path / "release.zip" release_hash = make_release_zip(upload) release = ReleaseFactory( id=release_hash, files=["file.txt"], backend_user="******" ) with pytest.raises(ValidationError) as exc: handle_release( release.workspace, release.backend, "user", "bad hash", upload.open("rb") ) assert "did not match" in exc.value.detail["detail"]
def test_handle_release_db_error(monkeypatch, tmp_path): monkeypatch.setattr(settings, "RELEASE_STORAGE", tmp_path / "releases") monkeypatch.setattr(Release.objects, "create", raise_error) upload = tmp_path / "release.zip" release_hash = make_release_zip(upload) workspace = WorkspaceFactory() backend = BackendFactory() with pytest.raises(DatabaseError): handle_release(workspace, backend, "user", release_hash, upload.open("rb")) # check the extracted files have been deleted due to the error upload_dir = tmp_path / "releases" / workspace.name / release_hash assert not upload_dir.exists()
def test_handle_release_created(monkeypatch, tmp_path): monkeypatch.setattr(settings, "RELEASE_STORAGE", tmp_path / "releases") workspace = WorkspaceFactory() backend = BackendFactory() upload = tmp_path / "release.zip" release_hash = make_release_zip(upload) release, created = handle_release( workspace, backend, "user", release_hash, upload.open("rb") ) assert created assert release.id == release_hash assert release.backend_user == "user" assert release.files == ["file.txt", "metadata/manifest.json"] assert release.file_path("file.txt").read_text() == "test" assert release.manifest == {"workspace": "workspace", "repo": "repo"}
def test_handle_release_already_exists(monkeypatch, tmp_path): monkeypatch.setattr(settings, "RELEASE_STORAGE", tmp_path / "releases") upload = tmp_path / "release.zip" release_hash = make_release_zip(upload) release = ReleaseFactory( id=release_hash, files=["file.txt", "metadata/manifest.json"], backend_user="******", ) release, created = handle_release( release.workspace, release.backend, "user", release_hash, upload.open("rb") ) assert not created assert release.id == release_hash assert release.backend_user == "original" assert release.files == ["file.txt", "metadata/manifest.json"]