o
    .j{                     @   sD  d Z ddlmZmZmZmZ ddlZddlmZmZm	Z	m
Z
 ddlmZ ejee	gddd Zejd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdddgejd ed!d"d#d$d%d&ed!d"d#gd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$dS );zPThis tests the parsing of the VAVAILABILITY component as defined in :rfc:`7953`.    )datedatetime	timedeltatimezoneN)BUSYTYPEAvailability	AvailableCalendar)IncompleteComponent)paramsc                 C   s   | j S zThe component class.)param)request r   R/home/thesage/.local/lib/python3.10/site-packages/icalendar/tests/test_rfc_7953.pyrfc_7953_component_class      r   c                 C   s   |  S r   r   )r   r   r   r   rfc_7953_component   r   r   c                 C   s   | j }|jdks
J dS )zTest the UID property.z$0428C7D2-688E-4D2E-AC52-CD112E2469DFN)
rfc_7953_1uidavailabilitiesavailabilityr   r   r   test_uid   s   r   c                 C   s(   | j }|jdks
J |jjdksJ dS )zTest the ORGANIZER property.mailto:bernard@example.comzbernard@example.comN)r   	organizeremailr   r   r   r   test_organizer   s   r   c              
   C   s,   | j }|j|tddddddksJ dS )zTest the DTSTAMP property.  
                N)r   DTSTAMPlocalize_utcr   )r   tzpr   r   r   r   test_dtstamp$   s   &r'   c                 C   s,   | j }t|jdksJ |j|jksJ dS )zTest the subcomponents.   N)r   lensubcomponents	availabler   r   r   r   test_subcomponents*   s   r,   c                   C   s   t  jtjks	J d S N)r   	busy_typer   BUSY_UNAVAILABLEr   r   r   r   test_busy_type_default1   s   r0   c                  C   s2   t  } tj| _| jtjksJ | d dksJ d S )Nr   BUSY)r   r   r1   r.   )r   r   r   r   test_set_busy_type5   s   r2   c                 C   s*   t  }|jtjksJ |j| ksJ d S r-   )r   newr.   r   r/   r   )r   r   r   r   r   test_new_sets_default<   s   r4   c                 C   sH   t jdd}tjtj|gd}t|jdksJ |jd jdks"J d S )N
Available1)summary)r.   
componentsr(   r   )r   r3   r   r   r1   r)   r+   r6   )dont_validate_newavaiabler   r   r   r   /test_create_new_availability_with_subsomponentsB   s   r:   c                  C   sH   t t} t  W d   n1 sw   Y  dt| jv s"J dS )+Start is required and not set automaticallyNz2Available start must be a datetime with a timezone)pytestraises
ValueErrorr   r3   strvalue)er   r   r   test_avaiable_needs_startI   s   
rB   keystartendr@   r   r   r    r!   r"   r#   c                 C   s^   | |i}t t}|jdi | W d   n1 sw   Y  |  dt|jv s-J dS )r;   Nz# must be a datetime with a timezoner   )r<   r=   r>   r3   r?   r@   )rC   r@   r   kwrA   r   r   r   test_avaiable_needs_timezoneP   s
   rG   c              	   C   s6   |  tdddddd}tj|d}|j|ksJ dS )	zCreate with a valid start.r   r   r    r!   r"   r#   )rD   N)r%   r   r   r3   rD   )r&   rD   r+   r   r   r   test_create_with_start\   s   rH   c              	   C   s^   |  tdddddd}|  tdddddd}tj||d}|j|ks&J |j|ks-J d	S )
z"Create with a valid start and end.r   r   r    r!   r"   r#      )rD   rE   N)r%   r   r   r3   rD   rE   )r&   rD   rE   r+   r   r   r   test_create_with_start_and_endc   s
   rJ   c              	   C   sL   | tdddddd| _| tdddddd| _| jtdd	ks$J d
