
    Si+                          d Z ddlZddlZddlZddlmZ ddlZ eej                  j                  dd            Z	 G d d      Z
 G d d	      Z G d
 d      Zy)u   대시보드 Todo 탭 전환 기능 테스트 (task-871.1)

Playwright를 사용하여 데스크탑 + 모바일 뷰포트에서 탭 전환 기능을 검증합니다.
    N)PathWORKSPACE_ROOTz/home/jay/workspacec                       e Zd ZdZ ej
                  d      d        Zej                  j                  dd       Z	ej                  j                  dd       Z
ddZdd	Zdd
ZddZy)TestTodoTabSwitchingu!   Todo 탭 전환 기능 테스트.T)autousec                     t        j                  g ddd      }|j                  dk7  rt        j                  d       yy)u   서버 실행 확인.)curl-sz-oz	/dev/nullz-wz%{http_code} http://localhost:8000/dashboard/Tcapture_outputtext200z)Dashboard server not running on port 8000N)
subprocessrunstdoutpytestskip)selfresults     O/home/jay/workspace/.worktrees/task-2117-dev1/tests/test_dashboard_todo_tabs.pysetup_serverz!TestTodoTabSwitching.setup_server   s;     g

 ==E!KKCD "    Nc                    K   ddl m}  |       4 d{   }|j                  j                          d{   }|j	                  ddd       d{   }|j                  dd	
       d{    t        j                  d       d{    |j                  d       d{    t        j                  d       d{    |j                  d      }|j                          d{    t        j                  d       d{    |j                  ddd      }|j                          d{    t        j                  d       d{    |j                  d      }|j                          d{    t        j                  d       d{    |j                          d{    ddd      d{    y7 7 7 w7 _7 E7 /7 7 7 7 7 7 g7 L7 67 (# 1 d{  7  sw Y   yxY ww)u2   데스크탑 뷰포트에서 탭 전환 테스트.r   async_playwrightN      widthheightviewportr   load
wait_until      button:has-text("프로젝트")      button:has-text("완료")button   전체Tnameexactu   button:has-text("진행중")playwright.async_apir   chromiumlaunchnew_pagegotoasynciosleepclicklocatorget_by_roleclose)r   r   pbrowserpagedone_button
all_buttonactive_buttons           r   test_desktop_tab_switchingz/TestTodoTabSwitching.test_desktop_tab_switching   s     	:#% 	" 	"JJ--//G ))TS3Q)RRD))>6)RRR--""" **>???--""" ,,'BCK##%%%--""" ))()NJ""$$$--""" !LL)GHM%%'''--"""--/!!5	" 	" 	"/RR" @" &" %" ("!5	" 	" 	" 	"s,  G>GG>G)GG)G
G).G/G)GG)$G%G)G(G)*G+G)G+G)3G4G)G(G)9G!:G)G#G).G%/G)3G>>G'?G>G)
G)G)G)G)G)G)G)G)G)!G)#G)%G)'G>)G;/G20G;7G>c                 f  K   ddl m}  |       4 d{   }|j                  j                          d{   }|j	                  ddd       d{   }|j                  dd	
       d{    t        j                  d       d{    |j                  d       d{    t        j                  d       d{    |j                  d      }|j                          d{    t        j                  d       d{    |j                  ddd      }|j                          d{    t        j                  d       d{    |j                          d{    ddd      d{    y7 j7 K7 17 7 7 7 7 7 7 `7 E7 /7 !# 1 d{  7  sw Y   yxY ww)u/   모바일 뷰포트에서 탭 전환 테스트.r   r   Niw  i,  r   r"   r   r$   r%   r'   r(   r)   r*   r+   r,   Tr-   r0   )r   r   r<   r=   r>   r?   r@   s          r   test_mobile_tab_switchingz.TestTodoTabSwitching.test_mobile_tab_switching?   sv     	:#% 	" 	"JJ--//G ))SC3P)QQD))>6)RRR--""" **>???--""" ,,'BCK##%%%--""" ))()NJ""$$$--"""--/!!+	" 	" 	"/QR" @" &" %"!+	" 	" 	" 	"s  F1E>F1FFFFF.F/FF
F$F%FF(F*F+FF+F3F4FFF(F)F-F18F9F1FFF
FFFFFFFFF1F."F%#F.*F1c                     t        j                  g ddd      }ddl}|j                  |j                        }|j                  dg       }t        |      dkD  sJ d       y)u2   API가 전체 이슈를 반환하는지 테스트.r	   r
   z)http://localhost:8000/api/todo?status=allTr   r   Nissuesu#   전체 이슈가 0건이면 안 됨r   r   jsonloadsr   getlen)r   r   rI   datarG   s        r   test_api_status_allz(TestTodoTabSwitching.test_api_status_all[   sV    G

 	zz&--((B'6{QE EEr   c                     t        j                  g ddd      }ddl}|j                  |j                        }|j                  dg       }t        |      dk\  sJ d       |D ]  }|j                  d      d	v rJ  y)
u2   API가 완료 이슈만 반환하는지 테스트.r	   r
   z*http://localhost:8000/api/todo?status=doneTr   r   NrG   u!   완료 이슈 목록이어야 함statusdone	completedrH   r   r   rI   rM   rG   issues         r   test_api_status_donez)TestTodoTabSwitching.test_api_status_doneh   s    H

 	zz&--((B'6{aD!DD 	@E99X&*????	@r   c                     t        j                  g ddd      }ddl}|j                  |j                        }|j                  dg       }t        |      dkD  sJ d       |D ]  }|j                  d      d	vrJ  y)
uB   API가 기본적으로 active 이슈만 반환하는지 테스트.r	   r
   zhttp://localhost:8000/api/todoTr   r   NrG   u#   활성 이슈가 0건이면 안 됨rQ   rR   rH   rU   s         r   test_api_status_defaultz,TestTodoTabSwitching.test_api_status_defaultw   s    <

 	zz&--((B'6{QE EE 	DE99X&.CCCC	Dr   c                    ddl }t        j                  g ddd      }t        |j	                  |j
                        j                  dg             }t        j                  g ddd      }t        |j	                  |j
                        j                  dg             }t        j                  g ddd      }t        |j	                  |j
                        j                  dg             }|||z   k(  sJ d	| d
| d| d       y)uI   전체 이슈 = 활성 이슈 + 완료 이슈 수학적 일관성 검증.r   NrF   Tr   rG   rP   rY   u   전체(u   ) != 활성(u   ) + 완료())rI   r   r   rL   rJ   r   rK   )r   rI   r_all	all_countr_done
done_countr_activeactive_counts           r   !test_api_status_counts_consistentz6TestTodoTabSwitching.test_api_status_counts_consistent   s     GX\cg
 

5<<044XrBC	HY]dh
 FMM266xDE
>>"Rcgnrs4::hoo6::8RHIL:55~<XdWeepq{p||}7~~5r   returnN)__name__
__module____qualname____doc__r   fixturer   markr6   rB   rD   rN   rW   rZ   rc    r   r   r   r      sy    +V^^D!E "E [[" "@ [[" "6F@Dr   r   c                       e Zd ZdZej
                  j                  dd       Zej
                  j                  dd       Zy)TestButtonStylesu   버튼 스타일 테스트.Nc                   K   ddl m}  |       4 d{   }|j                  j                          d{   }|j	                  ddd       d{   }|j                  dd	
       d{    t        j                  d       d{    |j                  d       d{    t        j                  d       d{    |j                  d      }|j                  d       d{   }|J d       d|v s
J d|        |j                          d{    ddd      d{    y7 7 7 7 7 7 7 {7 S7 &7 # 1 d{  7  sw Y   yxY ww)u:   버튼에 cursor-pointer 클래스가 있는지 테스트.r   r   Nr   r   r   r"   r   r$   r%   r'   r(   r)   r*   classButton has no class attributezcursor-pointerz'Expected cursor-pointer in class, got: r1   r   r2   r3   r4   r5   r6   r7   r8   r9   get_attributer;   r   r   r<   r=   r>   r?   
class_names          r   test_button_cursor_pointerz+TestButtonStyles.test_button_cursor_pointer   sL     	:#% 	" 	"JJ--//G ))TS3Q)RRD))>6)RRR--""" **>???--""" ,,'BCK*88AAJ)J+JJ)#z1i5\]g\h3ii1--/!!#	" 	" 	"/RR" @" B "#	" 	" 	" 	"   ED0EED3ED5E.D7/ED9E$D;%ED=)E+D?,.EEEE*E+E3E5E7E9E;E=E?EEEEEEEc                   K   ddl m}  |       4 d{   }|j                  j                          d{   }|j	                  ddd       d{   }|j                  dd	
       d{    t        j                  d       d{    |j                  d       d{    t        j                  d       d{    |j                  d      }|j                  d       d{   }|J d       d|v s
J d|        |j                          d{    ddd      d{    y7 7 7 7 7 7 7 {7 S7 &7 # 1 d{  7  sw Y   yxY ww)u/   버튼에 최소 높이가 있는지 테스트.r   r   Nr   r   r   r"   r   r$   r%   r'   r(   r)   r*   rp   rq   zmin-hzExpected min-h in class, got: rr   rt   s          r   test_button_min_heightz'TestButtonStyles.test_button_min_height   sJ     	:#% 	" 	"JJ--//G ))TS3Q)RRD))>6)RRR--""" **>???--""" ,,'BCK*88AAJ)J+JJ)j(W,J:,*WW(--/!!#	" 	" 	"/RR" @" B "#	" 	" 	" 	"rw   rd   )	rf   rg   rh   ri   r   rk   r6   rv   ry   rl   r   r   rn   rn      s?    %[[" ". [[" "r   rn   c                       e Zd ZdZddZy)TestServiceWorkerCacheu    Service Worker 캐시 테스트.Nc                     t        t        dz  dz  d      5 }|j                         }ddd       ddl}|j	                  d      sJ d       y# 1 sw Y   'xY w)	uA   Service Worker 캐시 버전이 올바른 형식인지 테스트.	dashboardzsw.jszutf-8)encodingNr   zdashboard-v\d+u.   CACHE_NAME이 dashboard-vN 패턴이어야 함)open
_WORKSPACEreadresearch)r   fcontentr   s       r   test_cache_version_updatedz1TestServiceWorkerCache.test_cache_version_updated   sX    *{*W4wG 	1ffhG	 	yy*G4f6ff4	 	s   AArd   )rf   rg   rh   ri   r   rl   r   r   r{   r{      s    *gr   r{   )ri   r6   osr   pathlibr   r   environrK   r   r   rn   r{   rl   r   r   <module>r      s\   
  	   "**..!13HIJ
G GT1" 1"h
g 
gr   