Ë
    ÛJêjV  ã                   ó&  — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZmZmZ ddlmZmZmZ ej$                  defd„«       Zej$                  de
fd„«       Z G d„ d	«      Z G d
„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy)zTests for ApprovalManager.é    N)ÚApprovalDecisionÚApprovalManagerÚApprovalRecordÚApprovalRequestÚApprovalStatus)ÚAgentIdentityÚPermissionScopeÚ
TrustLevelÚreturnc                  óZ   — t        ddt        j                  t        j                  h¬«      S )Núagent-1Úcoder)Úagent_idÚroleÚtrust_levelÚscopes)r   r
   ÚTRUSTEDr	   ÚSHELL© ó    ú>/home/oem/CyberBrain26-unified/tests/test_security_approval.pyÚagentr      s*   € äØØÜ×&Ñ&Ü×%Ñ%Ð&ô	ð r   c                  ó   — t        «       S )N)r   r   r   r   Úmanagerr      s   € äÓÐr   c                   óH   — e Zd Zdededdfd„Zdededdfd„Zdededdfd„Zy)ÚTestCreateRequestr   r   r   Nc                 óª	  — |j                  |dd«      }t        |t        «      }|�sddt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d }|j                  }d}||k(  }|s­t        j                  d|fd	||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}|j                  }t        j                  }
||
k(  }|söt        j                  d|fd||
f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}
|j                   }||k(  }|sÚt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      nd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 )NÚexecute_shellú/bin/rmú5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstanceÚrequestr   ©Úpy0Úpy1Úpy2Úpy4©ú==)z.%(py2)s
{%(py2)s = %(py0)s.action
} == %(py5)s©r$   r&   Úpy5úassert %(py7)sÚpy7)z0%(py2)s
{%(py2)s = %(py0)s.resource
} == %(py5)s)zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PENDING
}r   ©r$   r&   r'   Úpy6úassert %(py8)sÚpy8)z-%(py2)s
{%(py2)s = %(py0)s.agent
} == %(py4)sr   )r$   r&   r'   zassert %(py6)sr/   )Úcreate_requestr!   r   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚactionÚ_call_reprcompareÚresourceÚstatusr   ÚPENDINGr   )Úselfr   r   r"   Ú@py_assert3Ú@py_format5Ú@py_assert1Ú@py_assert4Ú@py_format6Ú@py_format8Ú@py_assert5Ú@py_format7Ú@py_format9s                r   Ú#test_create_request_returns_requestz5TestCreateRequest.test_create_request_returns_request#   s�  € ð ×(Ñ(¨°ÀÓKˆÜ˜'¤?Ó3Ð3Ò3×3×3×3×3Õ3Œz×3×3Ó3Œz×3×3×3×3×3Ò3˜'×3×3Ó3˜'×3×3×3×3×3Ò3¤?×3×3Ó3¤?×3×3Ô3Ð3×3×3×3×3×3Ð3Ø�~‰~Ð0 Ð0ˆ~ Ñ0×0×0Õ0ˆ~ ×0×0×0×0×0Ñ0ˆw×0×0Ó0ˆw×0×0Ô0ˆ~×0×0Ò0 ×0×0×0×0×0×0Ó0Ø×ÑÐ, 9Ð,Ð 9Ñ,×,×,Õ,Ð 9×,×,×,×,×,Ñ,ˆw×,×,Ó,ˆw×,×,Ô,Ð×,×,Ò, 9×,×,×,×,×,×,Ó,Ø�~‰~Ð7¤×!7Ñ!7Ð7ˆ~Ð!7Ñ7×7×7Õ7ˆ~Ð!7×7×7×7×7×7Ñ7ˆw×7×7Ó7ˆw×7×7Ô7ˆ~×7×7×7×7×7Ð7¤×7×7Ó7¤×7×7Ô7Ð!7×7×7×7×7×7×7Ó7Ø�}‰}Ð%ˆ} Ñ%×%×%Õ%ˆ} ×%×%×%×%×%Ñ%ˆw×%×%Ó%ˆw×%×%Ô%ˆ}×%×%×%×%×%Ð% ×%×%Ó% ×%×%×%×%×%×%Ô%r   c                 ór  — |j                  |d«      }|j                  |d«      }|j                  }|j                  }||k7  }|sît        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}y )	Nr   )ú!=)zR%(py2)s
{%(py2)s = %(py0)s.request_id
} != %(py6)s
{%(py6)s = %(py4)s.request_id
}Úr1Úr2r.   r0   r1   )
r2   Ú
request_idr5   r;   r3   r4   r6   r7   r8   r9   )
r?   r   r   rL   rM   rB   rF   r@   rG   rH   s
             r   Ú!test_create_request_has_unique_idz3TestCreateRequest.test_create_request_has_unique_id-   s¸   € ð ×#Ñ# E¨?Ó;ˆØ×#Ñ# E¨?Ó;ˆØ�}‰}Ð- §¡Ð-ˆ} Ñ-×-×-Õ-ˆ} ×-×-×-×-×-Ñ-ˆr×-×-Ó-ˆr×-×-Ô-ˆ}×-×-×-×-×-Ð- ×-×-Ó- ×-×-Ô- ×-×-×-×-×-×-Ô-r   c                 óX  — |j                  |ddddid¬«      }|j                  }ddi}||k(  }|s­t        j                  d|fd||f«      d	t	        j
                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d|fd||f«      d	t	        j
                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )Nr   r   ÚenvÚ
