Skip to content
Snippets Groups Projects
test_datasets.py 2.1 KiB
Newer Older
Pierre Chanial's avatar
Pierre Chanial committed
from fastapi.testclient import TestClient

from app.config import settings
from app.schemas import Dataset, Project

from ...helpers import uid
from .helpers import stage_dataset


def test_create_dataset_success(client: TestClient, project: Project) -> None:
    dataset_name = uid('dataset')
    dataset = Dataset(name=dataset_name, description=uid() + '🍮🐉α𝒷𝓒ᗪeŦ🎯☹')
    canonical_name = f'{project.name}.{dataset_name}'
    response = client.post(
        f'{settings.API_V0_STR}/projects/{project.name}/datasets', json=dataset.dict()
    )
    assert response.status_code == 200, response.json()['detail']
    dataset_post = Dataset(**response.json())
    assert dataset_post.name == canonical_name
    dataset.name = canonical_name
    assert dataset_post == dataset


def test_create_dataset_failure(client: TestClient) -> None:
    dataset = Dataset(name=uid('dataset'))
    response = client.post(
        f'{settings.API_V0_STR}/projects/UNKNOWN/datasets', json=dataset.dict()
    )
    assert response.status_code == 404


def test_get_dataset_success(client: TestClient, project: Project) -> None:
    dataset = stage_dataset(client, project.name)
    dataset_name = dataset.name.split('.')[1]
    response = client.get(
        f'{settings.API_V0_STR}/projects/{project.name}/datasets/{dataset_name}'
    )
    assert response.status_code == 200
    dataset_get = Dataset(**response.json())
    assert dataset_get == dataset


def test_get_dataset_failure(client: TestClient, project: Project) -> None:
    response = client.get(
        f'{settings.API_V0_STR}/projects/{project.name}/datasets/UNKNOWN'
    )
    assert response.status_code == 404
    detail = response.json()['detail']
    assert "The dataset 'UNKNOWN' does not exist in project" in detail


def test_list_datasets(client: TestClient, project: Project) -> None:
    dataset = stage_dataset(client, project.name)
    response = client.get(f'{settings.API_V0_STR}/projects/{project.name}/datasets')
    assert response.status_code == 200
    serialized_datasets = response.json()
    assert dataset.name in (_['name'] for _ in serialized_datasets)