Skip to content
Snippets Groups Projects
Commit 31ba82a6 authored by Aymeric Chaumont's avatar Aymeric Chaumont
Browse files

Merge branch 'improve_ci' into 'main'

add test to ci

See merge request !59
parents 4961add0 885347f2
No related branches found
No related tags found
1 merge request!59add test to ci
Pipeline #44580 failed
image: python:3.9
# variables:
# MYSQL_DATABASE: $MYSQL_DATABASE
# MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
# MYSQL_USER: $MYSQL_USER
# MYSQL_PASSWORD: $MYSQL_PASSWORD
# MYSQL_DATABASE: $MYSQL_DATABASE
# services:
# - name: mysql:latest
# command: ["mysqld", "--authentication-policy=mysql_native_password"]
# alias: mysql
services:
- name: mysql:latest
command: ["mysqld", "--authentication-policy=mysql_native_password"]
alias: mysql
# services:
# - name: mysql:latest
# command: ["mysqld", "--authentication-policy=mysql_native_password"]
# alias: mysql
# variables:
# MYSQL_DATABASE: $MYSQL_DATABASE
# MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
# Host: mysql
# User: $MYSQL_USER
# Password: $MYSQL_PASSWORD
# Database: $MYSQL_DATABASE
variables:
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
stages:
......@@ -73,9 +59,10 @@ lint-back:
before_script:
- python3 -m venv venv/
- source venv/bin/activate
script:
- pip install pycodestyle
script:
- pycodestyle --config=./backend/setup.cnf ./backend
dependencies: []
lint-front:
......@@ -88,24 +75,27 @@ lint-front:
- install-npm-packages
# test:
# stage: test
# variables:
test-back:
stage: test
variables:
# MYSQL_DATABASE: $MYSQL_DATABASE
# MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
# MYSQL_DATABASE: $MYSQL_DATABASE
# MYSQL_USER: $MYSQL_USER
# MYSQL_PASSWORD: $MYSQL_PASSWORD
# DB_HOST: mysql
# DB_PORT: 3306
# WEB_ROOT: http://localhost:3000
# before_script:
# - source ./venv/bin/activate
# script:
# - cd ./backend
# - docker build -t app ./backend
# - docker run --detach -p 8000:80 app --env-file ./backend/.env
# - curl "http://localhost:8000/api/health"
DB_HOST: mysql
DB_PORT: 3306
WEB_ROOT: http://localhost:3000
before_script:
- python3 -m venv venv/
- source ./venv/bin/activate
- apt-get update && apt-get install libgl1 -y
- pip install -r ./backend/requirements.txt
- pip install pytest
script:
- cd ./backend
- pytest
dependencies: []
#######################################################################################################################################
#### ####
......@@ -160,16 +150,6 @@ lint-front:
- scp -r build/ eatfast@"$DOMAIN":/var/www/eatfast-website/frontend ; fi
# deploy-back-staging:
# extends: .deploy
# rules:
# - if: $CI_COMMIT_BRANCH == $STAGING_BRANCH
# when: always
# variables:
# DOMAIN: nofist.test.viarezo.fr
# PRIVATE_KEY: "$SSH_PRIVATE_KEY_STAGING"
deploy-back-prod:
extends: .deploy
rules:
......
from fastapi.testclient import TestClient
from datetime import datetime, timedelta
from sqlalchemy import create_engine
from dotenv import load_dotenv
import pytz
from db import models
from main import app
import os
client = TestClient(app)
load_dotenv()
user = os.getenv('MYSQL_USER')
password = os.getenv('MYSQL_PASSWORD')
host = os.getenv('DB_HOST')
port = os.getenv('DB_PORT')
database = os.getenv('MYSQL_DATABASE')
SQLALCHEMY_DATABASE_URL = f"mysql+pymysql://{user}:{password}@{host}:{port}/{database}?charset=utf8"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
models.Base.metadata.create_all(bind=engine)
test = {
"restaurant": {
"place": "restaurant test",
"day": datetime.now().weekday(),
"open_time": datetime.now(tz=pytz.timezone("Europe/Paris")).strftime("%H:%M:%S"),
"close_time": (datetime.now(tz=pytz.timezone("Europe/Paris")) + timedelta(hours=1)).strftime("%H:%M:%S")
},
"news": {
"title": "news test",
"content": "content test",
"end_date": (datetime.now(tz=pytz.timezone("Europe/Paris")) + timedelta(hours=1)).strftime("%Y-%m-%dT%H:%M:%S"),
"place": "restaurant test"
},
}
def test_post_opening_hours():
response = client.post(
"/api/opening_hours",
headers={"accept": "application/json", "Content-Type": "application/json"},
json=test["restaurant"],
)
assert response.status_code == 200
assert response.json()["place"] == test["restaurant"]["place"]
def test_get_restaurants():
response = client.get("/api/restaurants")
assert response.status_code == 200
assert len(response.json()) == 1
assert response.json()[0]["name"] == test["restaurant"]["place"]
assert response.json()[0]["status"]
def test_post_news_not_admin():
response = client.post(
"/api/news",
headers={"Content-Type": "application/json", "Cookie": "connect_id=wrong_cookie"},
json=test["news"],
)
assert response.status_code != 200
assert response.json() == {"detail": "Invalid cookie"}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment