
    >i)                         d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlZej                  j                  dd       ddlmZ  G d d      Z G d d	      Z G d
 d      Z G d d      Zy)u[   
Tests for generate_org_details.py utility module
하누만 (Hanuman), tester on dev4 team
    N)Pathz /home/jay/workspace/teams/shared)generate_all_sub_team_detailsc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestGenerateAllSubTeamDetailsz5Test suite for generate_all_sub_team_details functionc                    t        |      }|D cg c]  }d|v sd|v s| }}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  }t        j                  d
t        |             dz   d|iz  }	t        t        j                  |	            dx}x}}t        dd      D ]  }
|d|
 dz  }|j                  } |       }|st        j                  d|
 d      dz   dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}t        |      }||v }|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                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}} yc c}w )z
        Test that generate_all_sub_team_details() creates files for all 8 dev teams
        (dev1-team.json through dev8-team.json)
        
output_dirdev	team.json   ==z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slen	dev_filespy0py1py3py6zExpected 8 dev team files, got 
>assert %(py8)spy8N   	   
-team.jsonz-team.json not createdC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}expected_filer   py2py4in)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} in %(py5)sstr	generated)r   r   r   py5zassert %(py7)spy7)r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanationrangeexistsr#   )selftmp_pathr$   fr   @py_assert2@py_assert5@py_assert4@py_format7@py_format9ir   @py_assert1@py_assert3@py_format5@py_format6@py_format8s                    A/home/jay/workspace/teams/dev4/tests/test_generate_org_details.py#test_generate_creates_all_sub_teamszATestGenerateAllSubTeamDetails.test_generate_creates_all_sub_teams   s   
 2XF	 !*M1UaZK1<LQM	M9~VV~"VVV~VVVVVVsVVVsVVVVVV9VVV9VVV~VVVVVV&Ec)nEU$VVVVVVVV q! 	3A$QCz'::M ''J')J)JJS3I+JJJJJJJ=JJJ=JJJ'JJJ)JJJJJJ}%2%2222%22222232223222222}222}222%2222222222222222	3	 Ns   	M/M/M/c                 t   t        |       h d}t        dd      D ]  }|d| dz  }t        |dd	      5 }t        j                  |      }d
d
d
       t        j                               }||z
  }| }	|	st        j                  d| d|       dz   ddt        j                         v st        j                  |      rt        j                  |      ndiz  }
t        t        j                  |
            d
}	|d   }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d| d      dz   d|iz  }t        t        j                  |            d
x}x}}|d   }	t!        |	t"              }|st        j                  d| d      dz   dt        j                         v st        j                  t               rt        j                  t               ndt        j                  |	      dt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |      dz  }t        t        j                  |            d
x}	} y
# 1 sw Y   axY w)z
        Test that each generated file has all required keys:
        team_id, team_name, extracted_from, status, type, lead, members_detail
        r   >   leadtypestatusteam_id	team_nameextracted_frommembers_detailr   r   r
   r   rutf-8encodingNz-team.json missing keys: z
>assert not %(py0)sr   missing_keysrH   zorganization-structure.jsonr   z%(py1)s == %(py4)sr   r    z)-team.json has wrong extracted_from valuez
>assert %(py6)sr   rI   z'-team.json members_detail is not a dictz7
>assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancedictr   r   r   r%   )r   r0   openjsonloadsetkeysr'   r-   r)   r*   r+   r,   r.   r/   r(   rQ   rR   )r2   r3   required_keysr:   	file_pathr4   dataactual_keysrN   r;   @py_format2@py_assert0r<   r5   r=   r8   r7   r>   s                     r@   test_output_formatz0TestGenerateAllSubTeamDetails.test_output_format%   s   
 	&:
 q! 	@A S:#66Iiw7 $1yy|$ diik*K(;6L  @ @.?.?QC0?@ @9?@ @'?'? !@ @6?i !@ @ @,?,?@ @ %&B*GB&*GGB0A0AB&*GB B8A	 'B B8A	 +HB B0A0AQC@AB B B.A.AB B %&@:& @  @.?.?QC>?@ @9?@ @'?'?  @ @6?i  @ @6?i '@ @9?@ @'?'? )-@ @6?i )-@ @6?i @ @ @,?,?@ @%	@$ $s   J--J7	c                    t        |      }|D cg c]  }d|v sd|v s| }}t        |      }t        d      }t        |dd      5 }t	        j
                  |      }ddd       d}d	   d
   d   D ]  }	|	d   dk(  s|	} n d}
