mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-11 21:18:35 +03:00
WIP fixing tests
This commit is contained in:
@@ -3,8 +3,8 @@ from fastapi.testclient import TestClient
|
||||
import pytest
|
||||
from unittest.mock import patch
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
from db.user_state import UserState
|
||||
from shared.settings import Settings
|
||||
from app.shared.db.user_state import UserState
|
||||
from app.shared.settings import Settings
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
@@ -27,9 +27,9 @@ def mock_settings():
|
||||
|
||||
@pytest.fixture()
|
||||
def test_db(get_settings: Settings):
|
||||
from db.database import make_engine
|
||||
from db import models
|
||||
from db.crud import get_user_groups
|
||||
from app.shared.db import models
|
||||
from app.shared.db.database import make_engine
|
||||
from app.shared.db.crud import get_user_groups
|
||||
|
||||
get_user_groups.cache_clear()
|
||||
make_engine.cache_clear()
|
||||
@@ -54,7 +54,7 @@ def test_db(get_settings: Settings):
|
||||
|
||||
@pytest.fixture()
|
||||
def db_session(test_db):
|
||||
from db.database import make_session_local
|
||||
from app.shared.db.database import make_session_local
|
||||
session_local = make_session_local(test_db)
|
||||
with session_local() as session:
|
||||
yield session
|
||||
@@ -63,7 +63,7 @@ def db_session(test_db):
|
||||
@pytest.fixture()
|
||||
def app(db_session):
|
||||
from web.main import app_factory
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
app = app_factory()
|
||||
crud.upsert_user_groups(db_session)
|
||||
return app
|
||||
|
||||
@@ -3,7 +3,7 @@ from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
import yaml
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
from shared.settings import Settings
|
||||
|
||||
authors = ["rick@example.com", "morty@example.com", "jerry@example.com"]
|
||||
@@ -55,14 +55,14 @@ def test_data(db_session):
|
||||
|
||||
# setup groups
|
||||
assert db_session.query(models.Group).count() == 0
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
crud.upsert_user_groups(db_session)
|
||||
assert db_session.query(models.Group).count() == 4
|
||||
assert db_session.query(models.User).count() == 3
|
||||
|
||||
|
||||
def test_get_archive(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
|
||||
print(db_session.query(models.Group).all())
|
||||
@@ -93,7 +93,7 @@ def test_get_archive(test_data, db_session):
|
||||
|
||||
|
||||
def test_search_archives_by_url(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
|
||||
# rick's archives are private
|
||||
@@ -141,7 +141,7 @@ def test_search_archives_by_url(test_data, db_session):
|
||||
|
||||
def test_search_archives_by_email(test_data, db_session):
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
# lower/upper case
|
||||
assert len(crud.search_archives_by_email(db_session, "rick@example.com")) == 34
|
||||
@@ -162,7 +162,7 @@ def test_search_archives_by_email(test_data, db_session):
|
||||
|
||||
@patch("db.crud.DATABASE_QUERY_LIMIT", new=25)
|
||||
def test_max_query_limit(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
|
||||
assert len(crud.search_archives_by_url(db_session, "https://example", ALLOW_ANY_EMAIL)) == 25
|
||||
@@ -173,8 +173,8 @@ def test_max_query_limit(test_data, db_session):
|
||||
|
||||
|
||||
def test_create_task(db_session):
|
||||
from db import crud
|
||||
from db import schemas
|
||||
from app.shared.db import crud
|
||||
from app.shared import schemas
|
||||
|
||||
task = schemas.ArchiveCreate(
|
||||
id="archive-id-456-101",
|
||||
@@ -218,7 +218,7 @@ def test_create_task(db_session):
|
||||
|
||||
|
||||
def test_soft_delete(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
# none deleted yet
|
||||
assert crud.get_archive(db_session, "archive-id-456-0", "rick@example.com") is not None
|
||||
@@ -236,7 +236,7 @@ def test_soft_delete(test_data, db_session):
|
||||
|
||||
|
||||
def test_count_archives(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.count_archives(db_session) == 100
|
||||
db_session.query(models.Archive).filter(models.Archive.id == "archive-id-456-0").delete()
|
||||
@@ -245,7 +245,7 @@ def test_count_archives(test_data, db_session):
|
||||
|
||||
|
||||
def test_count_archive_urls(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.count_archive_urls(db_session) == 1000
|
||||
db_session.query(models.ArchiveUrl).filter(models.ArchiveUrl.url == "https://example-0.com/0").delete()
|
||||
@@ -260,7 +260,7 @@ def test_count_archive_urls(test_data, db_session):
|
||||
|
||||
|
||||
def test_count_users(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.count_users(db_session) == 3
|
||||
db_session.query(models.User).filter(models.User.email == "rick@example.com").delete()
|
||||
@@ -269,7 +269,7 @@ def test_count_users(test_data, db_session):
|
||||
|
||||
|
||||
def test_count_by_users_since(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
# 100y window
|
||||
assert len(cu := crud.count_by_user_since(db_session, 60 * 60 * 24 * 31 * 12 * 100)) == 3
|
||||
@@ -279,7 +279,7 @@ def test_count_by_users_since(test_data, db_session):
|
||||
|
||||
|
||||
def test_create_tag(db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert db_session.query(models.Tag).count() == 0
|
||||
|
||||
@@ -303,7 +303,7 @@ def test_create_tag(db_session):
|
||||
|
||||
|
||||
def test_is_user_in_group(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
|
||||
# see user-groups.test.yaml
|
||||
@@ -343,7 +343,7 @@ def test_is_user_in_group(test_data, db_session):
|
||||
|
||||
|
||||
def test_get_group(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.get_group(db_session, "spaceship") is not None
|
||||
assert crud.get_group(db_session, "interdimensional") is not None
|
||||
@@ -352,7 +352,7 @@ def test_get_group(test_data, db_session):
|
||||
|
||||
|
||||
def test_create_or_get_user(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert db_session.query(models.User).count() == 3
|
||||
|
||||
@@ -368,7 +368,7 @@ def test_create_or_get_user(test_data, db_session):
|
||||
|
||||
|
||||
def test_upsert_group(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert db_session.query(models.Group).count() == 4
|
||||
|
||||
@@ -397,7 +397,7 @@ def test_upsert_group(test_data, db_session):
|
||||
|
||||
|
||||
def test_upsert_user_groups(db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
@patch('db.crud.get_settings', new=lambda: bad_setings)
|
||||
def test_missing_yaml(db_session):
|
||||
@@ -419,7 +419,7 @@ def test_upsert_user_groups(db_session):
|
||||
|
||||
|
||||
def test_create_sheet(db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert db_session.query(models.Sheet).count() == 0
|
||||
|
||||
@@ -440,7 +440,7 @@ def test_create_sheet(db_session):
|
||||
|
||||
|
||||
def test_get_user_sheet(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.get_user_sheet(db_session, "", "sheet-0") is None
|
||||
assert crud.get_user_sheet(db_session, "morty@example.com", "sheet-0") is None
|
||||
@@ -451,7 +451,7 @@ def test_get_user_sheet(test_data, db_session):
|
||||
|
||||
|
||||
def test_get_user_sheets(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert len(crud.get_user_sheets(db_session, "")) == 0
|
||||
rick_sheets = crud.get_user_sheets(db_session, "rick@example.com")
|
||||
@@ -460,7 +460,7 @@ def test_get_user_sheets(test_data, db_session):
|
||||
assert len(crud.get_user_sheets(db_session, "morty@example.com")) == 1
|
||||
|
||||
def test_delete_sheet(test_data, db_session):
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
assert crud.delete_sheet(db_session, "sheet-0", "") == False
|
||||
assert crud.delete_sheet(db_session, "sheet-0", "rick@example.com") == True
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
def test_generate_uuid():
|
||||
from db.models import generate_uuid
|
||||
from app.shared.db.models import generate_uuid
|
||||
|
||||
assert generate_uuid() != generate_uuid()
|
||||
assert len(generate_uuid()) == 36
|
||||
|
||||
@@ -3,7 +3,7 @@ import json
|
||||
from unittest.mock import patch
|
||||
|
||||
from app.shared.config import ALLOW_ANY_EMAIL
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
|
||||
|
||||
def test_submit_manual_archive_unauthenticated(client, test_no_auth):
|
||||
|
||||
@@ -46,7 +46,7 @@ def test_create_sheet_endpoint(app_with_auth, db_session):
|
||||
|
||||
# switch to jerry who's got less quota/permissions
|
||||
from web.security import get_user_state
|
||||
from db.user_state import UserState
|
||||
from app.shared.db.user_state import UserState
|
||||
app_with_auth.dependency_overrides[get_user_state] = lambda: UserState(db_session, "jerry@example.com")
|
||||
client_jerry = TestClient(app_with_auth)
|
||||
|
||||
@@ -76,7 +76,7 @@ def test_get_user_sheets_endpoint(client_with_auth, db_session):
|
||||
assert response.json() == []
|
||||
|
||||
# with data
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add(
|
||||
models.Sheet(id="123", name="Test Sheet 1", author_id="morty@example.com", group_id="spaceship", frequency="hourly")
|
||||
)
|
||||
@@ -122,7 +122,7 @@ def test_delete_sheet_endpoint(client_with_auth, db_session):
|
||||
}
|
||||
|
||||
# add sheets for deletion
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add_all([
|
||||
models.Sheet(id="123-sheet-id", name="Test Sheet 1", author_id="morty@example.com", group_id="interdimensional", frequency="daily"),
|
||||
models.Sheet(id="456-sheet-id", name="Test Sheet 2", author_id="rick@example.com", group_id="spaceship", frequency="hourly"),
|
||||
@@ -146,7 +146,7 @@ def test_delete_sheet_endpoint(client_with_auth, db_session):
|
||||
class TestArchiveUserSheetEndpoint:
|
||||
@patch("endpoints.sheet.celery", return_value=MagicMock())
|
||||
def test_normal_flow(self, m_celery, client_with_auth, db_session):
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add(models.Sheet(id="123-sheet-id", name="Test Sheet 1", author_id="morty@example.com", group_id="spaceship", frequency="hourly"))
|
||||
db_session.commit()
|
||||
|
||||
@@ -169,7 +169,7 @@ class TestArchiveUserSheetEndpoint:
|
||||
assert r.json() == {"detail": "No access to this sheet."}
|
||||
|
||||
def test_no_access(self, client_with_auth, db_session):
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add(models.Sheet(id="123-sheet-id", name="Test Sheet 1", author_id="rick@example.com", group_id="spaceship", frequency="hourly"))
|
||||
db_session.commit()
|
||||
r = client_with_auth.post("/sheet/123-sheet-id/archive")
|
||||
@@ -177,7 +177,7 @@ class TestArchiveUserSheetEndpoint:
|
||||
assert r.json() == {"detail": "No access to this sheet."}
|
||||
|
||||
def test_user_not_in_group(self, client_with_auth, db_session):
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add(models.Sheet(id="123-sheet-id", name="Test Sheet 1", author_id="morty@example.com", group_id="interdimensional", frequency="hourly"))
|
||||
db_session.commit()
|
||||
r = client_with_auth.post("/sheet/123-sheet-id/archive")
|
||||
@@ -185,7 +185,7 @@ class TestArchiveUserSheetEndpoint:
|
||||
assert r.json() == {"detail": "User does not have access to this group."}
|
||||
|
||||
def test_user_cannot_manually_trigger(self, client_with_auth, db_session):
|
||||
from db import models
|
||||
from app.shared.db import models
|
||||
db_session.add(models.Sheet(id="123-sheet-id", name="Test Sheet 1", author_id="morty@example.com", group_id="default", frequency="hourly"))
|
||||
db_session.commit()
|
||||
r = client_with_auth.post("/sheet/123-sheet-id/archive")
|
||||
|
||||
@@ -130,7 +130,7 @@ def test_search_by_url(client_with_auth, client_with_token, db_session):
|
||||
assert response.status_code == 200
|
||||
assert response.json() == []
|
||||
|
||||
from db import crud, schemas
|
||||
from app.shared.db import crud, schemas
|
||||
for i in range(11):
|
||||
crud.create_task(db_session, ArchiveCreate(id=f"url-456-{i}", url="https://example.com" if i < 10 else "https://something-else.com", result={}, public=True, author_id="rick@example.com"), [], [])
|
||||
# NB: this insertion is too fast for the ordering to be correct as they are within the same second
|
||||
@@ -184,7 +184,7 @@ def test_delete_task(client_with_auth, db_session):
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"id": "delete-123-456-789", "deleted": False}
|
||||
|
||||
from db import crud
|
||||
from app.shared.db import crud
|
||||
crud.create_task(db_session, ArchiveCreate(id="delete-123-456-789", url="https://example.com", result={}, public=True, author_id="morty@example.com"), [], [])
|
||||
|
||||
response = client_with_auth.delete("/url/delete-123-456-789")
|
||||
|
||||
@@ -5,7 +5,8 @@ from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from db import models, schemas
|
||||
from app.shared.db import models
|
||||
from app.shared import schemas
|
||||
from auto_archiver import Metadata
|
||||
from auto_archiver.core import Media
|
||||
|
||||
|
||||
Reference in New Issue
Block a user