From a63d109267b77773ddd09ad0b46d2df59382a6e4 Mon Sep 17 00:00:00 2001 From: KarmaPol Date: Sun, 4 Aug 2024 22:38:57 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/sonarlint/issuestore/index.pb | 10 ++++- .idea/sonarlint/securityhotspotstore/index.pb | 10 ++++- .../restaurant_service.cpython-311.pyc | Bin 8430 -> 8462 bytes app/service/restaurant_service.py | 2 + requirements.txt | 3 ++ ...urant_service.cpython-311-pytest-8.2.2.pyc | Bin 3239 -> 3143 bytes test/test_restaurant_service.py | 35 +++++++----------- 7 files changed, 37 insertions(+), 23 deletions(-) diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb index 8be7225..7abac8b 100644 --- a/.idea/sonarlint/issuestore/index.pb +++ b/.idea/sonarlint/issuestore/index.pb @@ -37,4 +37,12 @@ c n >.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py,1/3/13b2dadc1a304806d1279045cdb6b0d9584b4168 G -app/service/__init__.py,9/b/9b3839df051a329f6861c3f369500c5a02569882 \ No newline at end of file +app/service/__init__.py,9/b/9b3839df051a329f6861c3f369500c5a02569882 +e +5.venv/lib/python3.11/site-packages/pluggy/_callers.py,7/f/7fa0bb990c19ec6ac5c4dfafff41e24424f4bfb7 +d +4.venv/lib/python3.11/site-packages/_pytest/python.py,b/9/b9d952745c82e9b73dc79e24c8fca24f8eb95954 +e +5.venv/lib/python3.11/site-packages/pluggy/_manager.py,9/d/9d9a19087bf822ca49dc04c2994fec2deadac19e +c +3.venv/lib/python3.11/site-packages/pluggy/_hooks.py,b/d/bd6152bb501e7bf20c1cf6d7c35e556b4afccda0 \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb index 8be7225..7abac8b 100644 --- a/.idea/sonarlint/securityhotspotstore/index.pb +++ b/.idea/sonarlint/securityhotspotstore/index.pb @@ -37,4 +37,12 @@ c n >.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py,1/3/13b2dadc1a304806d1279045cdb6b0d9584b4168 G -app/service/__init__.py,9/b/9b3839df051a329f6861c3f369500c5a02569882 \ No newline at end of file +app/service/__init__.py,9/b/9b3839df051a329f6861c3f369500c5a02569882 +e +5.venv/lib/python3.11/site-packages/pluggy/_callers.py,7/f/7fa0bb990c19ec6ac5c4dfafff41e24424f4bfb7 +d +4.venv/lib/python3.11/site-packages/_pytest/python.py,b/9/b9d952745c82e9b73dc79e24c8fca24f8eb95954 +e +5.venv/lib/python3.11/site-packages/pluggy/_manager.py,9/d/9d9a19087bf822ca49dc04c2994fec2deadac19e +c +3.venv/lib/python3.11/site-packages/pluggy/_hooks.py,b/d/bd6152bb501e7bf20c1cf6d7c35e556b4afccda0 \ No newline at end of file diff --git a/app/service/__pycache__/restaurant_service.cpython-311.pyc b/app/service/__pycache__/restaurant_service.cpython-311.pyc index 0fd5b951b815d310fd56b4303e88356967d50add..a00bdeaff466ff3a48491c1f968217f448154f8b 100644 GIT binary patch delta 323 zcmYj|Jxjw-7=?Ro5-v>|Q&QT1t^FV>NNIvjPC{!CEe2gga8p8;4oX23v>*tzlL&X| z4^TRa+|5mzsWd1~ofTJcE)L#qzQefTiQFaM)LT zfg5T9SY|nGpPy?5V2}3_Hxiy%G1)Pwd3X3utv70oGgepQ4@pOE7HzLA4dkVDM;=r# zbw~BGbg-KDGBnI6!o#d2`mii}E)7>8I7G=WNJG2oZl~mt2@ysq)i>y9uHvgSQWfEm zA&EXJ$i7XZMff&fOK%Z0c-QI?obb|Yjo^X@xlf?OH}iF3?f~;Yv41>b_r>}j!HiVH delta 289 zcmeBkdgsWyoR^o20SKN~txr3>k++nQ@x^tYY8iPaUtv1S$TyjbBVh9< z=5j_x{>fRa`HcLVZ?Wn#G4gHZ;*e&Xtj~F#QD^dhPF1EN?#+r^{EUqHlMT7US&Nu} z25;`*mSz5*au7h=LaYZYE4{ diff --git a/app/service/restaurant_service.py b/app/service/restaurant_service.py index 59d39f3..2e889e9 100644 --- a/app/service/restaurant_service.py +++ b/app/service/restaurant_service.py @@ -41,6 +41,8 @@ def get_restaurant_recommendation(get_recommendation_req): total_restaurant_num = metadata['total_count'] page_number = total_restaurant_num // MAX_RESTAURANT_NUM + if page_number == 0: + page_number = 1 pages = [i for i in range(1, page_number+1)] with ThreadPoolExecutor(len(pages)) as executor: diff --git a/requirements.txt b/requirements.txt index ed5edd4..f022c80 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ annotated-types==0.7.0 anyio==4.4.0 +beautifulsoup4==4.12.3 +bs4==0.0.2 cachetools==5.3.3 certifi==2024.6.2 charset-normalizer==3.3.2 @@ -49,6 +51,7 @@ rich==13.7.1 rsa==4.9 shellingham==1.5.4 sniffio==1.3.1 +soupsieve==2.5 starlette==0.37.2 tqdm==4.66.4 typer==0.12.3 diff --git a/test/__pycache__/test_restaurant_service.cpython-311-pytest-8.2.2.pyc b/test/__pycache__/test_restaurant_service.cpython-311-pytest-8.2.2.pyc index 1446f88439171b0967b7b9fbdee2492bd9853f70..3f10f040fbe36209d34cc80994d156091aa24a4c 100644 GIT binary patch literal 3143 zcma(TU2hXdaQFO?b8N@?CLttsp)|N9PH+eTMDqb^(kN=61*+C999QqwzT|vo?#`gN zAmt&dQne3#so)_w?yztc7JKKqaMZ0%5o}I6qotd5W z&*5+@f^l*E_pe^GAoMq%)P}!`Je$G@-9ZEqtfC}#eub+F%2x?1K zOo~-nAQ=FfM{UgplR<~(RYTcuGVI_!wJjS-MgaGd79x@WX(ho;Um7RdNhsMt!laEv z(ulN^j!h5gBwd@{WGCsS{^hQki=^iapaP;I>80(z?%Ng+x(}Z_9C{z^XiD#=oqOqI z|2oOkhQ&bUPeCDQ!CMr!IaA{ zgy(dfM5m&QxhAtCHcJ&>(!cU)nJ-lOO_;hr5kAuTUqr(lRxlDu4 zT%x`j=QiI07pr-~rC>vx^omP$AFBHtzI|ox@d)H79{}*=-uF+wyZ2=42ZmxE*0MrZ zZ|VkNeuJhVO)O$km8L98AYq*F7!C-Ed6{1^CCDXf%gJdff2mR_rROz^1x$#Y8?m6J zTe4cEhj{!YIj2al0t+wBF3z5pW-lyAi|>C{I3ee9ag!Q1loZ{SBdJE>6|f?&$U0DD zBb5PP%)H8LCuC47Z)nmDSupPK5^{$cp@<|nHV3RI5j?z=ga@|<0fPi@)J;XEv;C2LYb(-iE}WY zm7!4C9!pNg1cN(aa3v5Qbkf7)+$=uqK%LzX1vd?Bs5!S5Bi8Gl;JwG+CpS61^{I+NE{lUz>Lj0)rE6r8cWGtWR1r8uaKTGF0%1LY2)&h?QL2wq1?4-p`h9@cvaeEPWV*G0GD%~Va7 z+u}iSis+?dXLk{817)XS-^LB4gBwc+qg!aJem#IkR7uwiYOoWzgZo zzB^YG=S$+eEzUcvz6WC8-M+0iHwQ}n@7PD*D~eMkamuc}#@n#s5}aI7a=NV~u~tdS z>Ld@XSYjbb;sM|nnIt(o`~^8G?v{^$vcUoW%tHXy>Q6=R`KBxARp9D#jo3aWewkNP zOVLagn#rw7^;y4^Tjeo}yJ>(M0~-2GL$N3e)Jd$RMr#FSC&aSB1l?reyrx)=KJO_8 zKL|{$(bz%WrirD;n>Q5xf5Pc%?9gik-5PMqW$5*t-|3I6!)b7C>w^-4tB3Vhd)}*; z2@5-{diQIg+6~3fHMfMtOW@==8S2-`!ExB&PF`M$XWR@<8FRqkZNdBoV8w$mF7Hm# zPP!Z{u;x5v^oHH|mQiHQc^;t!yYVffMZ57WqYv!Hw<4l_N6P(2$~`0H?*8)NyOp5d z=dU0RJYtVvqmD{98l3mosQ=MG^pCUlM_<^P}8Gi)i2x_OJEWEz|arWaDc^e6579m0jA5eLiDjrHGXhR;sjF`@$6)UoGOR zC499a1o14cAP%2;kRV|oa%340g(ET`*D8KTtj~|3!e0e#)GUshYs#&NUWHM8TC z7)Oe#9+0?jL0rm(Ll9~u{s;a72L)+0Ql(0WLnV-0wdIfl;>~W>$)+JHV!eKTAHO&A zX6C&&{vj5NAb9@1^V9O(AVR-!!F>XI%(K6M`4(Y>1q~Gh`&X>^ilTrjQo%1cmOvo@ z7EudULWPj6^J(Eqq!6)rN$aRY3sIZ*Yq3ha5C=YhgE)l4ID$Lw`%6M0fun^^9K-Rl zP)Op08o1r%27@~<0V^Ukgp*qWLJ#2UJhrau2wk^VhkNd!EpU0@Ivy((y0P#vO7}kD z=<8{L`Kt;ot^jlDeU-{YEgF@Is$+$g4IRYKYN|=WdiqGKSv7Q11@l13b~dR}BZ_`_ zoZZBSMsYQD6NYl^yRr8S1E=0iEg3{r^xeJ{N~;&g#wq~IkT#6@CdS8iqqcJ%V=$O$ zKZ{f~rKrlfQc+o~s8F?Jkab54JEj`ZSO}M4Hod5_Bry~$D~`X7tAGE+@ctmf7gNKB z;v0S^HS8IgV>}^qM0+xBJ$eNk<_5x1upX{@DWY}^d&?Z&U>($;iY6D0noghatYA^T zJ+e|Q%d6@-i!J4s@*m0h8;kPN!l(7~O0}9XRkBttst2}Ec2)d}`ib@s8E2ZdbXDUKaoQTWMZi>7Z=>bziklV#TrF}yK z9nibQ4CaP-Kp)=6V*!iUhtWf63r2a+9%;izJN8ixpSP?wBpTbdV!vC|4ytt@4_FLP=0`G;OBM_CTV4TmGHD+!M#3|7Iwwi*|bpaIy+KbA5WX9+1V6lvuTrspf>H! z%985mRkcV}%*)kjwj%R^11H&fTrr`(sqHukj-Z@OCs@*M6i)FuWzM2Rr8T0D= zS-%Z9s;pVeHo3J*c(o9|GlXY6i_BHmDfDMqAuK5u6-|S{sst{LszOv21+#psR@P`) zH(5Y40AaF|vbkc^G`@x^kxQC!3;LSfzQeMqEUR42;(2>1aO*4(Vi49XFB_zyP#JbW zQ*`@2N{89NUgT6hGWyrrW>4$c+l0ZRt?pu3pL2^Hz5>Y*Uw?|Pzk@H(+4KoVaH7l| z6sAm`5-IoDT^#!aPRSfwU9ah-m72a6w>CBEa z_WQuJ)pgEFp0(nARX-cPF#8KyHbM(q~;_6P~>gKgaCv#SO$V#TH z*jX#tXLSy?Is*OR1LQd;O{urliTvrNH1dly0@Qhbl}2`4zO8haZP(;r+9FunUTx*e znuFuFVgJb&z~JbN)25CFraLs_!719{XRzNW-NQm|@{_kf!TM#VTry6|Kyt&?e20{& z%EE0G3-0O22=@^Ulf`O!newB~@Qfw=f@Ej-eT%7)IXX%C|1`T=*&D|Koi5^3^WgDU zxKsCU!sO%}C&N69psKHxiJ{wR_9G%Q+%gShH*~3D;F_ksOBO)nSGU;*wB-{7!Qz?t zFQ4$H{jtzc)B8R~i%suqp{1txwa~Su_icsHi4m)R#OfWjdit$_w;@0MffnM#7wQ$8 zDB0>k0}H+;>Td;*zw7IXmQPHIo3T~|4UKM!_aa|j-bSY%3xUnvX7KX1Ft;PjS&lTf vE#!BE{GOEG7Up+^`IdM>NVgD>r#>WJ5kSS6d0_IK$pbUj3b-H}Y46)V>2Zvm diff --git a/test/test_restaurant_service.py b/test/test_restaurant_service.py index 626f710..4588844 100644 --- a/test/test_restaurant_service.py +++ b/test/test_restaurant_service.py @@ -1,5 +1,6 @@ import os from unittest.mock import patch +import unittest from app.dto.get_recommendation_request import Get_recommendation_request from app.dto.get_recommendation_response import Get_recommendation_response @@ -15,24 +16,18 @@ } ] -mock_genAI_recommendation = """{'place_name': 'Mock Restaurant', 'category_name': 'Food > Korean', 'place_url': 'http://mock.restaurant', 'distance': '100', 'road_address_name': 'Mock Address'}""" - -mock_metadata = { - 'total_count': 1 -} +mock_genAI_recommendation = """[{'place_name': 'Mock Restaurant', 'category_name': 'Food > Korean', 'place_url': 'http://mock.restaurant', 'distance': '100', 'road_address_name': 'Mock Address'}]""" +mock_metadata = {'is_end': False, 'pageable_count': 45, 'same_name': {'keyword': '음식점', 'region': [], 'selected_region': ''}, 'total_count': 1} os.environ['KAKAO_API_KEY'] = 'mock_api_key' -@patch('app.service.restaurant_service.get_kakao_search_result') -@patch('app.service.restaurant_service.get_genAI_recommendation') -@patch('app.service.restaurant_service.get_kakao_search_metadata') +@patch('app.service.restaurant_service.get_kakao_search_result', return_value=mock_kakao_result) +@patch('app.service.restaurant_service.get_genAI_recommendation', return_value=mock_genAI_recommendation) +@patch('app.service.restaurant_service.get_kakao_search_metadata', return_value=mock_metadata) def test_get_restaurant_recommendation(mock_get_genAI_recommendation, mock_get_kakao_search_result, mock_get_kakao_search_metadata): - mock_get_kakao_search_result.return_value = mock_kakao_result - mock_get_genAI_recommendation.return_value = mock_genAI_recommendation - mock_get_kakao_search_metadata.return_value = mock_metadata get_recommendation_req = Get_recommendation_request( longitude="127.06283102249932", @@ -41,13 +36,11 @@ def test_get_restaurant_recommendation(mock_get_genAI_recommendation, tag=None ) - response = get_restaurant_recommendation(get_recommendation_req) - expected_response = Get_recommendation_response( - title='Mock Restaurant', - category='Food > Korean', - link='http://mock.restaurant', - distance='100', - address='Mock Address' - ) - - assert response == expected_response + return get_restaurant_recommendation(get_recommendation_req) +class TestRestaurantServices(unittest.TestCase): + def test_get_restaurant_recommendation(self): + response = test_get_restaurant_recommendation() + print(response) + self.assertIsInstance(response, list) + self.assertIsInstance(response[0], Get_recommendation_response) + self.assertEqual(response[0].title, 'Mock Restaurant')