o
    >ha                     @   s  d Z ddlZddlm  mZ ddlZddlZddl	Z	ddl
mZ dd Zejjdd Zejjdd	 Zejjd
d Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd ZdS )a  
test_map.py

Purpose:
  Comprehensive test suite for map functionality including marker management,
  camera location mapping, coordinate validation, and user permission boundaries.
  Tests marker CRUD operations, map display, and geographic data consistency.
  
  This module implements red-team level security testing with comprehensive input
  validation and follows modular, well-organized patterns for production Apache2
  deployment scenarios. Each test ensures proper authentication, CSRF protection,
  coordinate validation, and database state verification.

Test Categories:
  - Map page display and access control
  - Camera marker management (add, update, delete)
  - Item marker CRUD operations (fauna, structures)
  - Coordinate validation and geographic boundaries
  - Marker location retrieval and pagination
  - User permission boundaries and data isolation
  - Database schema migrations and consistency
  - Available camera listing for map integration
    N)get_dbc                  C   s8   t t d d } t t d d }| d|dS )z1Generate a unique 12-digit camera ID for testing.i  i i@B i'  08d04d)inttime)	timestamprandom_part r	   */var/www/html/tests/functional/test_map.pyget_unique_camera_id   s   r   c                 C   s:  |d }|  d}|j}g d}||v }|sJtd|fd||fdt v s+t|r0t|ndt|t|d }dd	|i }tt	|d
 } }}| j
d|d |d dd}	|	j}d}||k}|std|fd||fdt v s~t|	rt|	ndt|t|d }dd	|i }tt	|d
 } }}|  d}|j}d}||k}|std|fd||fdt v st|rt|ndt|t|d }dd	|i }tt	|d
 } }}g }d}
|j}|
|v }|}|sd}|j}||v }|}|std|fd|
|ft|
dt v s&t|r+t|ndt|d }dd|i }|| |svtd|fd||ft|dt v s]t|rbt|ndt|d }dd|i }|| t|di  }d d!|i }tt	|d
 } } }
 } } } }}d
S )"z9Test map page display via GET /karta with access control.regular/karta.  i  i  inz3%(py2)s
{%(py2)s = %(py0)s.status_code
} in %(py5)sresponsepy0py2py5assert %(py7)spy7N/loginusernamepasswordr   r   datar   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)slogin_response   s   <!DOCTYPE html>s   <html)z,%(py3)s in %(py7)s
{%(py7)s = %(py5)s.data
}py3r   r   %(py9)spy9)z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.data
}py12py14py16%(py18)spy18   assert %(py21)spy21)getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationpostr   append_format_boolop)client
test_usersuserr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8r#   @py_assert2@py_assert6@py_assert0@py_assert11@py_assert15@py_assert13@py_format10@py_format17@py_format19@py_format20@py_format22r	   r	   r
   (test_map_page_display_and_access_control&   s   


b rR   c                 C   s  |d }t  }| jd|d |d dd}|j}d}||k}|sTtd|fd	||fd
t v s5t|r:t|nd
t|t|d }dd|i }	t	t
|	d } }}|  }
|
d}W d   n1 snw   Y  | j  t }|d|t|df |  W d   n1 sw   Y  | d}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }	t	t
|	d } }}t|j}t|t}|s:ddt v sttrttnddt v st|rt|nddt v s%ttr*ttndt|d }t	t
|d}d}|D ]}t|d|krP|} nq@d}||u}|std|fd||fdt v srt|rwt|ndt|d }dd |i }t	t
|d }}|d!p|d"}d}||k}|std|fd#||fd!t v st|rt|nd!t|d }dd |i }t	t
|d }}dS )$z>Test getting available cameras via GET /get_available_cameras.r   r   r   r   r   r   r   r    r"   r#   r   r   r   Nuser_idFINSERT INTO cameras (user_id, camera_id, camera_name) VALUES (?, ?, ?)zAvailable Camera Test/get_available_camerasr$   r   5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   listr   py1r   py4	camera_idis notz%(py0)s is not %(py3)s
our_camerar   r&   assert %(py5)sr   camera_namename)z%(py0)s == %(py3)s)r   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   session_transactionr2   applicationapp_contextr   executer   commitjsonloadsr   rW   rX   str)r?   r@   rA   unique_camera_idr#   rB   rC   rD   rE   rF   sessrS   dbr   r   @py_format5r`   camerarG   @py_format4rc   r	   r	   r
   &test_get_available_cameras_for_mapping>   s>   



	~rs   c                 C   s8  |d }t  }| jd|d |d dd}|j}d}||k}|sTtd|fd	||fd
