§
    †–jÝ  ã                   ó°   — d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ ddlmZ ddlmZ  G d„ dej        ¦  «        Zed	k    r ej        ¦   «          dS dS )
z:Automated test suite for AI Agent Budget & Token Tracking.é    N)Ú
TestClient)Úget_current_user)ÚErpDatabaseClient)Ú
create_appc                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestAIAgentBudgetServicec                 ó„   — t          ¦   «         | _        t          | j        ¦  «        | _        t	          ¦   «         | _        d S )N)r   Úappr   Úclientr   Ú
erp_client)Úselfs    ú8C:\Projects\DSCons\tests\test_ai_agent_budget_service.pyÚsetUpzTestAIAgentBudgetService.setUp   s/   € Ý‘<”<ˆŒÝ  ¤Ñ*Ô*ˆŒÝ+Ñ-Ô-ˆŒˆˆó    c                 ó,  — i | j         _        | j                             ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )NzYDELETE FROM erp_ai_agent_usage_logs WHERE query_preview = 'Test automated budget logging')r
   Údependency_overridesr   Úget_connectionÚcursorÚexecuteÚcommit)r   ÚconnÚcurs      r   ÚtearDownz!TestAIAgentBudgetService.tearDown   s   € Ø(*ˆŒÔ%ØŒ_×+Ò+Ñ-Ô-ð 	°°t·{²{±}´}ð 	ÈØ�KŠKÐsÑtÔtÐtØ�KŠK‰MŒMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s4   ¦B	»*A1Á%B	Á1A5	Á5B	Á8A5	Á9B	Â	BÂBc                 óp   — | j                              d¦  «        }|                      |j        d¦  «         dS )u1   Khi chÆ°a Ä‘Äƒng nháº­p, endpoint tráº£ vá»� 401.ú/v1/agents/budget-summaryi‘  N)r   ÚgetÚassertEqualÚstatus_code)r   Úresponses     r   Ú test_unauthorized_budget_summaryz9TestAIAgentBudgetService.test_unauthorized_budget_summary   s5   € à”;—?’?Ð#>Ñ?Ô?ˆØ×Ò˜Ô-¨sÑ3Ô3Ð3Ð3Ð3r   c                 óä  — d„ | j         j        t          <   | j                             d¦  «        }|                      |j        d¦  «         |                     ¦   «         }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |d         }|  	                    t          |¦  «        d	¦  «         t          d