productiongÍÌÌÌÌÌì?)ÚcontextÚ
risk_scorer(   )z/%(py2)s
{%(py2)s = %(py0)s.context
} == %(py5)sr"   r*   r,   r-   )z2%(py2)s
{%(py2)s = %(py0)s.risk_score
} == %(py5)s)r2   rS   r5   r;   r3   r4   r6   r7   r8   r9   rT   )	r?   r   r   r"   rB   rC   r@   rD   rE   s	            r   Ú test_create_request_with_contextz2TestCreateRequest.test_create_request_with_context4   s  € ð ×(Ñ(ØØØØ˜LÐ)Øð )ó 
ˆð �‰Ð7 5¨,Ð"7Ð7ˆÐ"7Ñ7×7×7Õ7ˆÐ"7×7×7×7×7×7Ñ7ˆw×7×7Ó7ˆw×7×7Ô7ˆ×7×7Ò7Ð"7×7×7×7×7×7×7Ó7Ø×!Ñ!Ð( SÐ(Ð! SÑ(×(×(Õ(Ð! S×(×(×(×(×(Ñ(ˆw×(×(Ó(ˆw×(×(Ô(Ð!×(×(Ò( S×(×(×(×(×(×(Ô(r   )Ú__name__Ú
__module__Ú__qualname__r   r   rI   rO   rU   r   r   r   r   r   "   sY   „ ð&Ø&ð&Ø/<ð&à	ó&ð.Ø&ð.Ø/<ð.à	ó.ð)Ø&ð)Ø/<ð)à	ô)r   r   c                   óX   — e Zd Zdededdfd„Zdeddfd„Zdededdfd„Zdededdfd„Zy)	ÚTestApprover   r   r   Nc                 ó¶  — |j                  |d«      }|j                  |j                  d«      }d }||u}|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}|j                  }t        j                  }	||	k(  }
|
söt        j                  d	|
fd
||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}	|j                  }t        j                  }	||	k(  }
|
söt        j                  d	|
fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}	|j                   }d}||k(  }
|
s­t        j                  d	|
fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}y )Nr   úuser@example.com©úis not©z%(py0)s is not %(py3)sÚresult©r$   Úpy3úassert %(py5)sr+   r(   )zL%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.APPROVED
}r   r.   r0   r1   ©zN%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.APPROVED
}r   ©z0%(py2)s
{%(py2)s = %(py0)s.reviewer
} == %(py5)sr*   r,   r-   )r2   ÚapproverN   r5   r;   r3   r4   r6   r7   r8   r9   r=   r   ÚAPPROVEDÚdecisionr   Úreviewer)r?   r   r   r"   r`   Ú@py_assert2rB   Ú@py_format4rD   rF   r@   rG   rH   rC   rE   s                  r   Útest_approve_pending_requestz(TestApprove.test_approve_pending_requestC   s$  € ð ×(Ñ(¨°Ó@ˆØ—‘ ×!3Ñ!3Ð5GÓHˆØ!Ð!ˆv˜TÐ!×!×!Õ!ˆv˜T×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ø�}‰}Ð7¤× 7Ñ 7Ð7ˆ}Ð 7Ñ7×7×7Õ7ˆ}Ð 7×7×7×7×7×7Ñ7ˆv×7×7Ó7ˆv×7×7Ô7ˆ}×7×7×7×7×7Ð7¤×7×7Ó7¤×7×7Ô7Ð 7×7×7×7×7×7×7Ó7Ø�‰Ð;Ô"2×";Ñ";Ð;ˆÐ";Ñ;×;×;Õ;ˆÐ";×;×;×;×;×;Ñ;ˆv×;×;Ó;ˆv×;×;Ô;ˆ×;×;×;×;×;Ð;Ô"2×;×;Ó;Ô"2×;×;Ô;Ð";×;×;×;×;×;×;Ó;Ø�‰Ð4Ð"4Ð4ˆÐ"4Ñ4×4×4Õ4ˆÐ"4×4×4×4×4×4Ñ4ˆv×4×4Ó4ˆv×4×4Ô4ˆ×4×4Ò4Ð"4×4×4×4×4×4×4Ô4r   c                 ór  — |j                  dd«      }d }||u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}y )	NÚnonexistentr\   ©Úis©z%(py0)s is %(py3)sr`   ra   rc   r+   )	rf   r5   r;   r3   r4   r6   r7   r8   r9   )r?   r   r`   rj   rB   rk   rD   s          r   Ú%test_approve_nonexistent_returns_nonez1TestApprove.test_approve_nonexistent_returns_noneM   sm   € ð —‘ Ð0BÓCˆØÐˆv˜ˆ~××Õˆv˜×××××Ñˆv××Óˆv××Ô˜××××××Òr   c                 óâ  — |j                  |d«      }|j                  |j                  d«       |j                  |j                  d«      }d }||u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}}y )
Nr   r\   úuser2@example.comro   rq   r`   ra   rc   r+   )r2   rf   rN   r5   r;   r3   r4   r6   r7   r8   r9   ©	r?   r   r   r"   r`   rj   rB   rk   rD   s	            r   Ú)test_approve_already_decided_returns_nonez5TestApprove.test_approve_already_decided_returns_noneS   sš   € ð ×(Ñ(¨°Ó@ˆØ�‰˜×*Ñ*Ð,>Ô?Ø—‘ ×!3Ñ!3Ð5HÓIˆØÐˆv˜ˆ~××Õˆv˜×××××Ñˆv××Óˆv××Ô˜××××××Òr   c                 ó‚	  — |j                  |dd«      }|j                  |j                  dd«       |j                  |j                  «      }d }||u}|s™t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dœz  }d	d
|iz  }t        t	        j                  |«      «      ‚d x}}t        |t        «      }	|	�sddt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  |«      rt	        j                  |«      nddt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |	«      dœz  }
t        t	        j                  |
«      «      ‚d }	|j                  }t        j                   }||k(  }	|	söt	        j
                  d|	fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}	}|j"                  }d}||k(  }	|	s­t	        j
                  d|	fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}	}|j$                  }d}||k(  }	|	s­t	        j
                  d|	fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}	}y )Nr   r   r\   ÚApprovedr]   r_   Úrecordra   rc   r+   r    r!   r   r#   r(   rd   r   r.   r0   r1   re   r*   r,   r-   ©z.%(py2)s
{%(py2)s = %(py0)s.reason
} == %(py5)s)r2   rf   rN   Ú
get_recordr5   r;   r3   r4   r6   r7   r8   r9   r!   r   rh   r   rg   ri   Úreason)r?   r   r   r"   ry   rj   rB   rk   rD   r@   rA   rF   rG   rH   rC   rE   s                   r   Útest_approve_creates_recordz'TestApprove.test_approve_creates_record[   sœ  € ð ×(Ñ(¨°ÀÓKˆØ�‰˜×*Ñ*Ð,>À
ÔKØ×#Ñ# G×$6Ñ$6Ó7ˆØ!Ð!ˆv˜TÐ!×!×!Õ!ˆv˜T×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ü˜&¤.Ó1Ð1Ò1×1×1×1×1Õ1Œz×1×1Ó1Œz×1×1×1×1×1Ò1˜&×1×1Ó1˜&×1×1×1×1×1Ò1¤.×1×1Ó1¤.×1×1Ô1Ð1×1×1×1×1×1Ð1Ø�‰Ð;Ô"2×";Ñ";Ð;ˆÐ";Ñ;×;×;Õ;ˆÐ";×;×;×;×;×;Ñ;ˆv×;×;Ó;ˆv×;×;Ô;ˆ×;×;×;×;×;Ð;Ô"2×;×;Ó;Ô"2×;×;Ô;Ð";×;×;×;×;×;×;Ó;Ø�‰Ð4Ð"4Ð4ˆÐ"4Ñ4×4×4Õ4ˆÐ"4×4×4×4×4×4Ñ4ˆv×4×4Ó4ˆv×4×4Ô4ˆ×4×4Ò4Ð"4×4×4×4×4×4×4Ó4Ø�}‰}Ð* 
Ð*ˆ} 
Ñ*×*×*Õ*ˆ} 
×*×*×*×*×*Ñ*ˆv×*×*Ó*ˆv×*×*Ô*ˆ}×*×*Ò* 
×*×*×*×*×*×*Ô*r   )	rV   rW   rX   r   r   rl   rr   rv   r}   r   r   r   rZ   rZ   B   sn   „ ð5Ø&ð5Ø/<ð5à	ó5ðØ&ðà	óðØ&ðØ/<ðà	óð
+Ø&ð
+Ø/<ð
+à	ô
+r   rZ   c                   ó4   — e Zd Zdededdfd„Zdededdfd„Zy)ÚTestDenyr   r   r   Nc                 ó(  — |j                  |d«      }|j                  |j                  dd«      }d }||u}|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}}|j                  }t        j                  }	||	k(  }
|
söt        j                  d
|
fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}	|j                  }t        j                  }	||	k(  }
|
söt        j                  d
|
fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}	y )Nr   r\   ú	Too riskyr]   r_   r`   ra   rc   r+   r(   )zJ%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.DENIED
}r   r.   r0   r1   ©zL%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DENIED
}r   )r2   ÚdenyrN   r5   r;   r3   r4   r6   r7   r8   r9   r=   r   ÚDENIEDrh   r   ©r?   r   r   r"   r`   rj   rB   rk   rD   rF   r@   rG   rH   s                r   Útest_deny_pending_requestz"TestDeny.test_deny_pending_requesti   sµ  € ð ×(Ñ(¨°Ó@ˆØ—‘˜g×0Ñ0Ð2DÀkÓRˆØ!Ð!ˆv˜TÐ!×!×!Õ!ˆv˜T×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ø�}‰}Ð5¤× 5Ñ 5Ð5ˆ}Ð 5Ñ5×5×5Õ5ˆ}Ð 5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ}×5×5×5×5×5Ð5¤×5×5Ó5¤×5×5Ô5Ð 5×5×5×5×5×5×5Ó5Ø�‰Ð9Ô"2×"9Ñ"9Ð9ˆÐ"9Ñ9×9×9Õ9ˆÐ"9×9×9×9×9×9Ñ9ˆv×9×9Ó9ˆv×9×9Ô9ˆ×9×9×9×9×9Ð9Ô"2×9×9Ó9Ô"2×9×9Ô9Ð"9×9×9×9×9×9×9Ô9r   c                 ó°  — |j                  |d«      }|j                  |j                  dd«       |j                  |j                  «      }d }||u}|s™t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dœz  }dd	|iz  }t        t	        j                  |«      «      ‚d x}}|j                  }t        j                  }	||	k(  }
|
söt	        j
                  d
