
    Ѥha                        d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ d Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d	        Zej                  j                  d
        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zej                  j                  d        Zy)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                      t        t        j                         dz        dz  } t        t        j                         dz        dz  }| d|dS )z1Generate a unique 12-digit camera ID for testing.i  i i@B i'  08d04d)inttime)	timestamprandom_parts     LC:\Users\algun\Documents\ceba web\Ceba - Github\tests\functional\test_map.pyget_unique_camera_idr      sJ    DIIK$&')3IdiikG+,u4K_[-..    c                    |d   }| j                  d      }|j                  }g d}||v }|st        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|d   |d   d      }	|	j                  }d}||k(  }|st        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      }|j                  }d}||k(  }|st        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}}g }d}
|j                  }|
|v }|}|sd}|j                  }||v }|}|st        j                  d|fd|
|f      t        j                  |
      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }|j                  |       |st        j                  dfdf      t        j                  |      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}x}x}}y
)"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_format22s                        r   (test_map_page_display_and_access_controlrU   &   s    i D zz(#H2?2?2222?22222282228222222?2222222 [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, zz(#H&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&& LKK.K(KhmmK(m2KKKKKKKKKKKKKKKKKKKKKKKKKKK(mKKK(KKKKKKhKKKhKKKmKKKKKKKKKKKKKKr   c                 
   |d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }
|
j                  d      }ddd       | j                  j                         5  t               }|j!                  dt#        |      df       |j%                          ddd       | j                  d      }|j                  }d}||k(  }|st        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}}t'        j(                  |j*                        }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 ]#  }t1        |j                  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  }dd |iz  }t        t        j                  |            dx}}|j                  d!      xs |j                  d"      }d}||k(  }|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  }t        t        j                  |            dx}}y# 1 sw Y   xY w# 1 sw Y   xY w)$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?   r6   r7   r8   r9   r:   r;   r<   r=   r>   session_transactionr5   applicationapp_contextr   executer   commitjsonloadsr"   r[   r\   str)rB   rC   rD   unique_camera_idr&   rE   rF   rG   rH   rI   sessrW   dbr   r"   @py_format5rd   camerarJ   @py_format4rg   s                        r   &test_get_available_cameras_for_mappingrw   >   sT    i D+- [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& 
			'	'	)X


Tc*+-DE	
 			 
* zz23H&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$DdD!!!!!!!!:!!!:!!!!!!d!!!d!!!!!!D!!!D!!!!!!!!!! Jvzz+&'+;;J 
 "!:T!!!!:T!!!!!!:!!!:!!!T!!!!!!!../I:>>&3IK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19 
&	% 
*	)s   T+89T8+T58Uc                 0   |d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }
|
j                  d      }ddd       | j                  j                         5  t               }|j!                  dt#        |      df       |j%                          ddd       | j                  d       | j                         5 }
|
j                  dd      }ddd       d}d}| j                  d |||dd      }|j                  }d}||k(  }|st        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}}t'        j(                  |j*                        }|d   }d}||u }|slt        j                  d|fd ||f      t        j                  |      t        j                  |      d!z  }d"d#|iz  }t        t        j                  |            dx}x}}|d$   }d}||k(  }|slt        j                  d|fd%||f      t        j                  |      t        j                  |      d!z  }d"d#|iz  }t        t        j                  |            dx}x}}|d&   }||k(  }|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}}| j                  j                         5  t               }|j!                  d,t#        |      f      j-                         }d}||u}|st        j                  d-|fd.||f      d/t        j                         v st        j                  |      rt        j                  |      nd/t        j                  |      d0z  }d*d+|iz  }t        t        j                  |            dx}}|d1   }| d2| }||k(  }|slt        j                  d|fd%||f      t        j                  |      t        j                  |      d!z  }d"d#|iz  }t        t        j                  |            dx}x}}|d3   }d4}||k(  }|slt        j                  d|fd%||f      t        j                  |      t        j                  |      d!z  }d"d#|iz  }t        t        j                  |            dx}x}}ddd       y# 1 sw Y   QxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)5z6Test adding camera marker via POST /add_camera_marker.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   rX   zCamera Marker Test/
csrf_token v^F@c: /@/add_camera_marker?csrf_token=latlngr`   application/jsonrn   content_typer'   r   successTisz%(py1)s is %(py4)sr^   r_   assert %(py6)spy6rg   z%(py1)s == %(py4)sr`   z%(py1)s == %(py3)srq   r^   r)   rf   r   >SELECT location, added_to_map FROM cameras WHERE camera_id = ?ra   rc   ru   re   location,added_to_mapr2   r   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rj   rk   r   rl   r   rm   rn   ro   r"   fetchone)rB   rC   rD   rq   r&   rE   rF   rG   rH   rI   rr   rW   rs   rz   test_lattest_lngr   r"   rL   rJ   rt   @py_format7rv   ru   s                           r   'test_add_camera_marker_with_coordinatesr   k   s    i D+- [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& 
			'	'	)X