„ |D ¦   «         d¦  «        }|                      |¦  «         |                      |d         d¦  «         dD ]ª}|                      ||¦  «         ||         }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      |d         d¦  «         Œ«dS )u`   Khi Ä‘Ã£ Ä‘Äƒng nháº­p, tráº£ vá»� báº£ng tá»•ng há»£p ngÃ¢n sÃ¡ch 9 AI agents chuáº©n contract.c                  ó   — ddddœS )Nzadmin-test-idzadmin@dscons.vnÚ
superadmin)ÚidÚemailÚrole© r'   r   r   ú<lambda>zITestAIAgentBudgetService.test_authorized_budget_summary.<locals>.<lambda>   s   € Ø!Ø&Ø ðC
ð C
€ r   r   éÈ   ÚagentsÚtotal_spent_today_vndÚtotal_spent_week_vndÚtotal_spent_month_vndÚtotal_spent_year_vndé	   c              3   ó2   K  — | ]}|d          dk    ¯|V — ŒdS )Ú
agent_codeÚminhNr'   )Ú.0Úas     r   ú	<genexpr>zJTestAIAgentBudgetService.test_authorized_budget_summary.<locals>.<genexpr>3   s0   è è € ÐDÐD˜1¨!¨L¬/¸VÒ*CÐ*C�QÐ*CÐ*CÐ*CÐ*CÐDÐDr   NÚdisplay_nameÚMinh)ÚdayÚweekÚmonthÚyearÚ	spent_vndÚ
budget_vndÚ
percentageÚtokensÚrequests_countr   )r
   r   r   r   r   r   r   ÚjsonÚassertInÚassertGreaterEqualÚlenÚnextÚassertIsNotNoneÚassertGreater)r   r   Údatar*   r2   ÚperiodÚp_datas          r   Útest_authorized_budget_summaryz7TestAIAgentBudgetService.test_authorized_budget_summary   sì  € ð;
ð ;
ˆŒÔ%Õ&6Ñ7ð ”;—?’?Ð#>Ñ?Ô?ˆØ×Ò˜Ô-¨sÑ3Ô3Ð3Ø�}Š}‰Œˆà�Š�h Ñ%Ô%Ð%Ø�ŠÐ-¨tÑ4Ô4Ð4Ø�ŠÐ,¨dÑ3Ô3Ð3Ø�ŠÐ-¨tÑ4Ô4Ð4Ø�ŠÐ,¨dÑ3Ô3Ð3à�h”ˆØ×Ò¥ F¡¤¨QÑ/Ô/Ð/õ ÐDÐD ÐDÑDÔDÀdÑKÔKˆØ×Ò˜TÑ"Ô"Ð"Ø×Ò˜˜nÔ-¨vÑ6Ô6Ð6ð 7ð 	8ð 	8ˆFØ�MŠM˜& $Ñ'Ô'Ð'Ø˜&”\ˆFØ�MŠM˜+ vÑ.Ô.Ð.Ø�MŠM˜,¨Ñ/Ô/Ð/Ø�MŠM˜,¨Ñ/Ô/Ð/Ø�MŠM˜( FÑ+Ô+Ð+Ø�MŠMÐ*¨FÑ3Ô3Ð3Ø×Ò˜v lÔ3°QÑ7Ô7Ð7Ð7ð	8ð 	8r   c           	      ó¼  — | j                              d¬¦  «        }|d         d         }|d         d         }|d         d         }| j                              ddd	d
ddd¬¦  «         | j                              d¬¦  «        }|d         d         }|                      |d         d         |dz   d¬¦  «         |                      |d         d         |dz   ¦  «         dS )u\   Ghi nháº­n usage má»›i vÃ  kiá»ƒm tra sá»‘ tiá»�n / token Ä‘Æ°á»£c cá»™ng dá»“n chÃ­nh xÃ¡c.r2   )r1   r*   r   r8   r<   r?   Ú
test_auditiô  i,  g      D@ztester@dscons.vnzTest automated budget logging)r1   Ú	task_typeÚprompt_tokensÚcompletion_tokensÚcost_vndÚ
user_emailÚquery_previewé   )Úplacesi   N)r   Úget_ai_agent_budget_summaryÚlog_ai_agent_usageÚassertAlmostEqualr   )r   Úinitial_summaryÚminh_initialÚinitial_day_spentÚinitial_day_tokensÚupdated_summaryÚminh_updateds          r   Útest_log_and_recalculate_usagez7TestAIAgentBudgetService.test_log_and_recalculate_usageB   s  € àœ/×EÒEÐQWÐEÑXÔXˆØ& xÔ0°Ô3ˆØ(¨Ô/°Ô<ÐØ)¨%Ô0°Ô:Ðð 	Œ×*Ò*ØØ"ØØ!ØØ)Ø9ð 	+ñ 	
ô 	
ð 	
ð œ/×EÒEÐQWÐEÑXÔXˆØ& xÔ0°Ô3ˆà×ÒØ˜Ô Ô,Ð.?À$Ñ.FÈqð 	ñ 	
ô 	
ð 	
ð 	×Ò˜ eÔ,¨XÔ6Ð8JÈSÑ8PÑQÔQÐQÐQÐQr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r    rK   r_   r'   r   r   r   r      se   € € € € € ð.ð .ð .ð
ð ð ð4ð 4ð 4ð
#8ð #8ð #8ðJRð Rð Rð Rð Rr   r   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚfastapi.testclientr   Ú"app.modules.auth.presentation.authr   Úapp.core.postgres.erp_clientr   Úapp.mainr   ÚTestCaser   r`   Úmainr'   r   r   ú<module>rr      sÚ   ðØ @Ð @à  € € € € € € € € € € € € €€€€à )Ð )Ð )Ð )Ð )Ð )à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð ðNRð NRð NRð NRð NR˜xÔ0ñ NRô NRð NRðb ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   