||
u}|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}
t        |j                  dg             }||k(  }|st        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  }t        j                  d| d|       dz   d|iz  }t        t        j                  |            d}yc c}w # 1 sw Y   xY w)z
        Test that the function reads sub_teams dynamically
        The count of dev team files should match the count of sub_teams in org structure
        r   r
   r   z6/home/jay/workspace/memory/organization-structure.jsonrJ   rK   rL   N	structurecolumnsteamsrF   zdevelopment-office)is not)z%(py0)s is not %(py3)s
dev_office)r   r   z-development-office not found in org structurez
>assert %(py5)sr%   	sub_teamsr   )z%(py0)s == %(py2)sdev_team_countexpected_sub_teams)r   r   z	Expected z' dev teams based on org structure, got z
>assert %(py4)sr    )r   r   r   rT   rU   rV   r'   r(   r)   r*   r+   r,   r-   r.   r/   get)r2   r3   r$   r4   r   rg   org_fileorg_datare   teamr5   r;   @py_format4r>   rh   @py_format3r=   s                    r@   test_dynamic_no_hardcodingz8TestGenerateAllSubTeamDetails.test_dynamic_no_hardcodingM   s   
 2XF	 !*M1UaZK1<LQM	MY PQ(C'2 	$ayy|H	$ 
[))4W= 	DI"66!
	
 "&Vz%VVVzVVVVVVzVVVzVVVVVV'VVVVVVV R!@A 00	cQbQb	c0	c 	c\b\b	c 	cJbJb 	c 	cYbYb 	c 	c\b\b	c 	cJbJb 1	c 	cYbYb 1	c 	cQbQbY)**QR`Qab	c 	c 	cObOb	c 	c# N
	$ 	$s   	III
IIc                 <   |dz  }t        ||      }|D cg c]  }d|v sd|v s| }}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  }	t        j                  d      dz   d|	iz  }
t        t        j                  |
            dx}x}}t        dd      D ](  }|d| dz  }|j                  } |       }|sddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}t        |dd      5 }t        j                  |      }ddd       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}}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c c}w # 1 sw Y   ]xY w) z
        Test that when backup_file points to non-existent path,
        the function still generates files using main data
        znon_existent_backup.json)backup_filer	   r
   r   r   r   r   r   r   r   z2Failed to generate files when backup doesn't existr   r   Nr   r   r   zAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}rZ   r   rJ   rK   rL   rF   r!   z%(py1)s in %(py3)sr[   r   r   assert %(py5)sr%   rI   )r   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   rT   rU   rV   )r2   r3   non_existent_backupr$   r4   r   r5   r6   r7   r8   r9   r:   rZ   r;   r<   r=   r[   r^   rm   r>   s                       r@   test_fallback_to_main_filez8TestGenerateAllSubTeamDetails.test_fallback_to_main_filej   sL    ')CC1+
	
 !*M1UaZK1<LQM	M9~XX~"XXX~XXXXXXsXXXsXXXXXX9XXX9XXX~XXXXXX$XXXXXXXX q! 	,A S:#66I##%#%%%%%%%%9%%%9%%%#%%%%%%%%%%iw7 $1yy|$$9$$$$9$$$9$$$$$$$$$$$$$$$$#+#t++++#t+++#++++++t+++t+++++++	,	 N$ $s   	NNN NN	c           
         |dz  }t        j                  t              5 }t        ||       ddd       g }d}j                  }t        |      }||v }|}	|s(t        |      }
|j                  }t        |      }|
|v }|}	|	st        j                  d|fd||f      t        j                  |      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  }|j                  |       |st        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                  |
      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  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}	x}x}x}x}x}x}