t v s5t|r:t|nd
t|t|d }dd|i }	t	t
|	d } }}|  }
|
d}W d   n1 snw   Y  | j  t }|d|t|df |  W d   n1 sw   Y  | d |  }
|
dd}W d   n1 sw   Y  d}d}| jd| |||ddd}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }	t	t
|	d } }}t|j}|d }d}||u }|sHtd|fd ||ft|t|d! }d"d#|i }t	t
|d } }}|d$ }d}||k}|s~td|fd%||ft|t|d! }d"d#|i }t	t
|d } }}|d& }||k}|std|fd'||ft|d(t v st|rt|nd(d) }d*d+|i }t	t
|d }}| j  t }|d,t|f }d}||u}|std-|fd.||fd/t v st|rt|nd/t|d0 }d*d+|i }t	t
|d }}|d1 }| d2| }||k}|sMtd|fd%||ft|t|d! }d"d#|i }t	t
|d } }}|d3 }d4}||k}|std|fd%||ft|t|d! }d"d#|i }t	t
|d } }}W d   dS 1 sw   Y  dS )5z6Test adding camera marker via POST /add_camera_marker.r   r   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rT   zCamera Marker Test/
csrf_token v^F@c: /@/add_camera_marker?csrf_token=latlngr\   application/jsonrj   content_typer$   r   successTisz%(py1)s is %(py4)srZ   r[   assert %(py6)spy6rc   z%(py1)s == %(py4)sr\   z%(py1)s == %(py3)srm   rZ   r&   rb   r   >SELECT location, added_to_map FROM cameras WHERE camera_id = ?r]   r_   rq   ra   location,added_to_mapr/   r   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rf   rg   r   rh   r   ri   rj   rk   r   fetchone)r?   r@   rA   rm   r#   rB   rC   rD   rE   rF   rn   rS   ro   ru   test_lattest_lngr   r   rI   rG   rp   @py_format7rr   rq   r	   r	   r
   'test_add_camera_marker_with_coordinatesk   s`   



	
ll~vn$r   c                 C   s  |d }|d }| j d|d |d dd}|j}d}||k}|sUtd	|fd
||fdt v s6t|r;t|ndt|t|d }	dd|	i }
tt	|
d } }}| 
 }|d}W d   n1 sow   Y  | d | 
 }|dd}W d   n1 sw   Y  | j d| |d |d |d |d ddd}|j}d}||k}|std	|fd
||fdt v st|rt|ndt|t|d }	dd|	i }
tt	|
d } }}t|j}|d }d}||u }|s&td |fd!||ft|t|d" }d#d$|i }tt	|d } }}|d% }|d }||k}|s^td	|fd&||ft|t|d" }d#d$|i }tt	|d } }}d'}||v }|std(|fd)||ft|d*t v st|rt|nd*d+ }d,d-|i }	tt	|	d }}| j 7 t }|d.|d' |f }d}||u}|std/|fd0||fd1t v st|rt|nd1t|d2 }d,d-|i }	tt	|	d }}|d }|d }||k}|s*td	|fd&||ft|t|d" }d#d$|i }tt	|d } }}|d }|d }||k}|sbtd	|fd&||ft|t|d" }d#d$|i }tt	|d } }}|d }|d }||k}|std	|fd&||ft|t|d" }d#d$|i }tt	|d } }}|d }|d }||k}|std	|fd&||ft|t|d" }d#d$|i }tt	|d } }}W d   dS 1 sw   Y  dS )3z3Test adding item markers via POST /add_item_marker.r   fauna_markerr   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rt   ru   rv   /add_item_marker?csrf_token=latitude	longitudetyperd   )r{   r|   	item_type	item_namer}   r~   r$   r   r   Tr   r   r   r   r   r   r   item_idr   z%(py1)s in %(py3)sr   r   rb   r   z2SELECT * FROM markers WHERE id = ? AND user_id = ?r]   r_   markerra   )r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rj   rk   r   rf   rg   r   rh   r   )r?   r@   sample_marker_datarA   marker_datar#   rB   rC   rD   rE   rF   rn   rS   ru   r   r   rI   rG   rp   r   rr   ro   r   r	   r	   r
   %test_add_item_marker_fauna_structures   sR   



	lp~
