o
    .j #                  
   @  s  d Z ddlmZ ddlmZmZmZmZmZ ddlZddl	m
Z
mZmZmZmZmZ ejZejd`dd	Zejd
ddgZejdddgZeedd Zedd Zeedd Zeedd Zdd Zedd Zeejdddgdd  Zed!d" Zejd#d$d%gZ e ed&d' Z!ejd(d)d*gZ e d+d, Z"e d-d. Z#e d/d0 Z$d1d2 Z%eje
eeegd3dad5d6Z&ejd7d8gd3dbd:d;Z'dcd<d=Z(ddd>d?Z)ddd@dAZ*dcdBdCZ+dcdDdEZ,dddFdGZ-dedHdIZ.ejdJedKddedKdddLedKddeddMfedNdgdedOdPZ/ejdJedQdReddRgdedSdTZ0dedUdVZ1dedWdXZ2dYdZ Z3d[d\ Z4ejd]e3e4gd^d_ Z5dS )fzThis tests additional attributes from :rfc:`7986`.

Some attributes are also available as ``X-*`` attributes.
They are also considered.
    )annotations)datedatetimetime	timedeltatimezoneN)CalendarEventJournalTodovTextvUrireturnr   c                   C  s   t  S )zEmpty calendar)r    r   r   R/home/thesage/.local/lib/python3.10/site-packages/icalendar/tests/test_rfc_7986.pycalendar      r   namezCompany Vacation DayszCalendar NamepropNAMEX-WR-CALNAMEc                 C  s   | | | |j|ksJ dS )zGet the name of the calendar.Naddcalendar_name)r   r   r   r   r   r   test_get_calendar_name      r   c                 C  s8   | |_ |j | ks
J |d | ksJ |d | ksJ dS )zRSetting the name overrides the old attributes and sets both NAME and X-WR-CALNAME.r   r   Nr   )r   r   r   r   r   test_set_calendar_name$      r   c                 C  s    d||< | |_ |j | ksJ dS )z.Setting the name overrides the old attributes.z
Other NameNr   )r   r   r   r   r   r   test_replace_name-   s   r   c                 C  s"   | ||  |`|jdu sJ dS )zDelete the name.Nr   )r   r   r   r   r   r   test_del_name6   s   r    c                 C  s   | j du sJ dS )zWe have no name by default.Nr   r   r   r   r   test_default_name?      r"   c                 C  s8   || _ | j |ks
J | d |ksJ | d |ksJ dS )zHSetting calendar_name sets both NAME and X-WR-CALNAME for compatibility.r   r   Nr   r   r   r   r   r   *test_setting_the_name_sets_both_propertiesD   r   r%   order      c                 C  sR   |dkr
|  d| |  dtdddid |dkr |  d| | j|ks'J dS )	z;Add several names and use the one without a language param.r'   r   KalendernameLANGUAGEdeparamsr(   N)r   r   r   )r   r   r&   r   r   r   2test_multiple_names_use_the_one_without_a_languageM   s   r.   c                 C  *   |  d| |  dd | j|ksJ dS )z(NAME is more important that X-WR-CALNAMEr   r   asdNr   r$   r   r   r   test_name_is_preferredY   s   r1   descDESCRIPTIONzX-WR-CALDESCc                 C     |  || | j|ksJ dS zGet the valueN)r   description)r   r2   r   r   r   r   test_descriptiong   r   r7   color_paramCOLORX-APPLE-CALENDAR-COLORc                 C  r4   r5   r   colorr   r8   r<   r   r   r   test_get_calendar_colorw   s   r>   c                 C  s.   |  || | `| jdksJ || vsJ dS )zDelete the value Nr;   r=   r   r   r   test_delete_calendar_color~   s   r@   c                 C  s4   |  |d || _| j|ksJ | d |ksJ dS )z,Set the color and it replaces what is there.greenr9   Nr;   r=   r   r   r   test_set_calendar_color   s   rB   c                 C  r/   )z+We prefer COLOR over X-APPLE-CALENDAR-COLORr9   r:   rA   Nr;   )r   r<   r   r   r   test_get_COLOR_first      rC   r,   !Calendar | Event | Todo | Journalc                 C  s   |   S )z6An empty component that should have a color attribute.paramrequestr   r   r   color_component   s   rJ   bluez#123456strc                 C     | j S )zReturn a color.rF   rH   r   r   r   r<      r   r<   c                 C  s   | j dksJ dS )zThere is no color by default.r?   Nr<   rJ   r   r   r   test_default_color   r#   rP   c                 C  s(   | |_ |j | ks
J |d | ksJ dS )zWe set the value and get it.r9   NrN   r<   rJ   r   r   r   test_set_the_color   s   rR   c                 C  s.   d|_ | |_ |j | ksJ |d | ksJ dS )zReplace the color.rK   r9   NrN   rQ   r   r   r   test_replace_color   s   rS   c                 C  s*   |  dd |  dd | jdksJ dS z)Add several colors and use the first one.r9   rK   rA   Nr;   rO   r   r   r   test_multiple_colors   rD   rU   c                 C  s(   d| _ | ` d| vsJ | j dksJ dS )zDelete the color.rK   r9   r?   NrN   rO   r   r   r   test_delete_the_color   s   rV   c                 C  s0   | dd | dd | |_|j| ksJ dS rT   r;   rQ   r   r   r   test_set_if_multiple_colors   s   rW   c                 C  s$   |  ddu s	J | jdu sJ dS )zREFRESH-INTERVAL default.REFRESH-INTERVALN)getrefresh_intervalr!   r   r   r   test_refresh_interval_default   s   r[   invalid_valuei  invalid)days   c                 C  T   t dd| _tt || _W d   n1 sw   Y  | jt ddks(J dS )zInvalid REFRESH-INTERVALr'   hoursN)r   rZ   pytestraises	TypeErrorr   r\   r   r   r   "test_invalid_refresh_interval_type   s
   rg   )secondsc                 C  r`   )zgInvalid REFRESH-INTERVAL.

    Test:
    - value validation
    - no deletion of the current value
    r(   ra   N)r   rZ   rc   rd   
ValueErrorrf   r   r   r   test_invalid_refresh_interval   s
   rk   c                 C  s<   t dd| _| jt ddksJ | d jt ddksJ dS )REFRESH-INTERVAL setting.r'   ra   rX   N)r   rZ   tdr!   r   r   r   "test_refresh_interval_set_to_value   s   rn   c                 C  sH   |  dtddd | jtdddksJ | d jtdddks"J dS )rl   rX   r'   r(   )r^   rb   N)r   r   rZ   dtr!   r   r   r   *test_refresh_interval_set_to_value_by_dict  s   rp   c                 C  rM   )z
ICS -> obj)rfc_7986_properties)	calendarsr   r   r    get_rfc_7986_properties_calendar  s   rs   c                 C  s   | j }t| S )zICS -> obj -> ICS -> obj)rq   r   	from_icalto_ical)rr   calr   r   r   +get_rfc_7986_properties_calendar_serialized  s   rw   get_calendarc              
   C  s   || }|j dksJ |jdksJ |jtddksJ |jtddddddtd	ks.J d
|jdks5J |jdks<J |j	dksCJ t
|j	tsKJ dS )z/Check that the attributes have a certain value.zRFC 7986 calendarblack   ra   i  
      r_   )tzinfo20161029T121229Zz$5FC53010-1267-4F8E-BC28-1D7AE55A7C99z-We want a lot of RFC 7986 parameters in here!zghttps://github.com/collective/icalendar/tree/main/src/icalendar/tests/calendars/rfc_7986_properties.icsN)r   r<   rZ   r   last_modifiedr   UTCuidr6   source
isinstancer   )rr   rx   r   r   r   r   test_attributes_from_calendar  s   r   )r   r   )r   rE   )r   rL   )rJ   rE   )r<   rL   rJ   rE   )r   r   )6__doc__
__future__r   r   r   r   r   r   rc   	icalendarr   r	   r
   r   r   r   utcr   fixturer   markparametrize
param_name
param_propr   r   r   r    r"   r%   r.   r1   param_colorr7   r>   r@   rB   rC   rJ   r<   rP   rR   rS   rU   rV   rW   r[   rg   rk   rn   rp   rs   rw   r   r   r   r   r   <module>   s     




	