x}x}}y# 1 sw Y   2xY w)zp
        Test that calling with org_file pointing to non-existent path
        raises FileNotFoundError
        znon_existent_org.jsonrj   r	   Nu/   메인 조직 파일을 찾을 수 없습니다r!   )zM%(py3)s in %(py10)s
{%(py10)s = %(py5)s(%(py8)s
{%(py8)s = %(py6)s.value
})
}r#   exc_info)r   r%   r   r   py10z%(py12)spy12)zs%(py17)s
{%(py17)s = %(py14)s(%(py15)s)
} in %(py24)s
{%(py24)s = %(py19)s(%(py22)s
{%(py22)s = %(py20)s.value
})
}non_existent_org)py14py15py17py19py20py22py24z%(py26)spy26r   zassert %(py29)spy29)pytestraisesFileNotFoundErrorr   valuer#   r'   r(   r,   r)   r*   r+   append_format_boolopr.   r/   )r2   r3   r|   ry   r;   r5   @py_assert7@py_assert9r7   r^   @py_assert16@py_assert21@py_assert23@py_assert18@py_format11@py_format13@py_format25@py_format27@py_format28@py_format30s                       r@   test_missing_org_file_raisesz:TestGenerateAllSubTeamDetails.test_missing_org_file_raises   s   
 $&==]],- 	))h	
	!@ 	! 	!CDW 	!@DWW 	![^\
 	!	! 	! \
 \! 	! 	!  	!@DW 	! 	! y A 	! 	! &	! 	!   EH 	! 	! y EH 	! 	! &	! 	!   IQ 	! 	! y IQ 	! 	! y IW 	! 	! y EX 	! 	! 	! &	! 	!  	! \
 	! 	! &	! 	!   \_ 	! 	! y \_ 	! 	! &	! 	!   	! 	! y 	! 	! y\
 	! 	! &	! 	!  S	! 	! yS	! 	! &	! 	!  	! 	! y	! 	! y	! 	! y 	! 	! 	! &	! 	! .	! 	! 	! 	!  	! 	! 	! 	!	 	s   MM'N)	__name__
__module____qualname____doc__rA   r_   ro   rv   r        r@   r   r      s!    ?3"&@Pc:,2!r   r   c                   "    e Zd ZdZd Zd Zd Zy)TestSubTeamDetailsz4Additional tests for specific sub-team file contentsc                 X   t        |       |dz  }t        |dd      5 }t        j                  |      }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}||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}||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}||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}}|d   }t        |t              }|sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dz  }t        t	        j                  |            dx}}|d   }|j                  }d} ||      }d }||k(  }|st	        j
                  d	|fd!||f      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      d"z  }d#d$|iz  }t        t	        j                  |            dx}x}x}x}x}}|d%   }t        |      }d&}||kD  }|st	        j
                  d'|fd(||f      d)t        j                         v st	        j                  t              rt	        j                  t              nd)t	        j                  |      t	        j                  |      t	        j                  |      d*z  }d+d,|iz  }t        t	        j                  |            dx}x}x}}y# 1 sw Y   kxY w)-z;Test that dev1-team.json has expected structure and membersr   dev1-team.jsonrJ   rK   rL   NrF   z	dev1-teamr   rO   rP   zassert %(py6)sr   rG   u
   개발1팀rE   activerD   physicalrC   r!   rr   r[   rs   rt   r%   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}rQ   rR   rS   idhermes)zJ%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s)
} == %(py10)s)r   r   r%   r&   rz   zassert %(py12)sr{   rI   r   >)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr   )r   r   r    r&   zassert %(py9)spy9)r   rT   rU   rV   r'   r(   r,   r.   r/   r)   r*   r+   rQ   rR   ri   r   )r2   r3   rZ   r4   r[   r^   r<   r5   r=   r8   rm   r>   r;   r7   @py_assert6r   @py_assert8r   r   r6   r?   @py_format10s                         r@   test_dev1_team_structurez+TestSubTeamDetails.test_dev1_team_structure   sv   %://	)S73 	 q99Q<D	  I-+-+----+------+-------K 0L0 L0000 L000 000L0000000H~))~))))~)))~))))))))))F|)z)|z))))|z)))|)))z))))))) v~vvv,-z,--------z---z---,-------------------F|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1111 ().s)*.Q.*Q....*Q......s...s...)...*...Q.......	  	 s   VV)c                    t        |       |dz  }t        |dd      5 }t        j                  |      }dd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}t        |      }d}	||	kD  }
|
st        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	        |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}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}g }d}||v }
|
}|
s	d}||k7  }|}|sXt        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  }|j#                  |       |
st        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  }|j#                  |       t        j$                  |d#      i z  }d$d%|iz  }t        t        j                  |            dx}x}x}x}
x}} y# 1 sw Y   xY w)&z.Test that members_detail has correct structurer   r   rJ   rK   rL   NrI   5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}rQ   membersrR   r   r   r   r    r   r   z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr   r   assert %(py8)sr   	member_idr#   member_datar   unknownr!   )z%(py3)s in %(py5)s)r   r%   z%(py7)sr&   )!=)z%(py9)s != %(py12)s)r   r{   z%(py14)sr}   r   zassert %(py17)sr   )r   rT   rU   rV   rQ   rR   r)   r*   r'   r+   r,   r.   r/   r   r(   itemsr#   r   r   )r2   r3   rZ   r4   r[   r   r<   r=   r5   r6   r7   r8   r9   r   r   r;   r^   @py_assert11@py_assert10r>   r?   r   @py_format15@py_format16@py_format18s                            r@   test_members_detail_structurez0TestSubTeamDetails.test_members_detail_structure   sY   %://	)S73 	 q99Q<D	  '('4((((((((z(((z(((((('((('((((((4(((4((((((((((7|a|a|ass77|a '.mmo 	A"I{i--------:---:------i---i-------------------k400000000:000:000000k000k000000400040000000000@4@4;&@y@)y*@@@@@4;@@@4@@@@@@;@@@;@@@@@@@)y@@@@@@)@@@)@@@y@@@@@@@@@@@@@@		A	  	 s   Y

