
    u1j                         d dl Zd dlmc mZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZ d dlmZ defd	Zd
 Zd Zd Zd Zd Zd ZdS )    N)
TestClient)Sessionselect)engineinit_db)app)ChildScheduleBlock)admin_headersreturnc                     t          t                    5 } |                     t          t                                        t          j                                                            j        cd d d            S # 1 swxY w Y   d S )N)	r   r   execr   r	   order_by
sort_orderfirstid)sessions    C/home/agent/projects/FamilyDashboard/backend/tests/test_schedule.pyfirst_child_idr   
   s    	 QG||F5MM2253CDDEEKKMMPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs   AA==BBc                  N	   t                       t          t                    5 } t                      |                     dddi          }d d d            n# 1 swxY w 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          f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}||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 |d         D             }t!          |          }|sd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 S )"N/api/schedule/summarydate
2026-06-16params   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)ssummarypy0py2py5assert %(py7)spy7c              3   4   K   | ]}|d          k    |V  dS child_idN .0itemr)   s     r   	<genexpr>zStest_schedule_summary_uses_school_blocks_and_external_activities.<locals>.<genexpr>   3      ]]$Z@PT\@\@\@\@\@\@\]]    childrenschool_startz08:20z%(py1)s == %(py4)spy1py4assert %(py6)spy6leave_home_timez08:05
school_endz11:50has_afternoon_schoolFisz%(py1)s is %(py4)safternoon_free_fromc              3   .   K   | ]}|d          dk    V  dS )titlezGitarre ZI 205Nr*   r,   blocks     r   r.   zStest_schedule_summary_uses_school_blocks_and_external_activities.<locals>.<genexpr>   s,      \\euW~!11\\\\\\r0   external_activities,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr"   r#   r6   )r   r   r   r   getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationnextjsonrF   )clientr    @py_assert1@py_assert4@py_assert3@py_format6@py_format8child@py_assert0@py_assert2@py_format5@py_format7r)   s               @r   @test_schedule_summary_uses_school_blocks_and_external_activitiesr_      s   III	C UF!##**4fl=S*TTU U U U U U U U U U U U U U U %#%#%%%%%%%%%%#%%%%%%%%%%%%7%%%%%7%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%]]]]',,.."<]]]]]E +G+ G++++++++++ G+++++ ++++G+++++++++++++++++++++++++++"#.w.#w..........#w.....#....w...........................)')'))))))))))')))))))))')))))))))))))))))))))))))))'(1E1(E1111111111(E11111(1111E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&'272'72222222222'722222'22227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\\uEZ?[\\\\3\\\\\\\\\\\\\\\\3\\\\\3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\   (AAAc                    	 t                       t          t                    5 } t                      	|                     dddi          }d d d            n# 1 swxY w Y   t          	fd|                                d         D                       }|d         }d}||u }|slt          j        d	|fd
||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}d |d         D             }t          |          }|sd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 S )Nr   r   r   r   c              3   4   K   | ]}|d          k    |V  dS r(   r*   r+   s     r   r.   zDtest_schedule_summary_turnen_requires_sports_gear.<locals>.<genexpr>%   r/   r0   r1   requires_sports_gear_todayTr<   r>   r4   r7   r8   c              3   .   K   | ]}|d          dk    V  dS )rA   TurnenNr*   rB   s     r   r.   zDtest_schedule_summary_turnen_requires_sports_gear.<locals>.<genexpr>'   s+      NNeuW~)NNNNNNr0   todays_blocksrE   rF   rG   )r   r   r   r   rH   rR   rS   rJ   rK   rO   rP   rQ   rF   rL   rM   rN   )
rT   r    rZ   r[   rW   r\   r]   r^   rU   r)   s
            @r   1test_schedule_summary_turnen_requires_sports_gearrg      s<   III	C UF!##**4fl=S*TTU U U U U U U U U U U U U U U ]]]]',,.."<]]]]]E-.6$6.$6666666666.$66666.6666$666666666666666666666666666NNu_7MNNNN3NNNNNNNNNNNNNNNN3NNNNN3NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNr`   c                  N   t                       t          t                    5 } |                     d          }d d d            n# 1 swxY w 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}}|                                }d	 |d
         D             d d         }g 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         }t          |          }d}||k    }|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}}d |d         D             }t          |          }|sd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         D             }t          |          }|sd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 S )N/api/schedule/currentr   r   r   responser!   r%   r&   c                     g | ]
}|d          S )labelr*   )r,   days     r   
<listcomp>z;test_schedule_current_returns_week_grid.<locals>.<listcomp>1   s    555SCL555r0   weekdays   )MontagDienstagMittwoch
DonnerstagFreitagr3   r4   r7   r8   r1      )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)slen)r"   r#   r6   r&   zassert %(py9)spy9c              3   &   K   | ]}|d          V  dS )is_lunch_breakNr*   )r,   slots     r   r.   z:test_schedule_current_returns_week_grid.<locals>.<genexpr>3   s(      EE$t$%EEEEEEr0   
time_slotsrE   rF   rG   c              3   B   K   | ]}|d          dk    o	|d         du V  dS )rA   u   Mädchenriegecounts_as_schoolFNr*   rB   s     r   r.   z:test_schedule_current_returns_week_grid.<locals>.<genexpr>4   s=      tt\auW~0WU;M5NRW5Wttttttr0   blocks)r   r   r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rS   rw   rF   )rT   rj   rU   rV   rW   rX   rY   datar[   r\   r]   r^   @py_assert6@py_assert5@py_format10s                  r   'test_schedule_current_returns_week_gridr   *   s   III	C 7F::5667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??D55D$4555bqb9x=x=x=xx9=xxxxxxxxxxx9=xxxxxx9xxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxJ%3  %A% A%%%%%%%%%% A%%%%%%%%%%%%3%%%%%3%%%%%%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%EE$|2DEEEE3EEEEEEEEEEEEEEEE3EEEEE3EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEtteijrestttt3tttttttttttttttt3ttttt3ttttttttttttttttttttttttttttttttts   AA	A	c                  t	   t                       t          t                    5 } t          |           }t	                      }|                     d||ddddddd	          }|                                d
         d         |                     d |ddi	          }|                     d                                          }| 	                    d |          }|                     d                                          }d d d            n# 1 swxY w 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}
}	|                                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}}
fd|d         D             }t'          |          }
|
sd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}}
|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}
}	fd#|d         D             }t)          |          }
|
sd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 S )%N/api/admin/schedule/blocks   Testfachz15:20z16:05school_subjectTr)   weekdayrA   
start_timeend_time
block_typer~   headersrS   schedule_blockr   z/api/admin/schedule/blocks/rA      Testfach geändertri   )r      r   r   creater!   r%   r&   r3   r4   r7   r8   c              3   H   K   | ]}|d          k    o|d         dk    V  dS )r   rA   r   Nr*   r,   rC   block_ids     r   r.   zOtest_admin_schedule_crud_and_delete_removes_from_public_view.<locals>.<genexpr>Q   s<      qqV[uT{h&Q5>=Q+Qqqqqqqr0   r   rE   rF   rG   r   deletec              3   0   K   | ]}|d          k    V  dS )r   Nr*   r   s     r   r.   zOtest_admin_schedule_crud_and_delete_removes_from_public_view.<locals>.<genexpr>S   s,      KK5uT{h&KKKKKKr0   all)r   r   r   r   r   postrS   patchrH   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rF   r   )rT   r   r)   r   r   currentr   after_deleterU   rV   rW   rX   rY   r[   r\   r]   r^   r   s                    @r   <test_admin_schedule_crud_and_delete_removes_from_public_viewr   7   st   III	C BF''!##($#%#.$(   
 
 ;;==!1248E8EEw^eg{]|}}**455::<<GXGGQXYYzz"9::??AA)B B B B B B B B B B B B B B B, $$$$$$$$$$$$$$$$$$$$$$$$6$$$$$6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$::<<()'2J6JJ26JJJJJJJJJJJ26JJJJJJ2JJJJ6JJJJJJJJJJJJJJJJJJJJJJJJJJJJqqqq_fgo_pqqqq3qqqqqqqqqqqqqqqq3qqqqq3qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq$$$$$$$$$$$$$$$$$$$$$$$$6$$$$$6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$KKKKL4JKKKK3KKKKKKKKKKKKKKKK3KKKKK3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KKKKKs   C#DDDc                     t                       t          t                    5 } t          |           }t	                      }|                     d||ddddddd	          }d d d            n# 1 swxY w 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}}|                                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 S )Nr      u   Überlappungz08:30z08:50r   Tr   r   r   r   r   rj   r!   r%   r&   warningoverlapr3   r4   r7   r8   )r   r   r   r   r   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rS   )rT   r   r)   rj   rU   rV   rW   rX   rY   r[   r\   r]   r^   s                r   #test_admin_schedule_overlap_warningr   V   sX   III	C 
