
    J*i                     Z    d Z ddlZddlmc mZ ddlmZmZ de	de
de	fdZ G d d	      Zy)
u   finish-task.sh의 member-status.json 복원 로직 테스트.

finish-task.sh 내부 인라인 Python 로직을 함수로 추출하여 테스트.
    N)datetimetimezonedatatask_idreturnc                 x   t        j                  t        j                        j	                  d      }d}| j                  di       j                         D ][  \  }}|j                  d      dv s|j                  dd      xs d}||v s|r|j                  d      dk(  sKd	|d<   ||d
<   d|d<   d}] |r|| d<   | S )u7   finish-task.sh L277~304 인라인 Python 로직 추출.z%Y-%m-%dT%H:%M:%SZFmembersstatus)workingstandbytask r   idlesinceNT
updated_at)r   nowr   utcstrftimegetitems)r   r   r   changed_info	task_descs          7/home/jay/workspace/tests/test_member_status_restore.pyrestore_member_statusr      s    
,,x||
$
-
-.B
CCG88Ir*002 488H!77,2I)#98Ji8W!'X #W#V  \K    c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestMemberStatusRestorec                 f   ddddddddddi}t        |d      }|d   d	   d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d	   d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}y)u/   시나리오 1: standby 팀원 → idle 복원.r	   r   2026-01-01T00:00:00ZNr
   r   r   z	some-info)member-1member-2	test-taskr#   r
   r   ==z%(py1)s == %(py4)spy1py4assert %(py6)spy6r$   r   )is)z%(py1)s is %(py4)sr   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationselfr   result@py_assert0@py_assert3@py_assert2@py_format5@py_format7s           r   %test_standby_members_restored_to_idlez=TestMemberStatusRestore.test_standby_members_restored_to_idle   s    '0;Q[_`'0;Q[fg
 't[9i ,X6@&@6&@@@@6&@@@6@@@&@@@@@@@i ,X6@&@6&@@@@6&@@@6@@@&@@@@@@@i ,V4<<4<<<<4<<<4<<<<<<<<<<i ,V4<<4<<<<4<<<4<<<<<<<<<<r   c                 <   ddddddii}t        |d      }|d   d   d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}y)u6   시나리오 2: working + 매칭 task → idle 복원.r	   workerr   r!   ztask-123r"   r
   r   r&   r(   r)   r,   r-   Nr/   r5   s           r   /test_working_member_with_matching_task_restoredzGTestMemberStatusRestore.test_working_member_with_matching_task_restored(   s     Y9OYcd

 'tZ8i *84>>4>>>>4>>>4>>>>>>>>>>r   c                 H   ddddddii}t        |d      }|d   d   d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}y)u1   시나리오 3: working + 다른 task → 유지.r	   otherr   r!   z
OTHER-TASKr"   r%   r
   r&   r(   r)   r,   r-   Nr   r/   r5   s           r   4test_working_member_with_non_matching_task_preservedzLTestMemberStatusRestore.test_working_member_with_non_matching_task_preserved2   s     I8NXde

 't[9i )(3@y@3y@@@@3y@@@3@@@y@@@@@@@i )&1A\A1\AAAA1\AAA1AAA\AAAAAAAr   c                    ddddddii}t        |d      }|d   d   d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}d}||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t	        t        j
                  |	            dx}}y)u   idle 팀원은 영향 없음.r	   idlerr   r!   Nr"   r%   r
   r&   r(   r)   r,   r-   r   )not in)z%(py1)s not in %(py3)sr7   )r*   py3zassert %(py5)spy5)	r   r0   r1   r2   r3   r4   @py_builtinslocals_should_repr_global_name)
r6   r   r7   r8   r9   r:   r;   r<   @py_format4@py_format6s
             r   test_idle_member_not_affectedz5TestMemberStatusRestore.test_idle_member_not_affected=   s     F5KUYZ

 't[9i )(3=v=3v====3v===3===v=======)|6))))|6)))|))))))6)))6)))))))r   c                 <   ddddddii}t        |d      }|d   d   d   }d	}||k(  }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}y)u#   working + 빈 task → idle 복원.r	   r?   r   r!   r   r"   r%   r
   r   r&   r(   r)   r,   r-   Nr/   r5   s           r   ,test_working_member_with_empty_task_restoredzDTestMemberStatusRestore.test_working_member_with_empty_task_restoredH   s     Y9OY[\

 't[9i *84>>4>>>>4>>>4>>>>>>>>>>r   c                 ~   dddddddddddddd	dddd
i}t        |d      }|d   d   d   }d	}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d   }d	}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}|d   d   d   }d	}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            dx}x}}y)uE   혼합 상태: standby + working(매칭) + working(비매칭) + idle.r	   r   r!   Nr"   r   ztask-abcOTHERr   )	standby-mworking-matchworking-otheridle-mrS   r
   r&   r(   r)   r,   r-   rT   rU   rV   r/   r5   s           r   test_mixed_statusesz+TestMemberStatusRestore.test_mixed_statusesR   s    (1<R\`a,5@V`j!k,5@V`g!h%+6LVZ[	
 'tZ8i -h7A6A76AAAA76AAA7AAA6AAAAAAAi 1(;EvE;vEEEE;vEEE;EEEvEEEEEEEi 1(;HyH;yHHHH;yHHH;HHHyHHHHHHHi *84>>4>>>>4>>>4>>>>>>>>>>r   N)	__name__
__module____qualname__r=   r@   rC   rN   rP   rW    r   r   r   r      s!    =?	B	*??r   r   )__doc__builtinsrI   _pytest.assertion.rewrite	assertionrewriter0   r   r   dictstrr   r   r[   r   r   <module>rc      s:      ' s t "G? G?r   