S )*Check the computation of end and duration.r   r   r    r!   r"   r#   rI   r(   hoursN)r%   r   rD   rE   durationr   r   r&   r   r   r   test_duration_from_endl   s   rP   c              
   C   s`   | tdddddd| _tdd| _| jtddksJ | j| tdddd	ddks.J d
S )rK   r   r   r    r!   r"   r#   r(   rL   rI   N)r%   r   rD   r   DURATIONrN   rE   rO   r   r   r   #test_duration_and_end_from_durations   s   &rR   c              	   C   s:   | tdddddd| _| jdu sJ | jdu sJ dS )rK   r   r   r    r!   r"   r#   N)r%   r   rD   rN   rE   rO   r   r   r   test_start_only_has_no_duration{   s   rS   c                 C   sR   t dd| _tt}| j W d   n1 sw   Y  dt|jv s'J dS )z/We miss information and cannot compute the end.r(   rL   Nz Cannot compute end without start)r   rQ   r<   r=   r
   rE   r?   r@   )r   rA   r   r   r   test_missing_info_for_end   s
   rT   c              	   C   s`   | tdddddd| _tt}| j W d   n1 s w   Y  dt|jv s.J dS )	zWe only have a duration.r   r   r    r!   r"   r#   Nz%Cannot compute duration without start)	r%   r   rE   r<   r=   r
   rN   r?   r@   )r   r&   rA   r   r   r   test_missing_info_for_duration   s
   rU   c              
   C   s  | j }|jdks
J |jdksJ |jtddddddtjd	ks"J |j|tddd
dks1J |j	|tddd
dks@J |j
d }|jdksLJ |jdksSJ |j|tddd
ddkscJ |j	|tddd
ddkssJ t|jdks|J |jd d dgksJ |jd d g dksJ |jdksJ |jg ksJ |j
d }|jdksJ |jdksJ |j|tdddddksJ |j	|tdddddksJ t|jdksJ |jd d dgksJ |jdksJ |jg ksJ dS )4Test that we get all the right values after parsing.r   z$84D0F948-7FC6-4C1D-BBF3-BA9827B424B5r   r   r    r!   r"   r#   tzinfo   America/Montreal   r   z$7B33093A-7F98-4EED-B381-A5652530F04Dz%Monday to Thursday from 9:00 to 17:00	      r(   freqWEEKLYbyday)MOTUWETHzMain Officez$DF39DC9E-D8C3-492F-9101-0434E8FC1896zFriday from 9:00 to 12:00   zBranch OfficeN)
rfc_7953_2r   r   stampr   r   utcrD   localizerE   r+   r6   r)   rruleslocationexdates)r   r&   aa1a2r   r   r   test_example_2   s2   "
  
  rp   c              
   C   sh  | j }|jd }|jdksJ |jdksJ |jtdddddd	tjd
ks'J |j|	tddddks6J |j
|	tdddddksFJ |jd }|jdksRJ |jdksYJ |j|	tdddddksiJ |j
|	tdddddksyJ t|jdksJ |jd d dgksJ |jd d g dksJ |jdksJ |jg ksJ t|jdksJ dS )rV   r   r   z$BE082249-7BDD-4FE0-BDBA-DE6598C32FC9r   r   r    r!   r"   r#   rW   rY   rZ         z$54602321-CEDB-4620-9099-757583263981z#Monday to Friday from 9:00 to 17:00r\   r]   r(   r^   r_   r`   )ra   rb   rc   rd   FRMontrealN)
rfc_7953_3r   r   r   rg   r   r   rh   rD   ri   rE   r+   r6   r)   rj   rk   rl   )	calendarsr&   calendarrm   rn   r   r   r   test_example_3   s$   
" 
  rx   )%__doc__r   r   r   r   r<   	icalendarr   r   r   r	   icalendar.errorr
   fixturer   r   r   r   r'   r,   r0   r2   r4   r:   rB   markparametrizerG   rH   rJ   rP   rR   rS   rT   rU   rp   rx   r   r   r   r   <module>   s@    

	