F''!##;;($'%#.$(   
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
" &3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&==??9%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2222222222222222222222s   >A--A14A1c                     t                       t          t                    5 } t          |           }|                     d|ddi          }|                     d|ddi          }d d d            n# 1 swxY w 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}}|                                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}
}|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}}|                                d         }	|	s:ddt          j        |	          iz  }t          t          j        |                    d }	d S )Nz'/api/admin/schedule/seed-from-referenceconfirmNOPEr   RESET_STUNDENPLANi  r   r   missingr!   r%   r&   detailcodeconfirmation_requiredr3   r4   r7   r8   r   	confirmedr   zassert %(py1)sr5   )r   r   r   r   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rS   )rT   r   r   r   rU   rV   rW   rX   rY   r[   r\   r]   r^   @py_format2s                 r   7test_seed_from_reference_requires_explicit_confirmationr   m   s   III	C CF''++GQX`ikq_r+ssKK ISZbk  nA  bBK  C  C	C C C C C C C C C C C C C C C
 %#%#%%%%%%%%%%#%%%%%%%%%%%%7%%%%%7%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%<<>>(#F+F/FF+/FFFFFFFFFFF+/FFFFFF+FFFF/FFFFFFFFFFFFFFFFFFFFFFFFFFFF 'C' C'''''''''' C''''''''''''9'''''9'''''' ''''C'''''''''''''''''''''''''''>>H%%%%%%%%%%%%%%%%%%%%%%%%%%%s   AA33A7:A7)builtinsrL   _pytest.assertion.rewrite	assertionrewriterJ   fastapi.testclientr   sqlmodelr   r   app.db.sessionr   r   app.mainr   
app.modelsr	   r
   tests.conftestr   intr   r_   rg   r   r   r   r   r*   r0   r   <module>r      s.                 ) ) ) ) ) ) $ $ $ $ $ $ $ $ * * * * * * * *       + + + + + + + + ( ( ( ( ( (Q Q Q Q Q
] ] ] O O O
u 
u 
uL L L>3 3 3.
& 
& 
& 
& 
&r0   