Skip to content

Commit 5086ddc

Browse files
committed
Add integration tests to github pipeline
1 parent 84e4609 commit 5086ddc

File tree

13 files changed

+65
-19
lines changed

13 files changed

+65
-19
lines changed

.github/workflows/main.yml

+35
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
push:
77
branches:
88
- main
9+
- feature/pytest
910
pull_request:
1011

1112
jobs:
@@ -26,6 +27,40 @@ jobs:
2627

2728
- name: Run Ruff
2829
run: ruff check backend # Lint the entire repository
30+
31+
- name: Run Ruff
32+
run: ruff check backend # Lint the entire repository
33+
backend-test:
34+
runs-on: ubuntu-latest
35+
services:
36+
# Label used to access the service container
37+
postgres:
38+
# Docker Hub image
39+
image: postgres
40+
# Provide the password for postgres
41+
env:
42+
POSTGRES_PASSWORD: postgres
43+
# Set health checks to wait until postgres has started
44+
ports:
45+
- 5432:5432
46+
options: >-
47+
--health-cmd pg_isready
48+
--health-interval 10s
49+
--health-timeout 5s
50+
--health-retries 5
51+
steps:
52+
- name: Check out repository code
53+
uses: actions/checkout@v4
54+
55+
- uses: eifinger/setup-rye@v4
56+
- name: Install dependencies
57+
working-directory: backend
58+
run: rye sync
59+
- name: Run tests
60+
working-directory: backend
61+
env:
62+
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
63+
run: rye run pytest
2964
frontend-lint:
3065
runs-on: ubuntu-latest
3166

backend/__init__.py

Whitespace-only changes.

backend/app/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from app.main import app
1+
from backend.app import app
22

33
__all__ = [app]

backend/app/auth.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from sqlalchemy.orm import Session
1010
from sqlalchemy import select
1111

12-
from app.db import get_session
13-
from app.users.models import User, TokenData
12+
from .db import get_session
13+
from .users.models import User, TokenData
1414

1515
# TODO: Pass as configuration, hardcoded for now
1616
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"

backend/app/db.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from sqlalchemy_utils import database_exists, create_database
22
from sqlmodel import Session, create_engine, SQLModel
3-
from app.settings import settings
3+
from .settings import settings
44

55

66
def get_engine(url=settings.database_url):

backend/app/main.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from .app import app
1+
from backend.app import app
22

3-
__all__ = [app]
3+
__all__ = ["app"]

backend/app/tasks/routers.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from typing import Annotated
22
from fastapi import Depends, Query, APIRouter
33
from sqlalchemy.orm import Session
4-
from app.users.models import User
5-
from app.auth import get_current_active_user
6-
from app.db import get_session
4+
from ..users.models import User
5+
from ..auth import get_current_active_user
6+
from ..db import get_session
77
from .schema import TaskInput, TaskOutput
88
from .service import TaskService
99

backend/app/users/routers.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from fastapi.security import OAuth2PasswordRequestForm
88
from passlib.hash import pbkdf2_sha256
99

10-
from app.users.models import User, UserCreate
11-
from app.db import get_session
12-
from app.auth import (
10+
from .models import User, UserCreate
11+
from ..db import get_session
12+
from ..auth import (
1313
create_access_token,
1414
get_current_active_user,
1515
hash_password,

backend/pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ dependencies = [
2020
"psycopg2>=2.9.10",
2121
"sqlalchemy-utils>=0.41.2",
2222
"pydantic-settings>=2.6.0",
23+
"mypy>=1.13.0",
2324
]
2425
readme = "README.md"
2526
requires-python = ">= 3.8"

backend/requirements-dev.lock

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ markupsafe==3.0.2
7272
mdurl==0.1.2
7373
# via markdown-it-py
7474
mypy==1.13.0
75+
# via task-management
7576
mypy-extensions==1.0.0
7677
# via black
7778
# via mypy

backend/requirements.lock

+5
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ markupsafe==3.0.2
6868
# via jinja2
6969
mdurl==0.1.2
7070
# via markdown-it-py
71+
mypy==1.13.0
72+
# via task-management
73+
mypy-extensions==1.0.0
74+
# via mypy
7175
packaging==24.1
7276
# via pytest
7377
passlib==1.7.4
@@ -125,6 +129,7 @@ typer==0.12.5
125129
# via fastapi-cli
126130
typing-extensions==4.12.2
127131
# via fastapi
132+
# via mypy
128133
# via pydantic
129134
# via pydantic-core
130135
# via sqlalchemy

backend/tests/conftest.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22
import os
33
from fastapi.testclient import TestClient
44

5+
# import sys
6+
7+
# sys.path.append(os.path.dirname(os.path.abspath(__file__)))
58

69
from sqlmodel import Session
710

8-
from app.main import app
9-
from backend.app.users.models import User
10-
from app.auth import get_current_active_user, hash_password
11-
from app.db import (
11+
from ..app.app import app
12+
from ..app.users.models import User
13+
from ..app.auth import get_current_active_user, hash_password
14+
from ..app.db import (
1215
get_engine,
1316
get_session,
1417
create_db_and_tables,

backend/tests/test_tasks.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from fastapi.testclient import TestClient
22
from sqlmodel import Session
3-
from backend.app.tasks.models import Task
3+
from ..app.tasks.models import Task
44

55

66
def test_create_task(client: TestClient):
@@ -103,13 +103,14 @@ def test_update_task(session: Session, client: TestClient):
103103
session.commit()
104104

105105
response = client.patch(
106-
f"/tasks/{task_1.id}", json={"title": "Deadpuddle"}
106+
f"/tasks/{task_1.id}",
107+
json={"title": "Deadpuddle", "description": "asd"},
107108
)
108109
data = response.json()
109110

110111
assert response.status_code == 200
111112
assert data["title"] == "Deadpuddle"
112-
assert data["description"] == "Dive Wilson"
113+
assert data["description"] == "asd"
113114
assert data["id"] == task_1.id
114115

115116

0 commit comments

Comments
 (0)