~pppr$r   c                 C   s  |d }t  }| jd|d |d dd}|j}d}||k}|sTtd|fd	||fd
t v s5t|r:t|nd
t|t|d }dd|i }	t	t
|	d } }}|  }
|
d}W d   n1 snw   Y  | j  t }|d|t|df |  W d   n1 sw   Y  | d |  }
|
dd}W d   n1 sw   Y  | jd| dd|ddd}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }	t	t
|	d } }}t|j}|d }d}||u }|sDtd|fd||ft|t|d  }d!d"|i }t	t
|d } }}d#}|d$ }||v }|sztd%|fd&||ft|t|d  }d!d"|i }t	t
|d } }}| jd| d'|idd}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }	t	t
|	d } }}t|j}|d }d}||u }|std|fd||ft|t|d  }d!d"|i }t	t
|d } }}d(}|d$ }||v }|sAtd%|fd&||ft|t|d  }d!d"|i }t	t
|d } }}dS ))z6Test coordinate validation for invalid lat/lng values.r   r   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rT   zValidation Test Camerart   ru   rv   ry   invalidrz   r}   r~     r   r   Fr   r   r   r   r   zNeispravne koordinatemessager   z%(py1)s in %(py4)sr\   Nedostaju podaci)r   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rf   rg   r   rh   r   ri   rj   rk   r   )r?   r@   rA   rm   r#   rB   rC   rD   rE   rF   rn   rS   ro   ru   r   r   rI   rG   rp   r   r	   r	   r
   )test_coordinate_validation_and_boundaries   sT   



	
lllpr   c              
   C   s  |d }t  }| jd|d |d dd}|j}d}||k}|sTtd|fd	||fd
