diff --git a/backend/crud/charts_crud.py b/backend/crud/charts_crud.py index 6484ec2..32e89d4 100644 --- a/backend/crud/charts_crud.py +++ b/backend/crud/charts_crud.py @@ -8,5 +8,12 @@ def get_charts(db: Session): 차트 정보 불러오는 API :param db: :return: fish_type, count(fish_id) + 아무것도 없을시 0으로 반환 """ - return db.query(Fish.fish_type,func.count(History.fish_id)).group_by(History.fish_id).join(Fish,History.fish_id == Fish.fish_id) + # create an alias for the right table + # right_table = aliased(Fish) + + # perform the right join + # query = db.query(LeftTable).join(right_table, LeftTable.id == right_table.left_id, isouter=True) + + return db.query(Fish.fish_type,func.count(History.fish_id)).group_by(Fish.fish_type).group_by(History.fish_id).outerjoin(History,History.fish_id == Fish.fish_id) diff --git a/backend/database.py b/backend/database.py index 7c6044a..d914a46 100644 --- a/backend/database.py +++ b/backend/database.py @@ -1,11 +1,28 @@ from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker +import socket import os + SQLALCHEMY_DATABASE_URL = "mysql+pymysql://taegong:taegong@172.17.0.1:3306/taegong" +try: + hostname = socket.gethostname() + # Get the IP address + ip_address = socket.gethostbyname(hostname) + if ip_address == "127.0.0.1": + print("Running on localhost.") + SQLALCHEMY_DATABASE_URL = "mysql+pymysql://taegong:taegong@localhost:3306/taegong" + else: + print("the docker container ip is:",ip_address) +except: + print("Could not determine if running on localhost or in a Docker container.") + + + + engine = create_engine( SQLALCHEMY_DATABASE_URL, # connect_args={"check_same_thread": False} diff --git a/backend/test/__init__.py b/backend/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/test/test_charts_crud.py b/backend/test/test_charts_crud.py new file mode 100644 index 0000000..64ed052 --- /dev/null +++ b/backend/test/test_charts_crud.py @@ -0,0 +1,41 @@ +import unittest +from unittest.mock import MagicMock +from crud import charts_crud +from fastapi.testclient import TestClient +from fastapi import FastAPI, HTTPException +from unittest.mock import MagicMock +from main import app + + + +class MyTestCase(unittest.TestCase): + + def get_db(self): + """ + Fake 데이터 베이스 + :return: + """ + # Create a fake database object + db = MagicMock() + # Add some test data + items = [{"id": 1, "name": "Item 1"}] + db.query.return_value.filter.return_value.first.side_effect = items + return db + + def test_charts_crud(self): + """ + 차트 정보 불러오는 API 테스트 + 현재 데이터 베이스에 있는 데이터를 불러오는지 확인 + :return: 모든 Fish_type + history에 fish_type이 없을시 0으로 반환 + """ + # db = self.get_db() + client = TestClient(app) + + response = client.get("http://0.0.0.0:8000/api/charts") + assert response.status_code == 200 + assert response.json() == {'고등어': 0, '넙치': 5, '노랑 가오리': 11, '볼락': 3, '적색퉁돔': 5} + + +if __name__ == '__main__': + unittest.main()