
    i                        d Z ddlZddlmZ ddlmZmZmZ ddlZej                  j                  d e ee      j                  j                               ddlmZmZ d Zd Zd Zd	 Zej*                  j,                  d
        Zej*                  j,                  d        Zej*                  j,                  d        Zej*                  j,                  d        Zej*                  j,                  d        Zy)ua   
TDD: test_browser_remote_cdp.py
browser.py의 --remote-cdp 옵션에 대한 테스트 스위트
    N)Path)	AsyncMock	MagicMockpatch)build_parserget_pagec                      t               } t        j                  t              5  | j	                  dg       ddd       | j	                  g d      }t        |d      sJ |j                  dk(  sJ y# 1 sw Y   <xY w)u4   build_parser에 --remote-cdp 옵션이 있어야 함z--helpN)--remote-cdphttp://localhost:9222navigatehttps://example.com
remote_cdpr   )r   pytestraises
SystemExit
parse_argshasattrr   parserargss     V/home/jay/workspace/.worktrees/task-2116-dev1/scripts/tests/test_browser_remote_cdp.pytest_remote_cdp_option_existsr      sp    ^F	z	" &8*%& ijD4&&&??5555& &s   A22A;c                  Z    t               } | j                  ddg      }|j                  J y)u+   --remote-cdp 기본값이 None이어야 함r   r   Nr   r   r   r   s     r   test_remote_cdp_default_is_noner   #   s/    ^Fj*?@AD??"""    c                  h    t               } d}| j                  d|ddg      }|j                  |k(  sJ y)u8   --remote-cdp가 URL 형식의 값을 받아들여야 함http://100.116.204.95:9222r
   r   r   Nr   )r   test_urlr   s      r   test_remote_cdp_accepts_urlr    *   s:    ^F+Hnh
DYZ[D??h&&&r   c                      t               } | j                  g d      }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y)uC   --remote-cdp가 다른 옵션과 함께 사용될 수 있어야 함)r
   r   r   r   z	--timeout30000z
--viewport	1920x1080r   i0u  r#   N)r   r   r   timeoutviewportr   s     r   (test_remote_cdp_works_with_other_optionsr&   2   sW    ^F		
D ??5555<<5   ==K'''r   c                    K   t               } d| _        d| _        d| _        d| _        d| _        t               }t               }t               }t               }t        |      |j                  _        |g|_	        |g|_
        t               |_        t               |_        t        ||        d{   \  }}|j                  j                  j                  d       ||k(  sJ y7 4w)u9   remote_cdp가 제공되면 원격 CDP에 연결해야 함r   '  1280x720Freturn_valueN)r   r   r$   r%   stealthblock_resourcesr   chromiumconnect_over_cdpcontextspagesset_default_timeoutset_viewport_sizer   assert_called_once_withr   mock_pwmock_browsermock_context	mock_pagebrowserpages          r   +test_get_page_uses_remote_cdp_when_providedr<   K   s      ;D2DODLDMDL D kG;L;LI )2|(LG%)NL#L$-KI!"++I #7D11MGT %%==>Z[ 9 2s   B.C'0C%15C'c                    K   t               } d| _        d| _        d| _        d| _        d| _        t               }t               }t               }t               }t        |      |j                  _        g |_	        t        |      |_
        |g|_        t               |_        t               |_        t        ||        d{   \  }}|j                  j                          ||k(  sJ y7 )w)uH   원격 브라우저에 컨텍스트가 없으면 새로 생성해야 함r   r(   r)   Fr*   N)r   r   r$   r%   r,   r-   r   r.   r/   r0   new_contextr1   r2   r3   r   assert_called_oncer5   s          r   0test_get_page_creates_new_context_if_no_contextsr@   m   s      ;D-DODLDMDL DkG;L;LI(1|(LG%L(lCL#L$-KI!"++I"7D11MGT //19	 2   B>C, C**C,c                    K   t               } d| _        d| _        d| _        d| _        d| _        t               }t               }t               }t               }t        |      |j                  _        |g|_	        g |_
        t        |      |_        t               |_        t               |_        t        ||        d{   \  }}|j                  j                          ||k(  sJ y7 )w)u>   컨텍스트에 페이지가 없으면 새로 생성해야 함r   r(   r)   Fr*   N)r   r   r$   r%   r,   r-   r   r.   r/   r0   r1   new_pager2   r3   r   r?   r5   s          r   *test_get_page_creates_new_page_if_no_pagesrD      s      ;D-DODLDMDL DkG;L;LI(1|(LG%)NLL%9=L$-KI!"++I"7D11MGT ,,.9	 2rA   c                    K   t               } d| _        d| _        d| _        d| _        d| _        t               }t               }t               }t               }t        |      |j                  _        |g|_	        |g|_
        t               |_        t               |_        t               |_        t        ||        d{   \  }}|j                  j                          ||k(  sJ y7 )w)uG   block_resources가 활성화되면 리소스 차단을 적용해야 함r   r(   r)   FTr*   N)r   r   r$   r%   r,   r-   r   r.   r/   r0   r1   r2   r3   router   r?   r5   s          r   2test_get_page_applies_block_resources_when_enabledrG      s      ;D-DODLDMDLDkG;L;LI(1|(LG%)NL#L$-KI!"++IkIO"7D11MGT OO&&(9	 2s   B=C+?C) *C+c                  $  K   t               } d| _        d| _        d| _        d| _        d| _        t               }t        dd      5  t        dd      5  t        d	      5  t               }t               }t               }t        |      |j                  _	        g |_
        t        |      |_        g |_        t        |      |_        t               |_        t               |_        t!        ||        d{   \  }}|j                  j                  j#                          |j                  j                  j$                  d
   d
   }d|v sJ 	 ddd       ddd       ddd       y7 q# 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   yxY ww)uG   remote_cdp가 없으면 기존 로컬 Chrome 로직을 사용해야 함Nr(   r)   Fzbrowser.load_sessionr*   zbrowser.launch_chromei90  zbrowser.save_sessionr   z	127.0.0.1)r   r   r$   r%   r,   r-   r   r   r.   r/   r0   r>   r1   rC   r2   r3   r   r?   	call_args)r   r6   r7   r8   r9   r:   r;   call_args           r   2test_get_page_uses_local_chrome_when_no_remote_cdprK      sf     ;DDODLDMDL DkG 
%D	9 /*? 	/-. /({({%K	4=<4X  1(*%+4,+O(%'"(1y(I%09	-.7k	+&.w&= =   11DDF"++<<FFqI!L"h...%/	// / !>/ /	/ 	// /sb   AFFE8!BE,8E*
9AE,E8F!	F*E,,E51E88F	=FF	F)__doc__syspathlibr   unittest.mockr   r   r   r   pathinsertstr__file__parentr:   r   r   r   r   r    r&   markasyncior<   r@   rD   rG   rK    r   r   <module>rX      s   
   5 5  3tH~,,334 5 *
6#'(2  B  8  8  8  /  /r   