t v s5t|r:t|nd
t|t|d }	dd|	i }
t	t
|
d } }}|  }|d}W d   n1 snw   Y  | j ? t }d}d}|d|t|d| d| df |d }|d||d |d |d |d f}|j}|  W d   n1 sw   Y  | d}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }	dd|	i }
t	t
|
d } }}t|j}t|t}|sadd t v s&ttr+ttnd d!t v s9t|r>t|nd!d"t v sLttrQttnd"t|d# }t	t
|d}t|}d$}||k}|std%|fd&||fd't v sttrttnd'd!t v st|rt|nd!t|t|d( }d)d*|i }t	t
|d } }}d}d}|D ]+}|dd+kr|d,|kr|}q|d|d kr|d,|kr|}qd}||u}|s,td-|fd.||fd/t v st|rt|nd/t|d0 }d1d2|i }	t	t
|	d }}|d }d}||k}|s`td|fd3||ft|t|d4 }d5d6|i }t	t
|d } }}|d }||k}|std|fd7||ft|d8t v st|rt|nd8d9 }d1d2|i }	t	t
|	d }}|d }||k}|std|fd7||ft|d:t v st|rt|nd:d9 }d1d2|i }	t	t
|	d }}d}||u}|s#td-|fd.||fd;t v st|rt|nd;t|d0 }d1d2|i }	t	t
|	d }}|d }|d }||k}|sYtd|fd3||ft|t|d4 }d5d6|i }t	t
|d } }}|d }|d }||k}|std|fd3||ft|t|d4 }d5d6|i }t	t
|d } }}|d }|d }||k}|std|fd3||ft|t|d4 }d5d6|i }t	t
|d } }}dS )<z=Test marker location retrieval via GET /get_marker_locations.r   r   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rw   rx   dINSERT INTO cameras (user_id, camera_id, camera_name, location, added_to_map) VALUES (?, ?, ?, ?, ?)zLocation Test Camerar   r/   r   UINSERT INTO markers (user_id, type, latitude, longitude, name) VALUES (?, ?, ?, ?, ?)r   r   r   rd   /get_marker_locationsr$   r   rV   rW   r   rX   rY      )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)slen)r   rZ   r&   r   zassert %(py8)spy8rq   idr]   r_   camera_markerra   rb   r   r   r   r   r   r   r   r   r   item_marker)r   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rf   rg   r   rh   r   	lastrowidri   rj   rk   r   rW   rX   r   )r?   r@   r   rA   rm   r#   rB   rC   rD   rE   rF   rn   rS   ro   r   r   r   cursor	marker_idr   r   rp   rG   @py_assert5r   @py_format9r   r   r   rr   rI   r	   r	   r
   #test_get_marker_locations_retrieval  s^   



 $~l~pptr   c              
   C   s  |d }t  }| jd|d |d dd}|j}d}||k}|sTtd|fd	||fd
t v s5t|r:t|nd
t|t|d }dd|i }	t	t
|	d } }}|  }
|
d}W d   n1 snw   Y  d}d}| j ! t }|d|t|d| d| df |  W d   n1 sw   Y  | d |  }
|
dd}W d   n1 sw   Y  | jd| |dddd}|jdkr |j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }	t	t
|	d } }}dS |j}d }||k}|sbtd|fd	||fdt v sCt|rHt|ndt|t|d }dd|i }	t	t
|	d } }}t|j}|d! }d"}||u }|std#|fd$||ft|t|d% }d&d'|i }t	t
|d } }}| j  t }|d(t|f }d}||u}|std)|fd*||fdt v st|rt|ndt|d+ }d,d-|i }t	t
|d }}|d. }d}||u }|s'td#|fd$||ft|t|d% }d&d'|i }t	t
|d } }}|d/ }d0}||k}|s]td|fd1||ft|t|d% }d&d'|i }t	t
|d } }}W d   dS 1 sow   Y  dS )2z5Test deleting camera markers via POST /delete_marker.r   r   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rw   rx   r   zDelete Test Camerar   r/   rt   ru   rv   /delete_marker?csrf_token=rq   r   r   r}   r~     r   r$   r   Tr   r   r   r   r   r   r]   r_   ra   rb   r   r   r   r   r   r   )r?   r@   rA   rm   r#   rB   rC   rD   rE   rF   rn   rS   r   r   ro   ru   r   r   rI   rG   rp   r   rq   rr   r	   r	   r
   test_delete_camera_markerZ  s`   



	
l~ln$r   c              
   C   s  |d }|d }| j d|d |d dd}|j}d}||k}|sUtd	|fd
||fdt v s6t|r;t|ndt|t|d }	dd|	i }
tt	|
d } }}| 
 }|d}W d   n1 sow   Y  | j % t }|d||d |d |d |d f}|j}|  W d   n1 sw   Y  | d | 
 }|dd}W d   n1 sw   Y  | j d| t||d ddd}|jdkr&|j}d}||k}|std	|fd
||fdt v st|rt|ndt|t|d }	dd|	i }
tt	|
d } }}dS |j}d}||k}|shtd	|fd
||fdt v sIt|rNt|ndt|t|d }	dd|	i }
tt	|
d } }}t|j}|d  }d!}||u }|std"|fd#||ft|t|d$ }d%d&|i }tt	|d } }}| j T t }|d'|f }d}||u }|std"|fd(||fd)t v st|rt|nd)t|d* }d+d,|i }	tt	|	d }}W d   dS 1 sw   Y  dS )-z3Test deleting item markers via POST /delete_marker.r   structure_markerr   r   r   r   r   r   r    r"   r#   r   r   r   NrS   r   r   r   r   rd   rt   ru   rv   r   r   r}   r~   r   r   r$   r   Tr   r   r   r   r   z"SELECT * FROM markers WHERE id = ?)z%(py0)s is %(py3)sr   ra   rb   r   )r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rf   rg   r   rh   r   ri   rl   rj   rk   r   r   )r?   r@   r   rA   r   r#   rB   rC   rD   rE   rF   rn   rS   ro   r   r   ru   r   r   rI   rG   rp   r   r   rr   r	   r	   r
   test_delete_item_marker  sZ   