Yc                    t        |      }t        |      }d}||kD  }|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  }t        j                  d      d	z   d
|iz  }t        t        j                  |            dx}x}}|D cg c]  }d|v s|j                  d      s| }	}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  }t        j                  d      d	z   d
|iz  }t        t        j                  |            dx}x}}yc c}w )zt
        Test that generated file count matches expected output
        (8 dev teams + other teams/centers)
        r   r   r   r   r   r$   r   z/Expected more than 8 files (dev teams + others)r   r   Nr
   r   r   r   	dev_teamsz!Expected exactly 8 dev team files)r   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   endswith)
r2   r3   r$   r5   r6   r7   r8   r9   r4   r   s
             r@   test_file_count_consistencyz.TestSubTeamDetails.test_file_count_consistency   sl   
 2XF	 9~TT~!TTT~TTTTTTsTTTsTTTTTT9TTT9TTT~TTTTTT#TTTTTTTT !*T1UaZAJJ{<SQT	T9~GG~"GGG~GGGGGGsGGGsGGGGGG9GGG9GGG~GGGGGG$GGGGGGGG Us   8	JJJN)r   r   r   r   r   r   r   r   r   r@   r   r      s    >/,A(Hr   r   c                   "    e Zd ZdZd Zd Zd Zy)TestErrorHandlingz"Test error handling and edge casesc                    |dz  }|j                  d       	 t        ||dz        }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
}y
# t        t        f$ r Y y
w xY w)zTest with malformed org filezbad_org.jsonz{"invalid": "structure"}outrx   r   rQ   r$   listr   N)
write_textr   rQ   r   r)   r*   r'   r+   r,   r.   r/   r   KeyError)r2   r3   bad_orgr$   r<   r=   s         r@   test_invalid_org_file_structurez1TestErrorHandling.test_invalid_org_file_structure   s    ^+56	5 X-=I i........:...:......i...i...................!8, 		s   D0E	 	EEc           	         |dz  dz  dz  }|j                   } |       }| }|sddt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |      dz  }t        t        j                  |            dx}x}}t        |       |j                   } |       }|st        j                  d	      d
z   dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |      dz  }t        t        j                  |            dx}}|j                  }d}	 ||	      }
t        |
      }|st        j                  d      dz   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
                  |	      t        j
                  |
      t        j
                  |      dz  }t        t        j                  |            dx}x}	x}
}y)z9Test that output directory is created if it doesn't existnestedoutputdirzEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r	   r   Nr   z"Output directory should be createdr   z*.jsonz*Output directory should contain JSON fileszf
>assert %(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.glob
}(%(py5)s)
})
}any)r   r   r   r%   r&   r   )r1   r)   r*   r'   r+   r,   r.   r/   r   r-   globr   )r2   r3   r	   r;   r<   r6   r>   r=   r5   r7   r   r   r   s                r@   test_output_directory_creationz0TestErrorHandling.test_output_directory_creation   s   (83e;
$$&$&&&&&&&&&&&:&&&:&&&$&&&&&&&&&&%<  H "H"HH$HHHHHHHzHHHzHHH HHH"HHHHHHOO	8$	8H%	8s%
 	8 
 	8&7&77	8 	817	8 	877  	8 	8.7i  	8 	817	8 	877 	8 	8.7i 	8 	8.7i 	8 	8.7i %	8 	8.7i &	8 	8.7i
 	8 	8 	8$7$7	8 	8 	8r   c                    t        |      }|D ]2  }t        |      }|j                  } |       }|st        j                  | d      dz   dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}t        |dd	      5 }t        j                  |      }	ddd       t        	t              }|s$t        j                  | d
      dz   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}5 y# 1 sw Y   GxY w)z,Test that all generated files are valid JSONr    does not existr   pathr   NrJ   rK   rL   z is not a JSON objectz7
>assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}rQ   r[   rR   r   )r   r   r1   r'   r-   r)   r*   r+   r,   r.   r/   rT   rU   rV   rQ   rR   )
r2   r3   r$   rZ   r   r;   r<   r=   r4   r[   s
             r@   test_json_is_validz$TestErrorHandling.test_json_is_valid   s\   1XF	" 	OI	?D;;?;=?=??YK"???????4???4???;???=?????? dC'2 $ayy|$dD)N)NNi[8M+NNNNNNN:NNN:NNNNNNdNNNdNNNNNNDNNNDNNN)NNNNNN	O
$ $s   +II	N)r   r   r   r   r   r   r   r   r   r@   r   r      s    ,"
8Or   r   c                       e Zd ZdZd Zd Zy)TestIntegrationz Integration tests with real datac           	         t        |      }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}t        |      }d}||kD  }|st        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 ].  }
t        |
      }|j                  } |       }|st        j                  d|
 d      dz   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                  |      t        j                  |      dz  }t        t        j                  |            dx}x}}1 y)z,Test with actual organization-structure.jsonr   r   rQ   resultr   r   Nr   r   r   r   r   r   r   zGenerated path r   za
>assert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.exists
}()
}r   r   )r   r   r   r%   r&   )r   rQ   r   r)   r*   r'   r+   r,   r.   r/   r   r(   r   r1   r-   )r2   r3   r   r<   r=   r5   r6   r7   r8   r9   r   r   r?   s                r@   test_with_real_org_filez'TestIntegration.test_with_real_org_file  s   .(C&$''''''''z'''z''''''&'''&''''''$'''$''''''''''6{Q{Q{Qss66{Q  	PD:O:$$O$&O&OO/$(OOOOOOO4OOO4OOOOOOOOOOOO:OOO$OOO&OOOOOO	Pr   c                 p   t        |      }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}d |D        }t        |      }|st        j                  d	      d
z   dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}d |D        }t        |      }|st        j                  d      d
z   dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}y)z0Test that return value contains valid file pathsr   r   rQ   r   r   r   Nc              3   <   K   | ]  }t        |t                y wN)rQ   r#   .0ps     r@   	<genexpr>zBTestIntegration.test_return_value_is_file_paths.<locals>.<genexpr>  s     6!:a%6s   zAll returns should be stringsz.
>assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr   c              3      K   | ]8  }t        |      j                         xs t        |      j                          : y wr   )r   is_absoluter1   r   s     r@   r   zBTestIntegration.test_return_value_is_file_paths.<locals>.<genexpr>  s5      
:;DG!5T!W^^%55
s   >A zAll paths should be valid)r   rQ   r   r)   r*   r'   r+   r,   r.   r/   r   r-   )r2   r3   r   r<   r=   r;   s         r@   test_return_value_is_file_pathsz/TestIntegration.test_return_value_is_file_paths  s   .(C&$''''''''z'''z''''''&'''&''''''$'''$''''''''''6v6Ws66W6WW8WWWWWWWsWWWsWWW6WWW6WWWWWW
?E
 	's 
 
 	' 
 	'&&&	' 	' &	' 	'&&  	' 	'&Y  	' 	'&Y
 	' 	'&Y
 	' 	' 	'&&	' 	'r   N)r   r   r   r   r   r   r   r   r@   r   r     s    *	P'r   r   )r   builtinsr)   _pytest.assertion.rewrite	assertionrewriter'   rU   syspathlibr   r   r   insertgenerate_org_detailsr   r   r   r   r   r   r   r@   <module>r      sc   
   
   5 6 >@! @!F?H ?HD+O +O\' 'r   