|
fd||	f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |	«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}
}	|j                  }d}||k(  }
|
s­t	        j
                  d
|
fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}
}y )Nr   r\   r�   r]   r_   ry   ra   rc   r+   r(   r‚   r   r.   r0   r1   rz   r*   r,   r-   )r2   rƒ   rN   r{   r5   r;   r3   r4   r6   r7   r8   r9   rh   r   r„   r|   )r?   r   r   r"   ry   rj   rB   rk   rD   rF   r@   rG   rH   rC   rE   s                  r   Útest_deny_creates_recordz!TestDeny.test_deny_creates_recordr   s¡  € ð ×(Ñ(¨°Ó@ˆØ�‰�W×'Ñ'Ð);¸[ÔIØ×#Ñ# G×$6Ñ$6Ó7ˆØ!Ð!ˆv˜TÐ!×!×!Õ!ˆv˜T×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ø�‰Ð9Ô"2×"9Ñ"9Ð9ˆÐ"9Ñ9×9×9Õ9ˆÐ"9×9×9×9×9×9Ñ9ˆv×9×9Ó9ˆv×9×9Ô9ˆ×9×9×9×9×9Ð9Ô"2×9×9Ó9Ô"2×9×9Ô9Ð"9×9×9×9×9×9×9Ó9Ø�}‰}Ð+ Ð+ˆ} Ñ+×+×+Õ+ˆ} ×+×+×+×+×+Ñ+ˆv×+×+Ó+ˆv×+×+Ô+ˆ}×+×+Ò+ ×+×+×+×+×+×+Ô+r   )rV   rW   rX   r   r   r†   rˆ   r   r   r   r   r   h   s<   „ ð:Ø&ð:Ø/<ð:à	ó:ð,Ø&ð,Ø/<ð,à	ô,r   r   c                   óœ   — e Zd Zdededdfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdededdfd	„Z	deddfd
„Z
dededdfd„Zdededdfd„Zy)ÚTestQueryHelpersr   r   r   Nc                 óú  — |j                  |d«      }|j                  |j                  «      }||u }|sÆt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d }y )	Nr   ro   )z%(py0)s is %(py2)sÚfoundr"   )r$   r&   zassert %(py4)sr'   )r2   Úget_requestrN   r5   r;   r3   r4   r6   r7   r8   r9   )r?   r   r   r"   rŒ   rB   Ú@py_format3rA   s           r   Útest_get_requestz!TestQueryHelpers.test_get_request~   s”   € ð ×(Ñ(¨°Ó@ˆØ×#Ñ# G×$6Ñ$6Ó7ˆØ˜Ð××Õˆu˜×××××Ñˆu××Óˆu×××××Ò˜××Ó˜××××××Òr   c                 óþ  — |j                   }d} ||«      }d }||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nrn   ro   )zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_request
}(%(py4)s)
} is %(py9)sr   ©r$   r&   r'   r/   Úpy9úassert %(py11)sÚpy11)	r�   r5   r;   r3   r4   r6   r7   r8   r9   ©	r?   r   rB   r@   rF   Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12s	            r   Útest_get_request_nonexistentz-TestQueryHelpers.test_get_request_nonexistent…   s    € ð ×"Ñ"Ð9 =Ð9Ñ" =Ó1Ð9°TÐ9Ð1°TÐ9×9×9Õ9Ð1°T×9×9×9×9×9Ñ9ˆw×9×9Ó9ˆw×9×9Ô9Ð"×9×9Ò9 =×9×9Ò9Ð1×9×9Ò9°T×9×9×9×9×9×9×9Ð9r   c                 óþ  — |j                   }d} ||«      }d }||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nrn   ro   )zP%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_record
}(%(py4)s)
} is %(py9)sr   r‘   r“   r”   )	r{   r5   r;   r3   r4   r6   r7   r8   r9   r•   s	            r   Útest_get_record_nonexistentz,TestQueryHelpers.test_get_record_nonexistentŠ   s    € ð ×!Ñ!Ð8 -Ð8Ñ! -Ó0Ð8°DÐ8Ð0°DÐ8×8×8Õ8Ð0°D×8×8×8×8×8Ñ8ˆw×8×8Ó8ˆw×8×8Ô8Ð!×8×8Ò8 -×8×8Ò8Ð0×8×8Ò8°D×8×8×8×8×8×8×8Ð8r   c                 óÎ  — |j                   } |«       }g }||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )Nr(   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.list_pending
}()
} == %(py7)sr   ©r$   r&   r'   r-   úassert %(py9)sr’   )	Úlist_pendingr5   r;   r3   r4   r6   r7   r8   r9   ©r?   r   rB   r@   Ú@py_assert6rF   rE   r˜   s           r   Útest_list_pending_emptyz(TestQueryHelpers.test_list_pending_empty�   ó‹   € ð ×#Ñ#Ð+Ñ#Ó%Ð+¨Ð+Ð%¨Ñ+×+×+Õ+Ð%¨×+×+×+×+×+Ñ+ˆw×+×+Ó+ˆw×+×+Ô+Ð#×+×+Ò+Ð%×+×+Ò+¨×+×+×+×+×+×+Ö+r   c                 óž  — |j                  |d«      }|j                  |d«      }|j                  |j                  d«       |j                  «       }t	        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }	d	d
|	iz  }
t        t        j                  |
«      «      ‚d x}x}}|d   }|j                  }|j                  }||k(  }|sÁt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )Nr   r\   é   r(   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚpending©r$   r%   rb   r/   r0   r1   r   )zR%(py3)s
{%(py3)s = %(py1)s.request_id
} == %(py7)s
{%(py7)s = %(py5)s.request_id
}rM   )r%   rb   r+   r-   rŸ   r’   )r2   rf   rN   r    r¨   r5   r;   r3   r4   r6   r7   r8   r9   )r?   r   r   rL   rM   r©   rj   rF   rC   rG   rH   Ú@py_assert0r¢   rE   r˜   s                  r   Ú!test_list_pending_returns_pendingz2TestQueryHelpers.test_list_pending_returns_pending”   s_  € ð ×#Ñ# E¨?Ó;ˆØ×#Ñ# E¨?Ó;ˆØ�‰˜Ÿ™Ð'9Ô:Ø×&Ñ&Ó(ˆÜ�7‹|Ð ˜qÐ ˆ|˜qÑ × × Õ ˆ|˜q× × × × × Ñ Œs× × Ó Œs× × × × × Ò �7× × Ó �7× × Ô ˆ|× × Ò ˜q× × × × × × Ó Ø�q‰zÐ5ˆz×$Ñ$Ð5¨¯©Ð5Ð$¨Ñ5×5×5Õ5Ð$¨×5×5Ó5ˆz×5×5Ò5Ð$×5×5×5×5×5Ð5¨×5×5Ó5¨×5×5Ô5¨×5×5×5×5×5×5Ö5r   c                 óÎ  — |j                   } |«       }g }||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )Nr(   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.list_records
}()
} == %(py7)sr   rž   rŸ   r’   )	Úlist_recordsr5   r;   r3   r4   r6   r7   r8   r9   r¡   s           r   Útest_list_records_emptyz(TestQueryHelpers.test_list_records_emptyž   r¤   r   c                 óü  — |j                  |d«      }|j                  |d«      }|j                  |j                  d«       |j                  |j                  d«       |j	                  «       }t        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t
        «      rt        j                  t
        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }	d