l$r   c           !   
   C   sr  |d }|d }t  }| jd|d |d dd}|j}d}||k}	|	sXtd	|	fd
||fdt v s9t|r>t|ndt|t|d }
dd|
i }t	t
|d } }	}|  }|d}W d   n1 srw   Y  | j ? t }d}d}|d|t|d| d| df |d }|d||d |d |d |d f}|j}|  W d   n1 sw   Y  | jdddid | jd|d |d dd}|j}d}||k}	|	std	|	fd
||fdt v st|rt|ndt|t|d }
dd|
i }t	t
|d } }	}| d }|j}d!}||k}	|	shtd	|	fd
||fd"t v sIt|rNt|nd"t|t|d }
dd|
i }t	t
|d } }	}t|j}|D ]}|dd#kr|j}d$}	||	}||k}|std%|fd&||fd't v st|rt|nd't|t|	t|d(t v st|rt|nd(d) }d*d+|i }t	t
|d } }	 }}qv|j}d$}	||	}||k}|sDtd%|fd&||fd't v st|rt|nd't|t|	t|d,t v s-t|r2t|nd,d) }d*d+|i }t	t
|d } }	 }}qv| d- |  }|dd}W d   n	1 siw   Y  | jd.| d/d0|d1d2d3}|j}d4}||k}	|	std	|	fd
||fd"t v st|rt|nd"t|t|d }
dd|
i }t	t
|d } }	}t|j}|d5 }d6}	||	u }|std7|fd8||	ft|t|	d9 }d:d;|i } t	t
| d } }}	d<}|d= }	||	v }|s1td>|fd?||	ft|t|	d9 }d:d;|i } t	t
| d } }}	dS )@z-Test users can only manage their own markers.r   limitedr   r   r   r   r   r   r    r"   r#   r   r   r   NrS   rw   rx   r   zIsolation Test Camerar   r/   r   r   r   r   r   rd   z/logoutru   rv   r   r$   r   rq   r   )!=)zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} != %(py8)sr   rm   )r   r   r[   r   r   zassert %(py10)spy10regular_marker_idrt   ry   g      G@g      0@rz   r}   r~     r   Fr   r   r   r   r      Kamera nije pronađenar   r   r   )r   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   re   r2   rf   rg   r   rh   r   r   ri   rj   rk   r   )!r?   r@   r   user_regularuser_limitedrm   r#   rB   rC   rD   rE   rF   rn   regular_user_idro   r   r   r   r   r   r   limited_markersr   r   @py_assert7r   @py_format11ru   r   rI   rG   rp   r   r	   r	   r
   %test_user_isolation_marker_management  sn   






	lpr   c              	   C   s  |d }| j d|d |d dd}|j}d}||k}|sQtd|fd	||fd
t v s2t|r7t|nd
t|t|d }dd|i }tt	|d } }}| 
d}	|	j}d}||k}|std|fd	||fdt v s|t|	rt|	ndt|t|d }dd|i }tt	|d } }}| j > t }
dd |
d D }d}||v }|std|fd||ft|dt v st|rt|ndd }dd|i }tt	|d }}d}||v }|s.td|fd||ft|dt v st|rt|ndd }dd|i }tt	|d }}dd |
d D }d}||v }|sytd|fd||ft|d t v sbt|rgt|nd d }dd|i }tt	|d }}d!d |
d" D }g d#}|D ]M}||v }|std|fd$||fd%t v st|rt|nd%d&t v st|rt|nd&d' }d(d)|i }tt	|d}qW d   dS 1 sw   Y  dS )*z6Test database schema migrations for map functionality.r   r   r   r   r   r   r   r    r"   r#   r   r   r   NrU   r$   r   c                 S      g | ]}|d  qS r/   r	   .0rowr	   r	   r
   
