Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ lib
.Python
tests/
.envrc
__pycache__
__pycache__
htmlcov/
.coverage

502 changes: 502 additions & 0 deletions .venv/Scripts/Activate.ps1

Large diffs are not rendered by default.

70 changes: 70 additions & 0 deletions .venv/Scripts/activate
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# This file must be used with "source bin/activate" *from bash*
# You cannot run it directly

deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi

# Call hash to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
hash -r 2> /dev/null

if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi

unset VIRTUAL_ENV
unset VIRTUAL_ENV_PROMPT
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}

# unset irrelevant variables
deactivate nondestructive

# on Windows, a path can contain colons and backslashes and has to be converted:
if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
# transform D:\path\to\venv to /d/path/to/venv on MSYS
# and to /cygdrive/d/path/to/venv on Cygwin
export VIRTUAL_ENV=$(cygpath "C:\Users\Lénovo P70\Desktop\projet 11\Python_Testing\.venv")
else
# use the path as-is
export VIRTUAL_ENV="C:\Users\Lénovo P70\Desktop\projet 11\Python_Testing\.venv"
fi

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH

# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
PS1="(.venv) ${PS1:-}"
export PS1
VIRTUAL_ENV_PROMPT="(.venv) "
export VIRTUAL_ENV_PROMPT
fi

# Call hash to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
hash -r 2> /dev/null
34 changes: 34 additions & 0 deletions .venv/Scripts/activate.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
@echo off

rem This file is UTF-8 encoded, so we need to update the current code page while executing it
for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
set _OLD_CODEPAGE=%%a
)
if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" 65001 > nul
)

set VIRTUAL_ENV=C:\Users\Lénovo P70\Desktop\projet 11\Python_Testing\.venv

if not defined PROMPT set PROMPT=$P$G

if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%

set _OLD_VIRTUAL_PROMPT=%PROMPT%
set PROMPT=(.venv) %PROMPT%

if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
set PYTHONHOME=

if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%

set PATH=%VIRTUAL_ENV%\Scripts;%PATH%
set VIRTUAL_ENV_PROMPT=(.venv)

:END
if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
set _OLD_CODEPAGE=
)
Binary file added .venv/Scripts/coverage-3.12.exe
Binary file not shown.
Binary file added .venv/Scripts/coverage.exe
Binary file not shown.
Binary file added .venv/Scripts/coverage3.exe
Binary file not shown.
22 changes: 22 additions & 0 deletions .venv/Scripts/deactivate.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@echo off

if defined _OLD_VIRTUAL_PROMPT (
set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
)
set _OLD_VIRTUAL_PROMPT=

if defined _OLD_VIRTUAL_PYTHONHOME (
set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
set _OLD_VIRTUAL_PYTHONHOME=
)

if defined _OLD_VIRTUAL_PATH (
set "PATH=%_OLD_VIRTUAL_PATH%"
)

set _OLD_VIRTUAL_PATH=

set VIRTUAL_ENV=
set VIRTUAL_ENV_PROMPT=

:END
Binary file added .venv/Scripts/flask.exe
Binary file not shown.
Binary file added .venv/Scripts/pip.exe
Binary file not shown.
Binary file added .venv/Scripts/pip3.12.exe
Binary file not shown.
Binary file added .venv/Scripts/pip3.exe
Binary file not shown.
Binary file added .venv/Scripts/py.test.exe
Binary file not shown.
Binary file added .venv/Scripts/pygmentize.exe
Binary file not shown.
Binary file added .venv/Scripts/pytest.exe
Binary file not shown.
Binary file added .venv/Scripts/python.exe
Binary file not shown.
Binary file added .venv/Scripts/pythonw.exe
Binary file not shown.
5 changes: 5 additions & 0 deletions .venv/pyvenv.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
home = C:\Users\Lénovo P70\AppData\Local\Programs\Python\Python312
include-system-site-packages = false
version = 3.12.6
executable = C:\Users\Lénovo P70\AppData\Local\Programs\Python\Python312\python.exe
command = C:\Users\Lénovo P70\AppData\Local\Programs\Python\Python312\python.exe -m venv C:\Users\Lénovo P70\Desktop\projet 11\Python_Testing\.venv
11 changes: 9 additions & 2 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,15 @@ def index():

