Skip to content

Commit

Permalink
Remove demo mode (#128)
Browse files Browse the repository at this point in the history
  • Loading branch information
berrydenhartog authored Aug 8, 2024
2 parents aeb660f + 46c567d commit 21116e6
Show file tree
Hide file tree
Showing 9 changed files with 7 additions and 130 deletions.
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"PYTHONPATH": "${workspaceFolder}",
"DEBUG": "True",
"AUTO_CREATE_SCHEMA": "True",
"ENVIRONMENT": "demo",
"ENVIRONMENT": "local",
"LOGGING_LEVEL": "DEBUG"
}
},
Expand Down
4 changes: 2 additions & 2 deletions BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ poetry run python -m uvicorn amt.main:app --log-level warning
```

### Suggested development ENVIRONMENT settings
To use a demo environment during local development, you can use the following environment options.
To use a development environment during local development, you can use the following environment options.
```shell
export ENVIRONMENT=demo AUTO_CREATE_SCHEMA=true
export AUTO_CREATE_SCHEMA=true
```


Expand Down
2 changes: 1 addition & 1 deletion amt/api/routes/root.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@

@router.get("/")
async def base() -> RedirectResponse:
return RedirectResponse("/pages/")
return RedirectResponse("/projects/")
41 changes: 1 addition & 40 deletions amt/core/db.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import logging

from sqlalchemy.engine import Engine
from sqlmodel import Session, SQLModel, create_engine, select, update
from sqlmodel import Session, SQLModel, create_engine, select

from amt.core.config import get_settings
from amt.enums.status import Status
from amt.models import Task, User

logger = logging.getLogger(__name__)

Expand All @@ -29,48 +27,11 @@ def check_db() -> None:
logger.info("Finish Checking database connection")


def remove_old_demo_objects(session: Session) -> None:
task = session.exec(select(Task).where(Task.title == "First task")).first()
if task:
session.delete(task)
session.exec(update(Task).values(status_id=None, user_id=None)) # type: ignore
user = session.exec(select(User).where(User.name == "Robbert")).first()
if user:
session.delete(user)
session.commit()


def init_db() -> None:
logger.info("Initializing database")

if get_settings().AUTO_CREATE_SCHEMA: # pragma: no cover
logger.info("Creating database schema")
SQLModel.metadata.create_all(get_engine())

with Session(get_engine()) as session: # pragma: no cover
if get_settings().ENVIRONMENT == "demo":
logger.info("Creating demo data")
remove_old_demo_objects(session)
add_demo_users(session, ["default user"])
add_demo_tasks(session, Status.TODO, 3)
logger.info("Finished initializing database")


def add_demo_users(session: Session, user_names: list[str]) -> None:
for user_name in user_names:
user = session.exec(select(User).where(User.name == user_name)).first()
if not user:
session.add(User(name=user_name, avatar=None))
session.commit()


def add_demo_tasks(session: Session, status: Status, number_of_tasks: int) -> None:
for index in range(1, number_of_tasks + 1):
title = "Example task " + str(index)
task = session.exec(select(Task).where(Task.title == title)).first()
if not task:
session.add(
Task(title=title, description="Example description " + str(index), sort_order=index, status_id=status)
)
session.exec(update(Task).values(status_id=status)) # type: ignore
session.commit()
2 changes: 1 addition & 1 deletion amt/core/types.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Literal

# TODO(berry): make enums and convert to types
EnvironmentType = Literal["local", "production", "demo"]
EnvironmentType = Literal["local", "production"]
LoggingLevelType = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
DatabaseSchemaType = Literal["sqlite", "postgresql", "mysql", "oracle"]
4 changes: 0 additions & 4 deletions amt/services/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,6 @@ def move_task(
if not isinstance(status_id, int):
raise TypeError("status_id must be an integer") # pragma: no cover

# assign the task to the current user
if status_id > 1:
task.user_id = 1

# update the status for the task (this may not be needed if the status has not changed)
task.status_id = status_id

Expand Down
2 changes: 1 addition & 1 deletion compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ services:
- path: prod.env
required: true
environment:
- ENVIRONMENT=demo
- ENVIRONMENT=local
ports:
- 8070:8000
healthcheck:
Expand Down
79 changes: 0 additions & 79 deletions tests/core/test_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,10 @@

import pytest
from amt.core.db import (
add_demo_tasks,
add_demo_users,
check_db,
remove_old_demo_objects,
)
from amt.enums.status import Status
from amt.models import Task, User
from sqlmodel import Session, select

from tests.constants import default_task, default_user
from tests.database_test_utils import DatabaseTestUtils

logger = logging.getLogger(__name__)


Expand All @@ -29,74 +21,3 @@ def test_check_database(monkeypatch: pytest.MonkeyPatch, tmp_path: Path):
assert Session.exec.call_args is not None
assert str(select(1)) == str(Session.exec.call_args.args[0])
Session.exec = org_exec


def test_remove_old_demo_objects(db: DatabaseTestUtils):
org_delete = db.get_session().delete
db_session = db.get_session()
db_session.delete = MagicMock()

user = User(name="Robbert", avatar=None)
task = Task(title="First task", description="This is the first task", sort_order=1, status_id=Status.TODO)
db.given([user, task])

remove_old_demo_objects(db.get_session())
assert db_session.delete.call_count == 2

db.get_session().delete = org_delete


def test_remove_old_demo_objects_nothing_to_delete(db: DatabaseTestUtils):
org_delete = db.get_session().delete
db_session = db.get_session()
db_session.delete = MagicMock()

remove_old_demo_objects(db.get_session())
assert db_session.delete.call_count == 0

db.get_session().delete = org_delete


def test_add_demo_user(db: DatabaseTestUtils):
user_names = [default_user().name]
add_demo_users(db.get_session(), user_names)
assert db.exists(User, User.name, user_names[0])


def test_add_demo_user_nothing_to_add(db: DatabaseTestUtils):
db.given([default_user()])

orig_add = db.get_session().add
db_session = db.get_session()
db_session.add = MagicMock()

add_demo_users(db.get_session(), [default_user().name])

assert db_session.add.call_count == 0

db.get_session().add = orig_add


def test_add_demo_tasks(db: DatabaseTestUtils):
add_demo_tasks(db.get_session(), Status.TODO, 3)
assert db.exists(Task, Task.title, "Example task 1")
assert db.exists(Task, Task.title, "Example task 2")
assert db.exists(Task, Task.title, "Example task 3")


def test_add_demo_tasks_nothing_to_add(db: DatabaseTestUtils):
db.given(
[
default_task(title="Example task 1"),
default_task(title="Example task 2"),
default_task(title="Example task 3"),
]
)

orig_add = db.get_session().add
db_session = db.get_session()
db_session.add = MagicMock()

add_demo_tasks(db.get_session(), Status.TODO, 3)
assert db_session.add.call_count == 0
db.get_session().add = orig_add
1 change: 0 additions & 1 deletion tests/services/test_tasks_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ def test_move_task(tasks_service_with_mock: TasksService, mock_tasks_repository:
mock_tasks_repository.find_by_id(1).sort_order = 0
tasks_service_with_mock.move_task(1, 2)
assert mock_tasks_repository.find_by_id(1).sort_order == 10
assert mock_tasks_repository.find_by_id(1).user_id == 1

# test moving to todo
mock_tasks_repository.reset()
Expand Down

0 comments on commit 21116e6

Please sign in to comment.