<listcomp>;      z;test_database_schema_migration_handling.<locals>.<listcomp>zPRAGMA table_info(cameras)r   r   r   columnsr   rb   r   r   c                 S   r   )r   r	   r   r	   r	   r
   r   @  r   z1SELECT name FROM sqlite_master WHERE type='table'markerstablesc                 S   r   r   r	   r   r	   r	   r
   r   D  r   zPRAGMA table_info(markers))r   rS   r   r   r   rd   )z%(py0)s in %(py2)scolmarker_columns)r   r   zassert %(py4)sr[   )r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   r2   rf   rg   r   rh   fetchall)r?   r@   rA   r#   rB   rC   rD   rE   rF   r   ro   r   rI   rG   rr   r   r   expected_columnsr   @py_format3rp   r	   r	   r
   'test_database_schema_migration_handling&  s*   

x~~$r   c                 C   s(  g d}|D ]
\}}|dkr|  |}n| j|i d}|j}g d}||v }|s]td|fd||fdt v s>t|rCt|ndt|t|d }d	d
|i }	t	t
|	d } }}|jdkrg }d}
|j}|
|v }|}|sd}|j}||v }|}|std|fd|
|ft|
dt v st|rt|ndt|d }	dd|	i }|| |std|fd||ft|dt v st|rt|ndt|d }dd|i }|| t|di  }dd|i }t	t
|d } } }
 } } } }}qdS )z+Test map operations require authentication.))r   GET)rU   r   )r   r   )z/add_camera_markerPOST)z/add_item_markerr   )z/delete_markerr   r   )rj   r   r   r   r   r   r   r   Nr   rt   login)z0%(py3)s in %(py7)s
{%(py7)s = %(py5)s.location
}r%   r'   r(   )z4%(py12)s in %(py16)s
{%(py16)s = %(py14)s.location
}r)   r-   r.   r/   r0   r1   )r2   r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r=   r>   )r?   endpoints_to_testendpointmethodr   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r	   r	   r
   *test_map_operations_require_authenticationJ  s   	R r   c                 C   s  |d }| j d|d |d dd}|j}d}||k}|sQtd|fd	||fd
t v s2t|r7t|nd
t|t|d }dd|i }tt	|d } }}| 
d |  }	|	
dd}
W d   n1 sqw   Y  | j d|
 dddddd}|j}d}||k}|std|fd	||fdt v st|rt|ndt|t|d }dd|i }tt	|d } }}t|j}|d }d}||u }|std|fd||ft|t|d }d d!|i }tt	|d } }}d"}|d# }||v }|s5td$|fd%||ft|t|d }d d!|i }tt	|d } }}z| j d&|
 d'didd}|j}d(d)g}||v }|std$|fd*||fdt v snt|rst|ndt|t|d }dd|i }tt	|d } }}|jd(krt|j}|d }d}||u }|std|fd||ft|t|d }d d!|i }tt	|d } }}d+}|d# }||v }|std$|fd%||ft|t|d }d d!|i }tt	|d } }}W n
 ty   Y nw zX| j d,|
 i dd}|j}d(d)g}||v }|sgtd$|fd*||fdt v sHt|rMt|ndt|t|d }dd|i }tt	|d } }}W dS  tyz   Y dS w )-z)Test marker operations with invalid data.r   r   r   r   r   r   r   r    r"   r#   r   r   r   Nrt   ru   rv   ry   rw   rx   999999999999rz   r}   r~   r   r   r   Fr   r   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   )r<   r3   r4   r5   r6   r7   r8   r9   r:   r;   r2   re   rj   rk   r   AttributeError)r?   r@   rA   r#   rB   rC   rD   rE   rF   rn   ru   r   r   rI   rG   rp   r   r	   r	   r
   test_invalid_marker_operationsd  sZ   


jlllr   )__doc__builtinsr6   _pytest.assertion.rewrite	assertionrewriter4   pytestrj   r   app_modules.dbr   r   markmaprR   rs   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   s<    "

,
;
3
8
E
>
:
Q
#