d|	iz  }
t        t        j                  |
«      «      ‚d x}x}}y )Nr   r\   rt   é   r(   r§   r¨   Úrecordsrª   r0   r1   )r2   rf   rN   rƒ   r®   r¨   r5   r;   r3   r4   r6   r7   r8   r9   )r?   r   r   rL   rM   r²   rj   rF   rC   rG   rH   s              r   Útest_list_records_allz&TestQueryHelpers.test_list_records_all£   sè   € ð ×#Ñ# E¨?Ó;ˆØ×#Ñ# E¨?Ó;ˆØ�‰˜Ÿ™Ð'9Ô:Ø�‰�R—]‘]Ð$7Ô8Ø×&Ñ&Ó(ˆÜ�7‹|Ð ˜qÐ ˆ|˜qÑ × × Õ ˆ|˜q× × × × × Ñ Œs× × Ó Œs× × × × × Ò �7× × Ó �7× × Ô ˆ|× × Ò ˜q× × × × × × Ô r   c                 óè  — |j                  |d«      }|j                  |j                  d«       |j                  d¬«      }t	        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}|j                  d¬«      }
t	        |
«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}y )Nr   r\   r   )r   r¦   r(   r§   r¨   r²   rª   r0   r1   Úotherr   Úrecords_other)r2   rf   rN   r®   r¨   r5   r;   r3   r4   r6   r7   r8   r9   )r?   r   r   rL   r²   rj   rF   rC   rG   rH   r¶   s              r   Ú#test_list_records_filtered_by_agentz4TestQueryHelpers.test_list_records_filtered_by_agent­   sk  € ð ×#Ñ# E¨?Ó;ˆØ�‰˜Ÿ™Ð'9Ô:Ø×&Ñ&°	Ð&Ó:ˆÜ�7‹|Ð ˜qÐ ˆ|˜qÑ × × Õ ˆ|˜q× × × × × Ñ Œs× × Ó Œs× × × × × Ò �7× × Ó �7× × Ô ˆ|× × Ò ˜q× × × × × × Ó Ø×,Ñ,°gÐ,Ó>ˆÜ�=Ó!Ð& QÐ&Ð! QÑ&×&×&Õ&Ð! Q×&×&×&×&×&Ñ&Œs×&×&Ó&Œs×&×&×&×&×&Ò&�=×&×&Ó&�=×&×&Ô&Ð!×&×&Ò& Q×&×&×&×&×&×&Ô&r   )rV   rW   rX   r   r   r�   rš   rœ   r£   r¬   r¯   r³   r·   r   r   r   rŠ   rŠ   }   sÊ   „ ð Ø&ð Ø/<ð à	ó ð:Ø&ð:à	ó:ð
9Ø&ð9à	ó9ð
,Ø&ð,à	ó,ð
6Ø&ð6Ø/<ð6à	ó6ð,Ø&ð,à	ó,ð
!Ø&ð!Ø/<ð!à	ó!ð'Ø&ð'Ø/<ð'à	ô'r   rŠ   c                   óD   — e Zd Zdededdfd„Zdeddfd„Zdededdfd„Zy)Ú
TestCancelr   r   r   Nc                 óæ  — |j                  |d«      }|j                  |j                  «      }d }||u}|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}|j                  }t        j                  }	||	k(  }
|
söt        j                  d|
fd	||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      d
t        j                  «       v st        j                  t        «      rt        j                  t        «      nd
t        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
}	y )Nr   r]   r_   r`   ra   rc   r+   r(   )zM%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.CANCELLED
}r   r.   r0   r1   )r2   ÚcancelrN   r5   r;   r3   r4   r6   r7   r8   r9   r=   r   Ú	CANCELLEDr…   s                r   Útest_cancel_pendingzTestCancel.test_cancel_pending¹   s  € ð ×(Ñ(¨°Ó@ˆØ—‘ × 2Ñ 2Ó3ˆØ!Ð!ˆv˜TÐ!×!×!Õ!ˆv˜T×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!˜T×!×!×!×!×!×!Ñ!Ø�}‰}Ð8¤× 8Ñ 8Ð8ˆ}Ð 8Ñ8×8×8Õ8ˆ}Ð 8×8×8×8×8×8Ñ8ˆv×8×8Ó8ˆv×8×8Ô8ˆ}×8×8×8×8×8Ð8¤×8×8Ó8¤×8×8Ô8Ð 8×8×8×8×8×8×8Ô8r   c                 óþ  — |j                   }d} ||«      }d }||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nrn   ro   )zL%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.cancel
}(%(py4)s)
} is %(py9)sr   r‘   r“   r”   )	r»   r5   r;   r3   r4   r6   r7   r8   r9   r•   s	            r   Útest_cancel_nonexistentz"TestCancel.test_cancel_nonexistentÁ   sœ   € ð �~‰~Ð4˜mÐ4‰~˜mÓ,Ð4°Ð4Ð,°Ð4×4×4Õ4Ð,°×4×4×4×4×4Ñ4ˆw×4×4Ó4ˆw×4×4Ô4ˆ~×4×4Ò4˜m×4×4Ò4Ð,×4×4Ò4°×4×4×4×4×4×4×4Ð4r   c                 óà  — |j                  |d«      }|j                  |j                  d«       |j                  |j                  «      }d }||u }|s™t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}}y )	Nr   r\   ro   rq   r`   ra   rc   r+   )r2   rf   rN   r»   r5   r;   r3   r4   r6   r7   r8   r9   ru   s	            r   Útest_cancel_already_decidedz&TestCancel.test_cancel_already_decidedÆ   s—   € ð ×(Ñ(¨°Ó@ˆØ�‰˜×*Ñ*Ð,>Ô?Ø—‘ × 2Ñ 2Ó3ˆØÐˆv˜ˆ~××Õˆv˜×××××Ñˆv××Óˆv××Ô˜××××××Òr   )rV   rW   rX   r   r   r½   r¿   rÁ   r   r   r   r¹   r¹   ¸   sQ   „ ð9Ø&ð9Ø/<ð9à	ó9ð5Ø&ð5à	ó5ð
Ø&ðØ/<ðà	ôr   r¹   c                   ó0   — e Zd Zdededdfd„Zdd„Zdd„Zy)	ÚTestExpiredr   r   r   Nc                 óÌ  — |j                  |d«      }|j                  |j                  d«       |j                  «       }g }||k(  }|s™t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}}y )	Nr   r\   r(   )z%(py0)s == %(py3)sÚexpiredra   rc   r+   )r2   rf   rN   Úcheck_expiredr5   r;   r3   r4   r6   r7   r8   r9   )	r?   r   r   r"   rÅ   rj   rB   rk   rD   s	            r   Útest_check_expired_no_pendingz)TestExpired.test_check_expired_no_pendingÐ   s‘   € ð ×(Ñ(¨°Ó@ˆØ�‰˜×*Ñ*Ð,>Ô?Ø×'Ñ'Ó)ˆØÐˆw˜"‰}××Õˆw˜"×××××Ñˆw××Óˆw××Ô˜"××××××Òr   c                 ó¨  — t        «       }|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )Ng      ¬@r(   ©z7%(py2)s
{%(py2)s = %(py0)s.timeout_seconds
} == %(py5)sr   r*   r,   r-   ©
r   Útimeout_secondsr5   r;   r3   r4   r6   r7   r8   r9   ©r?   r   rB   rC   r@   rD   rE   s          r   Útest_default_timeoutz TestExpired.test_default_timeoutØ   s|   € Ü!Ó#ˆØ×&Ñ&Ð0¨&Ð0Ð&¨&Ñ0×0×0Õ0Ð&¨&×0×0×0×0×0Ñ0ˆw×0×0Ó0ˆw×0×0Ô0Ð&×0×0Ò0¨&×0×0×0×0×0×0Ô0r   c                 ó¬  — t        d¬«      }|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )	Ng      N@)rË   r(   rÉ   r   r*   r,   r-   rÊ   rÌ   s          r   Útest_custom_timeoutzTestExpired.test_custom_timeoutÜ   s~   € Ü!°$Ô7ˆØ×&Ñ&Ð.¨$Ð.Ð&¨$Ñ.×.×.Õ.Ð&¨$×.×.×.×.×.Ñ.ˆw×.×.Ó.ˆw×.×.Ô.Ð&×.×.Ò.¨$×.×.×.×.×.×.Ô.r   )r   N)rV   rW   rX   r   r   rÇ   rÍ   rÏ   r   r   r   rÃ   rÃ   Ï   s)   „ ðØ&ðØ/<ðà	óó1ô/r   rÃ   )Ú__doc__Úbuiltinsr3   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter5   ÚpytestÚ$cyberbrain26.security_plane.approvalr   r   r   r   r   Ú$cyberbrain26.security_plane.identityr   r	   r
   Úfixturer   r   r   rZ   r   rŠ   r¹   rÃ   r   r   r   ú<module>rÙ      s    ðÙ  ç  „ ƒ÷õ ÷ñ ð ‡�ðˆ}ò ó ðð ‡�ð�ò ó ð÷)ñ )÷@#+ñ #+÷L,ñ ,÷*8'ñ 8'÷vñ ÷./ò /r   