Skip to content

Commit

Permalink
CI day3
Browse files Browse the repository at this point in the history
  • Loading branch information
rochacbruno committed Apr 27, 2022
1 parent 7c8d1e8 commit e01b5ef
Show file tree
Hide file tree
Showing 13 changed files with 168 additions and 54 deletions.
45 changes: 45 additions & 0 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CI
on:
push:
branches:
- "*"
pull_request:
branches:
- "*"
workflow_dispatch:

jobs:
test:
strategy:
fail-fast: true
matrix:
python-version: ['3.8', '3.10']
os: [ubuntu-latest]
runs-on: ${{matrix.os}}

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: ${{matrix.python-version}}
- name: Install Poetry
run: pip install --upgrade pip && pip install poetry

- name: Install Project
run: poetry install

- name: Look for style errors
run: poetry run flake8 beerlog

- name: Look for auto format errors
run: poetry run black -l 79 --check --diff beerlog tests

- name: Run tests
run: poetry run pytest -v --junitxml=test-result.xml

- name: publish junit results
uses: EnricoMi/publish-unit-test-result-action@v1
if: always()
with:
files: test-result.xml
check_name: Test Result (Python ${{matrix.python-version}})
9 changes: 5 additions & 4 deletions beerlog/api.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from typing import Optional, List
from typing import List, Optional

from fastapi import FastAPI, Response, status

from beerlog.core import get_beers_from_database
from beerlog.serializers import BeerIn, BeerOut
from beerlog.models import Beer
from beerlog.database import get_session

from beerlog.models import Beer
from beerlog.serializers import BeerIn, BeerOut

api = FastAPI(title="beerlog ")

Expand Down
6 changes: 3 additions & 3 deletions beerlog/cli.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import typer
from typing import Optional

import typer
from rich import print
from rich.console import Console
from rich.table import Table
from rich import print

from beerlog.core import add_beer_to_database, get_beers_from_database


main = typer.Typer(help="Beer Management Application")
console = Console()

Expand Down
2 changes: 1 addition & 1 deletion beerlog/config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os
from dynaconf import Dynaconf

from dynaconf import Dynaconf

settings = Dynaconf(
envvar_prefix="BEERLOG",
Expand Down
4 changes: 3 additions & 1 deletion beerlog/core.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from typing import Optional, List
from typing import List, Optional

from sqlmodel import select

from beerlog.database import get_session
from beerlog.models import Beer

Expand Down
10 changes: 5 additions & 5 deletions beerlog/database.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import warnings

from sqlalchemy.exc import SAWarning
from sqlmodel import Session, create_engine
from sqlmodel.sql.expression import Select, SelectOfScalar

from beerlog import models
from beerlog.config import settings

warnings.filterwarnings("ignore", category=SAWarning)
SelectOfScalar.inherit_cache = True
Select.inherit_cache = True


from sqlmodel import create_engine, Session

from beerlog import models
from beerlog.config import settings

engine = create_engine(settings.database.url, echo=False)
models.SQLModel.metadata.create_all(engine)

Expand Down
5 changes: 3 additions & 2 deletions beerlog/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from sqlmodel import SQLModel, Field
from datetime import datetime
from statistics import mean # NEW
from typing import Optional

from pydantic import validator # NEW
from statistics import mean # NEW
from sqlmodel import Field, SQLModel


class Beer(SQLModel, table=True):
Expand Down
3 changes: 2 additions & 1 deletion beerlog/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from datetime import datetime
from pydantic import BaseModel, validator

from fastapi import HTTPException, status
from pydantic import BaseModel, validator


class BeerOut(BaseModel):
Expand Down
14 changes: 14 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pytest
from unittest.mock import patch
from sqlmodel import create_engine
from beerlog import models


@pytest.fixture(autouse=True, scope="function")
def each_test_uses_separate_database(request):
tmpdir = request.getfixturevalue("tmpdir")
test_db = tmpdir.join("beerlog.test.db")
engine = create_engine(f"sqlite:///{test_db}")
models.SQLModel.metadata.create_all(bind=engine)
with patch("beerlog.database.engine", engine):
yield
74 changes: 37 additions & 37 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 23 additions & 0 deletions tests/test_functional_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from fastapi.testclient import TestClient

from beerlog.api import api


client = TestClient(api)


def test_create_beer_via_api():
response = client.post(
"/beers",
json={
"name": "Skol",
"style": "KornPA",
"flavor": 1,
"image": 1,
"cost": 2,
},
)
assert response.status_code == 201
result = response.json()
assert result["name"] == "Skol"
assert result["id"] == 1
13 changes: 13 additions & 0 deletions tests/test_functional_cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from typer.testing import CliRunner

from beerlog.cli import main

runner = CliRunner()


def test_add_beer():
result = runner.invoke(
main, ["add", "Skol", "KornPA", "--flavor=1", "--image=1", "--cost=2"]
)
assert result.exit_code == 0
assert "Beer added" in result.stdout
14 changes: 14 additions & 0 deletions tests/test_unit_core.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from beerlog.core import get_beers_from_database, add_beer_to_database


def test_add_beer_to_database():
assert add_beer_to_database("Blue Moon", "Witbier", 10, 3, 6)


def test_get_beers_from_database():
# Arrange
add_beer_to_database("Blue Moon", "Witbier", 10, 3, 6)
# Act
results = get_beers_from_database()
# Assert
assert len(results) > 0

0 comments on commit e01b5ef

Please sign in to comment.