"""Test formsemestre

Utilisation :
    créer les variables d'environnement: (indiquer les valeurs
    pour le serveur ScoDoc que vous voulez interroger)

    export SCODOC_URL="https://scodoc.xxx.net/"
    export SCODOC_USER="xxx"
    export SCODOC_PASSWD="xxx"
    export CHECK_CERTIFICATE=0 # ou 1 si serveur de production avec certif SSL valide

    (on peut aussi placer ces valeurs dans un fichier .env du répertoire tests/api).

    Lancer :
        pytest tests/api/test_api_formsemestre.py
"""
import requests

from app.scodoc import sco_utils as scu

from tests.api.setup_test_api import (
    API_URL,
    CHECK_CERTIFICATE,
    api_headers,
)


def test_save_groups_auto_assignment(api_headers):
    """
    Routes:
        /formsemestre/<id>/save_groups_auto_assignment
        /formsemestre/<id>/get_groups_auto_assignment
    """
    formsemestre_id = 1
    r = requests.get(
        f"{API_URL}/formsemestre/{formsemestre_id}",
        headers=api_headers,
        verify=CHECK_CERTIFICATE,
        timeout=scu.SCO_TEST_API_TIMEOUT,
    )
    assert r.status_code == 200
    # On stocke une chaine quelconque
    data_orig = (
        """{ "attribute" : "Un paquet de json", "valide": pas nécessairement +}--"""
    )
    r = requests.post(
        f"{API_URL}/formsemestre/{formsemestre_id}/save_groups_auto_assignment",
        data=data_orig.encode("utf-8"),
        headers=api_headers,
        verify=CHECK_CERTIFICATE,
        timeout=scu.SCO_TEST_API_TIMEOUT,
    )
    assert r.status_code == 200
    # GET
    r = requests.get(
        f"{API_URL}/formsemestre/{formsemestre_id}/get_groups_auto_assignment",
        headers=api_headers,
        verify=CHECK_CERTIFICATE,
        timeout=scu.SCO_TEST_API_TIMEOUT,
    )
    assert r.status_code == 200
    assert r.text == data_orig
    # Tente d'envoyer trop de données
    r = requests.post(
        f"{API_URL}/formsemestre/{formsemestre_id}/save_groups_auto_assignment",
        data="F*CK" * 1000000,  # environ 4MB
        headers=api_headers,
        verify=CHECK_CERTIFICATE,
        timeout=scu.SCO_TEST_API_TIMEOUT,
    )
    assert r.status_code == 413