@app.route('/showSummary',methods=['POST'])
def showSummary():
club = [club for club in clubs if club['email'] == request.form['email']][0]
return render_template('welcome.html',club=club,competitions=competitions)
# Correction bug1 "email"
email = request.form.get('email')
club = next((club for club in clubs if club['email'] == email), None)

if club:
return render_template('welcome.html', club=club, competitions=competitions)
else:
flash("Sorry, that email wasn't found.")
return redirect(url_for('index'))


@app.route('/book/<competition>/<club>')
Expand Down
16 changes: 13 additions & 3 deletions templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,19 @@
<body>
<h1>Welcome to the GUDLFT Registration Portal!</h1>
Please enter your secretary email to continue:
<form action="showSummary" method="post">
<label for="email">Email:</label>
<input type="email" name="email" id=""/>

{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li style="color:red;">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
<form action="{{ url_for('showSummary') }}" method="post">
<label>Email:</label>
<input type="email" name="email" id="email" required />
<button type="submit">Enter</button>
</form>
</body>
Expand Down
81 changes: 81 additions & 0 deletions tests/integration/test_auth_flow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import pytest
from server import app, clubs

@pytest.fixture
def client():
app.config['TESTING'] = True
with app.test_client() as client:
yield client

def test_complete_auth_integration_flow(client):
"""
Test d'intégration complet du flux d'authentification
"""

# 1. ACCÈS À LA PAGE D'ACCUEIL
home_response = client.get('/')
assert home_response.status_code == 200
assert b'Welcome to the GUDLFT Registration Portal!' in home_response.data

# Vérifications flexibles pour le formulaire de login
login_form_patterns = [
b'Enter your secretary email',
b'Please enter your secretary email',
b'secretary email',
b'email',
b'input type="email"',
b'name="email"'
]

has_login_form = any(pattern in home_response.data for pattern in login_form_patterns)
assert has_login_form, "Formulaire de login non détecté sur la page d'accueil"
print("✓ Page d'accueil accessible avec formulaire de login")

# 2. CONNEXION AVEC EMAIL VALIDE
valid_email = '[email protected]'
login_response = client.post('/showSummary',
data={'email': valid_email},
follow_redirects=True)

assert login_response.status_code == 200
assert b'Welcome, [email protected]' in login_response.data
assert b'Points available:' in login_response.data
print("✓ Connexion réussie avec email valide")

# 3. VÉRIFICATION TABLEAU DE BORD
assert b'Spring Festival' in login_response.data or b'Fall Classic' in login_response.data
print("✓ Données des compétitions affichées")

# 4. DÉCONNEXION
logout_response = client.get('/logout', follow_redirects=True)
assert logout_response.status_code == 200
assert b'Welcome to the GUDLFT Registration Portal!' in logout_response.data
print("✓ Déconnexion réussie")

# 5. TENTATIVE AVEC EMAIL INVALIDE
invalid_email = '[email protected]'
failed_login_response = client.post('/showSummary',
data={'email': invalid_email},
follow_redirects=True)

assert failed_login_response.status_code == 200

# Vérifications flexibles pour le message d'erreur
error_patterns = [
b"Sorry, that email wasn't found",
b"email wasn't found",
b"not found",
b"invalid email",
b"Sorry, that email wasn&#39;t found",
b"error",
b"Error"
]

error_found = any(pattern in failed_login_response.data for pattern in error_patterns)
assert error_found, "Message d'erreur pour email invalide non trouvé"
print("✓ Erreur de connexion correctement gérée")

print("✅ Test d'intégration flux d'authentification - COMPLET")
25 changes: 25 additions & 0 deletions tests/unit/test_email_login.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import pytest
from server import app

@pytest.fixture
def client():
app.config['TESTING'] = True
with app.test_client() as client:
yield client

def test_login_with_valid_email(client):
response = client.post('/showSummary',
data={'email': '[email protected]'},
follow_redirects=True)
assert response.status_code == 200
assert b'Welcome' in response.data

def test_login_with_invalid_email(client):
response = client.post('/showSummary',
data={'email': '[email protected]'},
follow_redirects=True)
assert response.status_code == 200
assert b"Sorry, that email wasn&#39;t found." in response.data