Tc*+-AB	
 			 
* JJsO		#	#	%XXlB/
 
& HH{{;J<H%-%-+; 
 (:  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?"d"?d""""?d"""?"""d"""""""6"66"66666"6666666"666666660 00000 0000000000 0000 00000000 
			'	'	)XL!"$
 (* 	 "!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!j!=z8*%==!%=====!%====!===%========n%**%****%***%********** 
*	)G 
&	% 
*	) 
&	%, 
*	)s1   Y%89Y2Y?=GZ%Y/2Y<?Z	Zc                 j   |d   }|d   }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }|j                  d      }ddd       | j                  d       | j                         5 }|j                  dd      }ddd       | j                  d |d   |d   |d   |d   dd      }|j                  }d}||k(  }|st        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}}t        j                  |j                        }|d   }d}||u }|slt        j                  d |fd!||f      t        j                  |      t        j                  |      d"z  }d#d$|iz  }t        t        j                  |            dx}x}}|d%   }|d   }||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}}| j                  j!                         5  t#               }|j%                  d.|d'   f      j'                         }d}||u}|st        j                  d/|fd0||f      d1t	        j
                         v st        j                  |      rt        j                  |      nd1t        j                  |      d2z  }d,d-|iz  }	t        t        j                  |	            d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   }|d   }||k(  }|slt        j                  d	|fd&||f      t        j                  |      t        j                  |      d"z  }d#d$|iz  }t        t        j                  |            dx}x}}ddd       y# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   yxY w)3z3Test adding item markers via POST /add_item_marker.r   fauna_markerr   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   ry   rz   r{   /add_item_marker?csrf_token=latitude	longitudetyperh   )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   rf   r   z2SELECT * FROM markers WHERE id = ? AND user_id = ?ra   rc   markerre   )r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rn   ro   r"   rj   rk   r   rl   r   )rB   rC   sample_marker_datarD   marker_datar&   rE   rF   rG   rH   rI   rr   rW   rz   r   r"   rL   rJ   rt   r   rv   rs   r   s                          r   %test_add_item_marker_fauna_structuresr      s    i D$^4K [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& JJsO		#	#	%XXlB/
 
& {{9*F%0%<%0%=+6v+>+6v+>	  (:  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?"d"?d""""?d"""?"""d"""""""3F 33 33333 3333333 33333333999 
			'	'	)X@)_g&
 (* 	 "!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!f~4V!44~!44444~!4444~444!44444444j!<[%<<!%<<<<<!%<<<<!<<<%<<<<<<<<k">k+&>>"&>>>>>"&>>>>">>>&>>>>>>>>f~4V!44~!44444~!4444~444!44444444 
*	)3 
&	%
 
&	%( 
*	)s%   ?\:\%K!\)\\&)\2c                    |d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }
|
j                  d      }ddd       | j                  j                         5  t               }|j!                  dt#        |      df       |j%                          ddd       | j                  d       | j                         5 }
|
j                  dd      }ddd       | j                  d dd|dd      }|j                  }d}||k(  }|st        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}}t'        j(                  |j*                        }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d z  }d!d"|iz  }t        t        j                  |            dx}x}}d#}|d$   }||v }|slt        j                  d%|fd&||f      t        j                  |      t        j                  |      d z  }d!d"|iz  }t        t        j                  |            dx}x}}| j                  d| d'|id      }|j                  }d}||k(  }|st        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}}t'        j(                  |j*                        }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d z  }d!d"|iz  }t        t        j                  |            dx}x}}d(}|d$   }||v }|slt        j                  d%|fd&||f      t        j                  |      t        j                  |      d z  }d!d"|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   #xY w))z6Test coordinate validation for invalid lat/lng values.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   rX   zValidation Test Camerary   rz   r{   r~   invalidr   r   r     r   r   Fr   r   r   r   r   zNeispravne koordinatemessager   z%(py1)s in %(py4)sr`   Nedostaju podaci)r   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rj   rk   r   rl   r   rm   rn   ro   r"   )rB   rC   rD   rq   r&   rE   rF   rG   rH   rI   rr   rW   rs   rz   r   r"   rL   rJ   rt   r   s                       r   )test_coordinate_validation_and_boundariesr      s    i D+- [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& 
			'	'	)X


Tc*+-EF	
 			 
* JJsO		#	#	%XXlB/
 
& {{;J<H%.%.+; 
 (:  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?#e#?e####?e###?###e#######"5d9o5"o5555"o555"555o5555555 {{;J<H)+;  (:	  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?#e#?e####?e###?###e#######0i000000000000000000Q 
&	% 
*	) 
&	%s$   V489WW4V>WWc           
      
   |d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }|j                  d      }ddd       | j                  j                         5  t               }d}d}|j!                  dt#        |      d| d| df       |d   }|j!                  d||d   |d   |d   |d   f      }|j$                  }|j'                          ddd       | j                  d      }|j                  }d}||k(  }|st        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}}t)        j*                  |j,                        }t/        |t0              }|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                  t0              rt        j                  t0              nd"t        j                  |      d#z  }t        t        j                  |            d}t3        |      }d$}||k\  }|st        j                  d%|fd&||f      d't        j                         v st        j                  t2              rt        j                  t2              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}d}|D ]\  }|j                  d      d+k(  r|j                  d,      |k(  r|}.|j                  d      d   k(  sF|j                  d,      k(  s[|}^ d}||u}|st        j                  d-|fd.||f      d/t        j                         v st        j                  |      rt        j                  |      nd/t        j                  |      d0z  }d1d2|iz  }	t        t        j                  |	            dx}}|d   }d}||k(  }|slt        j                  d|fd3||f      t        j                  |      t        j                  |      d4z  }d5d6|iz  }t        t        j                  |            dx}x}}|d   }|k(  }|st        j                  d|fd7||f      t        j                  |      d8t        j                         v st        j                  |      rt        j                  |      nd8d9z  }d1d2|iz  }	t        t        j                  |	            dx}}|d   }|k(  }|st        j                  d|fd7||f      t        j                  |      d:t        j                         v st        j                  |      rt        j                  |      nd:d9z  }d1d2|iz  }	t        t        j                  |	            dx}}d}||u}|st        j                  d-|fd.||f      d;t        j                         v st        j                  |      rt        j                  |      nd;t        j                  |      d0z  }d1d2|iz  }	t        t        j                  |	            dx}}|d   }d   }||k(  }|slt        j                  d|fd3||f      t        j                  |      t        j                  |      d4z  }d5d6|iz  }t        t        j                  |            dx}x}}|d   }|d   }||k(  }|slt        j                  d|fd3||f      t        j                  |      t        j                  |      d4z  }d5d6|iz  }t        t        j                  |            dx}x}}|d   }|d   }||k(  }|slt        j                  d|fd3||f      t        j                  |      t        j                  |      d4z  }d5d6|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   xY w# 1 sw Y   JxY w)<z=Test marker location retrieval via GET /get_marker_locations.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   r|   r}   dINSERT INTO cameras (user_id, camera_id, camera_name, location, added_to_map) VALUES (?, ?, ?, ?, ?)zLocation Test Camerar   r2   r   UINSERT INTO markers (user_id, type, latitude, longitude, name) VALUES (?, ?, ?, ?, ?)r   r   r   rh   /get_marker_locationsr'   r   rZ   r[   r"   r\   r]      )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)slen)r   r^   r)   r   zassert %(py8)spy8ru   idra   rc   camera_markerre   rf   r   r   r   r   r   r   r   r   r   item_marker)r   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rj   rk   r   rl   r   	lastrowidrm   rn   ro   r"   r[   r\   r   )rB   rC   r   rD   rq   r&   rE   rF   rG   rH   rI   rr   rW   rs   r   r   r   cursor	marker_idr   r"   rt   rJ   @py_assert5r   @py_format9r   r   r   rv   rL   s                                  r   #test_get_marker_locations_retrievalr     s    i D+- [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& 
			'	'	)X 


rc*+-CzQRS[R\E]_`a	
 )8ck&);z+BKP[D\^ijp^qr
 $$	
		' 
*, zz12H&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$DdD!!!!!!!!:!!!:!!!!!!d!!!d!!!!!!D!!!D!!!!!!!!!!t99>933tt9 MK::f)fjj.>BR.R"MZZ;v#666::d;Ky;X K	  !%$=$$$$=$$$$$$=$$$=$$$$$$$$$$ :$:: $::::: $:::: :::$::::::::$0$0000$000$0000000000000000%1%1111%111%1111111111111111 #";d"""";d"""""";""";"""d"""""""v5+f"55"55555"5555555"55555555z"=k*&=="&====="&===="===&========{#?{;'??#'?????#'????#???'????????k 
&	% 
*	)s   g+8A8g8+g58hc           
         |d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }
|
j                  d      }ddd       d}d}| j                  j                         5  t               }|j!                  dt#        |      d| d| df       |j%                          ddd       | j                  d       | j                         5 }
|
j                  dd      }ddd       | j                  d |ddd      }|j                  dk(  r|j                  }d}||k(  }|st        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|j                  }d }||k(  }|st        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}}t'        j(                  |j*                        }|d!   }d"}||u }|slt        j                  d#|fd$||f      t        j                  |      t        j                  |      d%z  }d&d'|iz  }t        t        j                  |            dx}x}}| j                  j                         5  t               }|j!                  d(t#        |      f      j-                         }d}||u}|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  }t        t        j                  |            dx}}|d.   }d}||u }|slt        j                  d#|fd$||f      t        j                  |      t        j                  |      d%z  }d&d'|iz  }t        t        j                  |            dx}x}}|d/   }d0}||k(  }|slt        j                  d|fd1||f      t        j                  |      t        j                  |      d%z  }d&d'|iz  }t        t        j                  |            dx}x}}ddd       y# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   yxY w)2z5Test deleting camera markers via POST /delete_marker.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   r|   r}   r   zDelete Test Camerar   r2   ry   rz   r{   /delete_marker?csrf_token=ru   r   r   r   r     r   r'   r   Tr   r   r   r   r   r   ra   rc   re   rf   r   r   r   r   r   r   )rB   rC   rD   rq   r&   rE   rF   rG   rH   rI   rr   rW   r   r   rs   rz   r   r"   rL   rJ   rt   r   ru   rv   s                           r   test_delete_camera_markerr   Z  sd    i D+- [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& HH				'	'	)X


rc*+-AhZqQYPZC[]^_	
 			 
* JJsO		#	#	%XXlB/
 
& {{7
|D)9+3  (:  ;H s"##*s*#s****#s******x***x***#***s*******&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?"d"?d""""?d"""?"""d""""""" 
			'	'	)XL!"$
 (* 	 "!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!j!)T)!T))))!T)))!)))T)))))))n%**%****%***%********** 
*	)M 
&	% 
*	) 
&	%, 
*	)s2   X<A X!%X.2GX;X!X+.X8;Yc           
      
   |d   }|d   }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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                         5 }|j                  d      }ddd       | j                  j                         5  t               }|j                  d|d   |d   |d   |d   f      }|j                   }|j#                          ddd       | j                  d       | j                         5 }|j                  dd      }ddd       | j                  d t%              |d   dd      }|j                  dk(  r|j                  }d}||k(  }|st        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|j                  }d}||k(  }|st        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}}t'        j(                  |j*                        }|d    }d!}||u }|slt        j                  d"|fd#||f      t        j                  |      t        j                  |      d$z  }d%d&|iz  }t        t        j                  |            dx}x}}| j                  j                         5  t               }|j                  d'|f      j-                         }d}||u }|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  }	t        t        j                  |	            dx}}ddd       y# 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   yxY w)-z3Test deleting item markers via POST /delete_marker.r   structure_markerr   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   r   r   r   r   rh   ry   rz   r{   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   re   rf   r   )r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rj   rk   r   rl   r   rm   rp   rn   ro   r"   r   )rB   rC   r   rD   r   r&   rE   rF   rG   rH   rI   rr   rW   rs   r   r   rz   r   r"   rL   rJ   rt   r   r   rv   s                            r   test_delete_item_markerr     s    i D$%78K [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9% 
& 
			'	'	)Xck&);z+BKP[D\^ijp^qr
 $$	
		 
* JJsO		#	#	%XXlB/
 
& {{7
|D),Y+6v+>  (:  ;H s"##*s*#s****#s******x***x***#***s*******&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?"d"?d""""?d"""?"""d""""""" 
			'	'	)X0L
 (* 	 v~vvv 
*	)I 
&	% 
*	) 
&	%, 
*	)s2   ?T3A
T&&T3?CU T#&T03T= U	c           
         |d   }|d   }t               }| j                  d|d   |d   d      }|j                  }d}||k(  }	|	st        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                         5 }|j                  d      }ddd       | j                  j                         5  t               }d}d}|j!                  dt#        |      d| d| df       |d   }|j!                  d||d   |d   |d   |d   f      }|j$                  }|j'                          ddd       | j                  dddi       | j                  d|d   |d   d      }|j                  }d}||k(  }	|	st        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       }|j                  }d!}||k(  }	|	st        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}	}t)        j*                  |j,                        }|D ]j  }|j                  d      d#k(  r*|j                  }d$}	 ||	      }||k7  }|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(t        j                         v st        j                  |      rt        j                  |      nd(d)z  }d*d+|iz  }t        t        j                  |            dx}x}	x}}C|j                  }d$}	 ||	      }|k7  }|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,t        j                         v st        j                  |      rt        j                  |      nd,d)z  }d*d+|iz  }t        t        j                  |            dx}x}	x}}m | j                  d-       | j                         5 }|j                  dd      }ddd       | j                  d. d/d0|d1d23      }|j                  }d4}||k(  }	|	st        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}	}t)        j*                  |j,                        }|d5   }d6}	||	u }|slt        j                  d7|fd8||	f      t        j                  |      t        j                  |	      d9z  }d:d;|iz  } t        t        j                  |             dx}x}}	d<}|d=   }	||	v }|slt        j                  d>|fd?||	f      t        j                  |      t        j                  |	      d9z  }d:d;|iz  } t        t        j                  |             dx}x}}	y# 1 sw Y   BxY w# 1 sw Y   xY w# 1 sw Y   %xY w)@z-Test users can only manage their own markers.r   limitedr   r   r   r    r!   r   r#   r%   r&   r   r   r   NrW   r|   r}   r   zIsolation Test Camerar   r2   r   r   r   r   r   rh   z/logoutrz   r{   r   r'   r   ru   r   )!=)zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} != %(py8)sr   rq   )r   r   r_   r   r   zassert %(py10)spy10regular_marker_idry   r~   g      G@g      0@r   r   r     r   Fr   r   r   r   r      Kamera nije pronađenar   r   r   )r   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   ri   r5   rj   rk   r   rl   r   r   rm   rn   ro   r"   )!rB   rC   r   user_regularuser_limitedrq   r&   rE   rF   rG   rH   rI   rr   regular_user_idrs   r   r   r   r   r   r   limited_markersr   r   @py_assert7r   @py_format11rz   r"   rL   rJ   rt   r   s!                                    r   %test_user_isolation_marker_managementr     s    i(Li(L+- [[ , ,1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, 
	#	#	%((9- 
& 
			'	'	)X 


rc"235LQYPZZ[\d[eNfhij	
 )8ck&1;z3JKXcLdfqrxfyz
 #,,
		' 
*, KK	r 2K3[[ , ,1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, zz12H&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&jj/O "::f)::7d7:d#7#'77777#'777777767776777:777d777#777777'7777'777777777::8d8:d#8#'88888#'888888868886888:888d888#888888'8888'888888888	 " JJsO		#	#	%XXlB/
 
& {{;J<H%)%)+; 
 (:  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?#e#?e####?e###?###e########6tI6#6666#666#6666666666A 
&	% 
*	)Z 
&	%s%   	a=A8a(?a5a%(a25a?c           	      
   |d   }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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      }	|	j                  }d}||k(  }|st        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                  j                         5  t               }
|
j                  d      j                         D cg c]  }|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}}|
j                  d      j                         D cg c]  }|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}}|
j                  d       j                         D cg c]  }|d   	 }}g d!}|D ]  }||v }|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  }d&d'|iz  }t        t        j                  |            d} 	 ddd       yc c}w c c}w c c}w # 1 sw Y   yxY w)(z6Test database schema migrations for map functionality.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   NrY   r'   r   zPRAGMA table_info(cameras)r2   r   r   r   columnsr   rf   r   r   z1SELECT name FROM sqlite_master WHERE type='table'r   markerstableszPRAGMA table_info(markers))r   rW   r   r   r   rh   )z%(py0)s in %(py2)scolmarker_columns)r   r   zassert %(py4)sr_   )r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r5   rj   rk   r   rl   fetchall)rB   rC   rD   r&   rE   rF   rG   rH   rI   r   rs   rowr   rL   rJ   rv   r   r   expected_columnsr   @py_format3rt   s                         r   'test_database_schema_migration_handlingr   &  s|    i D [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, zz23H&3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&& 
			'	'	)X &(ZZ0L%M%V%V%XY%Xc3q6%XY(~((((~(((~(((((((((((((((($zW$$$$zW$$$z$$$$$$W$$$W$$$$$$$ %'JJ/b$c$l$l$no$nS#a&$no"yF""""yF"""y""""""F"""F""""""" -/JJ7S,T,],],_`,_S#a&,_`U#C.((((3.((((((3(((3((((((.(((.((((((( $ 
*	) Z
 p a 
*	)s9   ,U	UE-UUCUU"CUUUc                    g d}|D ]  \  }}|dk(  r| j                  |      }n| j                  |i       }|j                  }g d}||v }|st        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g }d}
|j                  }|
|v }|}|sd}|j                  }||v }|}|st        j                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }	dd|	iz  }|j                  |       |st        j                  dfdf      t        j                  |      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}x}x}} y)z+Test map operations require authentication.))r   GET)rY   r   )r   r   )z/add_camera_markerPOST)z/add_item_markerr   )z/delete_markerr   r   )rn   r   r   r   r   r   r   r   Nr   ry   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,   r0   r1   r2   r3   r4   )r5   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r   r@   rA   )rB   endpoints_to_testendpointmethodr   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   s                        r   *test_map_operations_require_authenticationr   J  s    .&U?zz(+H{{8"{5H ##66#6666#666666x666x666#6666666666 3&K3K(++K3++KwK(:K:KKw:K/KKKKK3+KKK3KKKKKK(KKK(KKK+KKKKKKKw:KKKKwKKKKKK(KKK(KKK:KKKKKKKKKKKKKKKK .r   c                    |d   }| j                  d|d   |d   d      }|j                  }d}||k(  }|st        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       | j                         5 }	|	j                  dd      }
ddd       | j                  d
 ddddd      }|j                  }d}||k(  }|st        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}}t        j                  |j                        }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d d!|iz  }t        t        j                  |            dx}x}}d"}|d#   }||v }|slt        j                  d$|fd%||f      t        j                  |      t        j                  |      dz  }d d!|iz  }t        t        j                  |            dx}x}}	 | j                  d&|
 d'did      }|j                  }d(d)g}||v }|st        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(  rt        j                  |j                        }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d d!|iz  }t        t        j                  |            dx}x}}d+}|d#   }||v }|slt        j                  d$|fd%||f      t        j                  |      t        j                  |      dz  }d d!|iz  }t        t        j                  |            dx}x}}	 | j                  d,|
 i d      }|j                  }d(d)g}||v }|st        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# 1 sw Y   xY w# t        $ r Y w xY w# t        $ r Y yw xY w)-z)Test marker operations with invalid data.r   r   r   r   r    r!   r   r#   r%   r&   r   r   r   Nry   rz   r{   r~   r|   r}   999999999999r   r   r   r   r   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r5   ri   rn   ro   r"   AttributeError)rB   rC   rD   r&   rE   rF   rG   rH   rI   rr   rz   r   r"   rL   rJ   rt   r   s                    r   test_invalid_marker_operationsr   d  sk    i D [[$$1[ N %%,,%,,,,%,,,,,,>,,,>,,,%,,,,,,,,,, JJsO		#	#	%XXlB/
 
& {{;J<H%.%.+9 
 (:  ;H &3&3&&&&3&&&&&&8&&&8&&&&&&3&&&&&&&::hmm$D	?#e#?e####?e###?###e########6tI6#6666#666#6666666666;;!=j\J"'$  ,>  ? ##1Sz1#z1111#z111111x111x111#111z11111113&::hmm,D	?+e+?e++++?e+++?+++e+++++++%8i8%8888%888%8888888888	;;!;J<H#%+=  ?
 ##1Sz1#z1111#z111111x111x111#111z1111111W 
&	%@    s2   X'HX% 7C X4 X"%	X10X14	Y ?Y )__doc__builtinsr9   _pytest.assertion.rewrite	assertionrewriter7   pytestrn   r   app_modules.dbr   r   markmaprU   rw   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s  0     !/ L L. )2 )2X 8+ 8+v 05 05f 51 51p B@ B@J ;+ ;+| 7 7t N7 N7b  )  )F L L2 ; ;r   