Skip to content
Merged
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
29 changes: 29 additions & 0 deletions .github/workflows/testing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Test

on:
push:
pull_request:

jobs:
build:
runs-on: ubuntu-20.04
env:
FASTAPI_ENV: testing

strategy:
matrix:
python-version: ["3.10"]

steps:
- uses: actions/checkout@v2

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}

- name: Test with pytest
run: |
make test


1 change: 1 addition & 0 deletions app/controllers.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def get_activities(query_params: ActivityQueryParams, current_user_id: str = Dep
"message": "Internal server error"})


# unused controller
def get_single_activity(activity_id: str):
try:
activity = get_collection().find_one({"_id": ObjectId(activity_id)})
Expand Down
8 changes: 6 additions & 2 deletions app/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@

mongo = MongoClient(settings.MONGO_URI, port=None, connect=True)

database_name = 'activity-logs'
if settings.FASTAPI_ENV == 'testing':
database_name = 'testing-activity-logs'

try:
mongo_db = mongo.get_database("activity-logs")
mongo_db = mongo.get_database(database_name)
except Exception as e:
mongo_db = mongo.get_database('testing')
mongo_db = mongo.get_database('testing-activity-logs')


def get_collection():
Expand Down
1 change: 1 addition & 0 deletions app/helpers/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from jose import JWTError, jwt
import os
from config import settings


def has_role(role_list: list, role_name: str) -> bool:
Expand Down
3 changes: 3 additions & 0 deletions app/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from app.model import Activity
from typing import Optional
from app.tasks import add_activity_task, hello

# from app.helpers.decorators import admin_required, authenticate
from app.helpers.auth import JWTBearer
from app.helpers.admin import get_current_user_id

Expand Down Expand Up @@ -91,6 +93,7 @@ def get_activities(
)


# unused route
@router.get("/activities/{activity_id}", response_model=Activity)
def get_activity(activity_id: str) -> Activity:
return controllers.get_single_activity(activity_id)
12 changes: 9 additions & 3 deletions config.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
import os
import os
from functools import lru_cache


class BaseConfig:
MONGO_URI: str = os.getenv("MONGO_URI")
REDIS_URL: str = os.getenv("REDIS_URL")
CELERY_BROKER_URL: str = os.environ.get("CELERY_BROKER_URL", REDIS_URL)
CELERY_RESULT_BACKEND: str = os.environ.get(
"CELERY_RESULT_BACKEND", REDIS_URL)
JWT_SALT: str = os.getenv("JWT_SALT",'')
JWT_SALT: str = os.getenv("JWT_SALT", '')
FASTAPI_ENV: str = os.getenv("FASTAPI_ENV", "development")


class DevelopmentConfig(BaseConfig):
MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017/")
REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379")
FASTAPI_ENV = "development"


class ProductionConfig(BaseConfig):
FASTAPI_ENV = "production"
pass


class TestingConfig(BaseConfig):
pass
MONGO_URI = os.getenv(
"TEST_MONGO_URI", "mongodb://localhost:27017/")
REDIS_URL = os.getenv("TEST_REDIS_URL", "redis://localhost:6379")
FASTAPI_ENV = "testing"


@lru_cache()
Expand Down
6 changes: 5 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ services:
MONGO_URI: ${MONGO_URI:-mongodb://crane-logger:password@logger-mongo-db:27017/admin}
REDIS_URL: ${REDIS_URL:-redis://logger-redis-db:6379}
JWT_SALT: ${JWT_SALT:-salt}
TEST_MONGO_URI: ${TEST_MONGO_URI:-mongodb://crane-logger:password@logger-mongo-db:27017/admin}
TEST_REDIS_URL: ${TEST_REDIS_URL:-redis://logger-redis-db:6379/test}
ports:
- "${APP_PORT:-8000}:8000"
volumes:
Expand All @@ -36,6 +38,8 @@ services:
PYTHONUNBUFFERED: 1
MONGO_URI: ${MONGO_URI:-mongodb://crane-logger:password@logger-mongo-db:27017/admin}
REDIS_URL: ${REDIS_URL:-redis://logger-redis-db:6379}
TEST_MONGO_URI: ${TEST_MONGO_URI:-mongodb://crane-logger:password@logger-mongo-db:27017/test_admin}
TEST_REDIS_URL: ${TEST_REDIS_URL:-redis://logger-redis-db:6379/test}
JWT_SALT: ${JWT_SALT:-salt}
ports:
- "${CELERY_APP_PORT:-8500}:8000"
Expand Down Expand Up @@ -64,7 +68,7 @@ services:
image: redis:latest
container_name: logger-redis-db
ports:
- "6380:6379"
- "6379:6379"
volumes:
- loggerredisdbdata:/data

Expand Down
20 changes: 20 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,27 @@ connect-to-container:build-image ## Connect to a container
@ ${INFO} "Connecting to a container"
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) exec app-logger /bin/bash

build-testing-image: ## Build docker image
@ ${INFO} "Building testing docker images"
@ docker network inspect cranecloud_default >/dev/null 2>&1 || docker network create cranecloud_default
@ export FASTAPI_ENV='testing'
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) build --build-arg FASTAPI_ENV=testing app-logger
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) up -d app-logger logger-celery-worker logger-mongo-db logger-redis-db
@ sleep 2
@ ${INFO} "Image succesfully built"
@ echo " "

test:build-testing-image ## Run tests
@ ${INFO} "Running tests"
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) exec app-logger poetry run pytest --cov=. --cov-report=term-missing
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) stop app-logger logger-celery-worker logger-mongo-db logger-redis-db


clean: ## Remove all project images and volumes
@ ${INFO} "Cleaning your local environment"
@ ${INFO} "Note: All ephemeral volumes will be destroyed"
@ docker compose -f $(DOCKER_DEV_COMPOSE_FILE) down --rmi all
@ ${INFO} "Clean complete"

# set default target
.DEFAULT_GOAL := help
Expand Down
Loading
Loading