|
3 | 3 | from copy import deepcopy |
4 | 4 | from dataclasses import asdict |
5 | 5 | from datetime import UTC, datetime |
| 6 | +from pathlib import Path |
| 7 | +from typing import Tuple |
| 8 | +from uuid import uuid4 |
6 | 9 |
|
7 | 10 | import pytest |
8 | 11 | from flask import url_for |
9 | 12 | from flask_sqlalchemy import get_debug_queries |
10 | | -from journalist_app import api2 |
| 13 | +from journalist_app import api2, create_app |
11 | 14 | from journalist_app.api2.shared import json_version |
12 | 15 | from journalist_app.api2.types import Event, EventType, ItemTarget, SourceTarget |
13 | 16 | from models import Reply, Source, SourceStar, Submission, db |
14 | 17 | from sqlalchemy.orm.exc import MultipleResultsFound |
15 | | -from tests.utils import ascii_armor, decrypt_as_journalist |
| 18 | +from tests.factories import SecureDropConfigFactory |
| 19 | +from tests.utils import ascii_armor, decrypt_as_journalist, i18n |
16 | 20 | from tests.utils.api_helper import get_api_headers |
17 | 21 | from tests.utils.db_helper import init_source, submit |
| 22 | +from werkzeug.routing import BuildError |
18 | 23 |
|
19 | 24 |
|
20 | 25 | def filtered_queries(): |
@@ -56,6 +61,37 @@ def test_json_version(): |
56 | 61 | assert version1 == version2 |
57 | 62 |
|
58 | 63 |
|
| 64 | +@pytest.mark.parametrize( |
| 65 | + "endpoint", |
| 66 | + [ |
| 67 | + "api2.index", |
| 68 | + "api2.data", |
| 69 | + ], |
| 70 | +) |
| 71 | +def test_api2_not_available_when_disabled( |
| 72 | + setup_journalist_key_and_gpg_folder: Tuple[str, Path], |
| 73 | + setup_rqworker: Tuple[str, str], |
| 74 | + endpoint: str, |
| 75 | +) -> None: |
| 76 | + journalist_key_fingerprint, gpg_key_dir = setup_journalist_key_and_gpg_folder |
| 77 | + worker_name, _ = setup_rqworker |
| 78 | + config_without_v2api = SecureDropConfigFactory.create( |
| 79 | + SECUREDROP_DATA_ROOT=Path(f"/tmp/sd-tests/conftest-{uuid4()}"), |
| 80 | + GPG_KEY_DIR=gpg_key_dir, |
| 81 | + JOURNALIST_KEY=journalist_key_fingerprint, |
| 82 | + SUPPORTED_LOCALES=i18n.get_test_locales(), |
| 83 | + RQ_WORKER_NAME=worker_name, |
| 84 | + V2_API_ENABLED=False, |
| 85 | + ) |
| 86 | + app = create_app(config_without_v2api) |
| 87 | + app.config["SERVER_NAME"] = "localhost.localdomain" |
| 88 | + |
| 89 | + with app.app_context(): |
| 90 | + with app.test_client() as client_app: |
| 91 | + with pytest.raises(BuildError): |
| 92 | + client_app.get(url_for(endpoint)) |
| 93 | + |
| 94 | + |
59 | 95 | @pytest.mark.parametrize( |
60 | 96 | ("endpoint", "kwargs"), |
61 | 97 | [ |
|
0 commit comments