From 87e76d6670e392ad4654151c9b5fd89d25c093fa Mon Sep 17 00:00:00 2001 From: kckoh Date: Sat, 28 Jan 2023 19:49:29 -0800 Subject: [PATCH 1/4] test: add test cases to charts_crud --- backend/test/__init__.py | 0 backend/test/test_charts_crud.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 backend/test/__init__.py create mode 100644 backend/test/test_charts_crud.py 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..e5e305c --- /dev/null +++ b/backend/test/test_charts_crud.py @@ -0,0 +1,31 @@ +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): + # 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_fish_crud(self): + # 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() From c13b664f8b0713d2ef9222fe35105f23e3c0def5 Mon Sep 17 00:00:00 2001 From: kckoh Date: Sat, 28 Jan 2023 19:52:24 -0800 Subject: [PATCH 2/4] test: add comments to the test --- backend/test/test_charts_crud.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/backend/test/test_charts_crud.py b/backend/test/test_charts_crud.py index e5e305c..64ed052 100644 --- a/backend/test/test_charts_crud.py +++ b/backend/test/test_charts_crud.py @@ -11,6 +11,10 @@ class MyTestCase(unittest.TestCase): def get_db(self): + """ + Fake 데이터 베이스 + :return: + """ # Create a fake database object db = MagicMock() # Add some test data @@ -18,7 +22,13 @@ def get_db(self): db.query.return_value.filter.return_value.first.side_effect = items return db - def test_fish_crud(self): + def test_charts_crud(self): + """ + 차트 정보 불러오는 API 테스트 + 현재 데이터 베이스에 있는 데이터를 불러오는지 확인 + :return: 모든 Fish_type + history에 fish_type이 없을시 0으로 반환 + """ # db = self.get_db() client = TestClient(app) From 13bf2338fd7968606498b59e5c79dbbf21fd886e Mon Sep 17 00:00:00 2001 From: kckoh Date: Sat, 28 Jan 2023 19:53:15 -0800 Subject: [PATCH 3/4] fix: changes to query to return all fish_type --- backend/crud/charts_crud.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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) From dc0368a3f3ce69c8db99aa8eba3a594b0f8e45cd Mon Sep 17 00:00:00 2001 From: kckoh Date: Sat, 28 Jan 2023 19:53:46 -0800 Subject: [PATCH 4/4] chore: change mysql host name based on dockers or localhost --- backend/database.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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}