
    %js7                        d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ ddlmZ  G d de      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)uX  
Component smoke tests — Story 2.2 (AC: 2).

Tests render each Jinja2 macro component with minimal valid context using
render_template_string + app.test_request_context('/').  A Jinja2 UndefinedError
would raise an exception (not return a 200); these tests confirm all required
template variables are satisfied by the macro's parameter list.
    N)render_template_string)	FlaskForm)StringFieldc                        e Zd ZdZ ed      Zy)_MinimalFormzAMinimal form with one StringField for testing form_row component.UsernameN)__name__
__module____qualname____doc__r   username     A/var/www/html/financials/tests/test_blueprints/test_components.pyr   r      s    K:&Hr   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestAlertComponentc                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)N/zx{% from 'components/alert.html' import render_alert %}{{ render_alert(type='success', message='Operation successful') }}zOperation successfulinz%(py1)s in %(py3)shtmlpy1py3assert %(py5)spy5z<div
test_request_contextr   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanationselfappr   @py_assert0@py_assert2@py_format4@py_format6s          r   test_alert_success_rendersz-TestAlertComponent.test_alert_success_renders   s    %%c* 	)UD	
 &-%----%---%----------------v~vv	 	   E11E;c                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   zv{% from 'components/alert.html' import render_alert %}{{ render_alert(type='error', message='Something went wrong') }}zSomething went wrongr   r   r   r   r   r   alertr   r(   s          r   test_alert_error_rendersz+TestAlertComponent.test_alert_error_renders$   s    %%c* 	)SD	
 &-%----%---%----------------w$w$w$$	 	r0   c                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   xY w)
Nr   zm{% from 'components/alert.html' import render_alert %}{{ render_alert(type='warning', message='Watch out') }}z	Watch outr   r   r   r   r   r   r   r(   s          r   test_alert_warning_rendersz-TestAlertComponent.test_alert_warning_renders-   s    %%c* 	)JD	
 "{d""""{d"""{""""""d"""d"""""""	 	   CCc                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   xY w)
Nr   zi{% from 'components/alert.html' import render_alert %}{{ render_alert(type='info', message='FYI note') }}zFYI noter   r   r   r   r   r   r   r(   s          r   test_alert_info_rendersz*TestAlertComponent.test_alert_info_renders5   s    %%c* 	)FD	
 !zT!!!!zT!!!z!!!!!!T!!!T!!!!!!!	 	r6   N)r	   r
   r   r/   r3   r5   r8   r   r   r   r   r      s    #"r   r   c                       e Zd Zd Zd Zd Zy)TestEmptyStateComponentc                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   z{% from 'components/empty_state.html' import render_empty_state %}{{ render_empty_state(title='Nothing here', description='No items found') }}zNothing herer   r   r   r   r   r   zNo items foundr   r(   s          r    test_empty_state_minimal_rendersz8TestEmptyStateComponent.test_empty_state_minimal_rendersB   s    %%c* 	)_D	
 %~%%%%~%%%~%%%%%%%%%%%%%%%%'4''''4'''''''''4'''4'''''''	 	r0   c                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   z{% from 'components/empty_state.html' import render_empty_state %}{{ render_empty_state(   title='No transactions',   description='Add one to start',   cta_text='Add Transaction',   cta_url='/transactions/create') }}Add Transactionr   r   r   r   r   r   /transactions/creater   r(   s          r   !test_empty_state_with_cta_rendersz9TestEmptyStateComponent.test_empty_state_with_cta_rendersK   s    %%c* 		)D		 !( D(((( D((( ((((((D(((D(((((((%-%----%---%----------------		 		r0   c                    |j                  d      5  t        d      }dd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}}y# 1 sw Y   xY w)z-CTA link NOT rendered when cta_url is absent.r   z{% from 'components/empty_state.html' import render_empty_state %}{{ render_empty_state(title='Empty', description='Nothing', cta_text='Click') }}Nhrefnot inz%(py1)s not in %(py3)sr   r   r   r   r   r(   s          r   ,test_empty_state_no_cta_when_only_text_givenzDTestEmptyStateComponent.test_empty_state_no_cta_when_only_text_givenY   s    %%c* 	)cD	
 !vT!!!!vT!!!v!!!!!!T!!!T!!!!!!!	 	r6   N)r	   r
   r   r<   r@   rF   r   r   r   r:   r:   A   s    (."r   r:   c                       e Zd Zd Zd Zd Zy)TestPageHeaderComponentc                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   zk{% from 'components/page_header.html' import render_page_header %}{{ render_page_header(title='My Page') }}zMy Pager   r   r   r   r   r   z<h1r   r(   s          r   test_page_header_title_onlyz3TestPageHeaderComponent.test_page_header_title_onlyg   s    %%c* 	)<D	
  yD    yD   y      D   D       u}uu	 	r0   c                    |j                  d      5  t        d      }d d 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}}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}}y # 1 sw Y   xY w)Nr   z{% from 'components/page_header.html' import render_page_header %}{{ render_page_header(   title='Transactions',   subtitle='Your full history',   action_text='Add Transaction',   action_url='/transactions/create') }}Transactionsr   r   r   r   r   r   zYour full historyr>   r?   r   r(   s          r   )test_page_header_with_subtitle_and_actionzATestPageHeaderComponent.test_page_header_with_subtitle_and_actionp   s   %%c* 		)D		 %~%%%%~%%%~%%%%%%%%%%%%%%%%"*"d****"d***"******d***d******* ( D(((( D((( ((((((D(((D(((((((%-%----%---%----------------		 		s   J;;Kc                    |j                  d      5  t        d      }dd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}}y# 1 sw Y   xY w)z3Action link NOT rendered when action_url is absent.r   z}{% from 'components/page_header.html' import render_page_header %}{{ render_page_header(title='Test', action_text='Do It') }}NzDo ItrC   rE   r   r   r   r   r   r(   s          r   *test_page_header_no_action_when_url_absentzBTestPageHeaderComponent.test_page_header_no_action_when_url_absent   s    %%c* 	)ND	
 "wd""""wd"""w""""""d"""d"""""""	 	r6   N)r	   r
   r   rJ   rM   rO   r   r   r   rH   rH   f   s    . #r   rH   c                       e Zd Zd Zd Zy)TestStatCardComponentc                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   z|{% from 'components/stat_card.html' import render_stat_card %}{{ render_stat_card(label='Total Spent', value='$1,234.56') }}zTotal Spentr   r   r   r   r   r   z	$1,234.56r   r(   s          r   test_stat_card_minimal_rendersz4TestStatCardComponent.test_stat_card_minimal_renders   s    %%c* 	)QD	
 $}$$$$}$$$}$$$$$$$$$$$$$$$$"{d""""{d"""{""""""d"""d"""""""	 	r0   c                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   z{% from 'components/stat_card.html' import render_stat_card %}{{ render_stat_card(   label='Monthly Spend',   value='$500',   delta='+$50',   delta_type='negative') }}zMonthly Spendr   r   r   r   r   r   z+$50r   r(   s          r   !test_stat_card_with_delta_rendersz7TestStatCardComponent.test_stat_card_with_delta_renders   s    %%c* 		)D		 &$&&&&$&&&&&&&&&$&&&$&&&&&&&v~vv		 		r0   N)r	   r
   r   rS   rU   r   r   r   rQ   rQ      s    #r   rQ   c                       e Zd Zd Zd Zd Zy)TestPaginationComponentc                 P   |j                  d      5  d }t        d|      }dd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}}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}}y# 1 sw Y   xY w)u>   Page 1 of 10 — next link is an <a>, prev is a disabled span.r   c                     d|  S Nz/transactions/?page=r   ps    r   <lambda>zSTestPaginationComponent.test_pagination_page1_shows_next_not_prev.<locals>.<lambda>       !5aS9 r   z{% from 'components/pagination.html' import render_pagination %}{{ render_pagination(page=1, total=100, per_page=10, url_for_page=url_fn) }}url_fnNpage=2r   r   r   r   r   r   z<azaria-disabledr   r)   r*   r`   r   r+   r,   r-   r.   s           r   )test_pagination_page1_shows_next_not_prevzATestPaginationComponent.test_pagination_page1_shows_next_not_prev   sI   %%c* 	9F)_D	 x4x4x44tt|ttttt&$&&&&$&&&&&&&&&$&&&$&&&&&&&	 	s   HH%c                    |j                  d      5  d }t        d|      }dd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}}y# 1 sw Y   UxY w)u5   Page 3 of 10 — both previous and next are <a> tags.r   c                     d|  S rZ   r   r[   s    r   r]   zVTestPaginationComponent.test_pagination_middle_page_shows_both_links.<locals>.<lambda>   r^   r   z{% from 'components/pagination.html' import render_pagination %}{{ render_pagination(page=3, total=100, per_page=10, url_for_page=url_fn) }}r_   Nra   r   r   r   r   r   r   zpage=4r   rb   s           r   ,test_pagination_middle_page_shows_both_linkszDTestPaginationComponent.test_pagination_middle_page_shows_both_links   s    %%c* 	9F)_D	 x4x4x44x4x4x44	 	   E66F c                    |j                  d      5  d }t        d|      }dd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}}y# 1 sw Y   UxY w)u7   Last page — prev link present, next is disabled span.r   c                     d|  S rZ   r   r[   s    r   r]   zWTestPaginationComponent.test_pagination_last_page_shows_prev_not_next.<locals>.<lambda>   r^   r   z{% from 'components/pagination.html' import render_pagination %}{{ render_pagination(page=10, total=100, per_page=10, url_for_page=url_fn) }}r_   Nzpage=9r   r   r   r   r   r   zpage=11rC   rE   r   rb   s           r   -test_pagination_last_page_shows_prev_not_nextzETestPaginationComponent.test_pagination_last_page_shows_prev_not_next   s    %%c* 	9F)`D	 x4x4x44$y$$$$y$$$y$$$$$$$$$$$$$$$$	 	rg   N)r	   r
   r   rc   rf   rj   r   r   r   rW   rW      s    '
 
%r   rW   c                       e Zd Zd Zd Zy)TestConfirmModalComponentc                    |j                  d      5  t        d      }d d 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}}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}}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}}y # 1 sw Y   DxY w)Nr   z{% from 'components/confirm_modal.html' import render_confirm_modal %}{{ render_confirm_modal(   modal_id='del-modal',   title='Delete Item',   message='Are you sure?',   confirm_url='/delete/1') }}	del-modalr   r   r   r   r   r   zDelete ItemzAre you sure?z	/delete/1zrole="dialog"r   r(   s          r   $test_confirm_modal_renders_structurez>TestConfirmModalComponent.test_confirm_modal_renders_structure   s   %%c* 		)D		 "{d""""{d"""{""""""d"""d"""""""$}$$$$}$$$}$$$$$$$$$$$$$$$$&$&&&&$&&&&&&&&&$&&&$&&&&&&&"{d""""{d"""{""""""d"""d"""""""&$&&&&$&&&&&&&&&$&&&$&&&&&&&		 		s   M  M*c                 F   |j                  d      5  t        d      }d d 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}}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}}y # 1 sw Y   xY w)Nr   z{% from 'components/confirm_modal.html' import render_confirm_trigger %}{{ render_confirm_trigger(modal_id='del-modal', label='Delete') }}rn   r   r   r   r   r   r   Deletezdata-confirm-targetr   r(   s          r   test_confirm_trigger_rendersz6TestConfirmModalComponent.test_confirm_trigger_renders   sE   %%c* 	)UD	
 "{d""""{d"""{""""""d"""d"""""""x4x4x44$,$,,,,$,,,$,,,,,,,,,,,,,,,,	 	   HH N)r	   r
   r   ro   rr   r   r   r   rl   rl      s    '"-r   rl   c                       e Zd Zd Zd Zd Zy)TestFormRowComponentc                    |j                  d      5  t               }t        d|      }d d 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}}y # 1 sw Y   UxY w)Nr   `{% from 'components/form_row.html' import render_field %}{{ render_field(field=form.username) }}formr   r   r   r   r   r   r   inputr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r)   r*   ry   r   r+   r,   r-   r.   s           r   %test_form_row_renders_label_and_inputz:TestFormRowComponent.test_form_row_renders_label_and_input   s    %%c* 	>D):D	 !zT!!!!zT!!!z!!!!!!T!!!T!!!!!!!w$w$w$$	 	s   E==Fc                    |j                  d      5  t               }t        d|      }d d 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}}y # 1 sw Y   xY w)Nr   zx{% from 'components/form_row.html' import render_field %}{{ render_field(field=form.username, label_text='Your Name') }}rx   z	Your Namer   r   r   r   r   r   r{   r|   s           r   test_form_row_custom_label_textz4TestFormRowComponent.test_form_row_custom_label_text   s    %%c* 	>D)RD	 "{d""""{d"""{""""""d"""d"""""""	 	s   CC!c                    |j                  d      5  t               }dg|j                  _        t	        d|      }dd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}}y# 1 sw Y   xY w)z<When a field has errors, they appear in the rendered output.r   zThis field is required.rw   rx   Nr   r   r   r   r   r   )r   r   r   errorsr   r    r!   r"   r#   r$   r%   r&   r'   r|   s           r   test_form_row_errors_renderz0TestFormRowComponent.test_form_row_errors_render
  s    %%c* 	>D$=#>DMM ):D	 )0(D0000(D000(000000D000D0000000	 	s   *C**C3N)r	   r
   r   r}   r   r   r   r   r   ru   ru      s    	#
1r   ru   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestProgressBarComponentc                 F   |j                  d      5  t        d      }dd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}}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}}y# 1 sw Y   xY w)u/   value=50 → auto-computed state = safe (< 70).r   zz{% from 'components/progress_bar.html' import render_progress_bar %}{{ render_progress_bar(value=50, label='Groceries') }}N	Groceriesr   r   r   r   r   r   50safer   r(   s          r   test_progress_bar_safe_statez5TestProgressBarComponent.test_progress_bar_safe_state  s@   %%c* 	)ID	
 "{d""""{d"""{""""""d"""d"""""""tt|tttttv~vv	 	rs   c                    |j                  d      5  t        d      }dd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}}y# 1 sw Y   xY w)u5   value=85 → auto-computed state = warning (70–89).r   zw{% from 'components/progress_bar.html' import render_progress_bar %}{{ render_progress_bar(value=85, label='Dining') }}Nwarningr   r   r   r   r   r   r   r(   s          r   test_progress_bar_warning_statez8TestProgressBarComponent.test_progress_bar_warning_state&  s    %%c* 	)FD	
  yD    yD   y      D   D       	 	r6   c                    |j                  d      5  t        d      }dd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}}y# 1 sw Y   xY w)u3   value=95 → auto-computed state = danger (≥ 90).r   z~{% from 'components/progress_bar.html' import render_progress_bar %}{{ render_progress_bar(value=95, label='Entertainment') }}Ndangerr   r   r   r   r   r   r   r(   s          r   test_progress_bar_danger_statez7TestProgressBarComponent.test_progress_bar_danger_state/  s    %%c* 	)MD	
 x4x4x44	 	r6   c                    |j                  d      5  t        d      }dd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}}y# 1 sw Y   xY w)z4Explicit state parameter overrides auto-computation.r   z{% from 'components/progress_bar.html' import render_progress_bar %}{{ render_progress_bar(value=40, label='Test', state='danger') }}Nr   r   r   r   r   r   r   r   r(   s          r   *test_progress_bar_explicit_state_overrideszCTestProgressBarComponent.test_progress_bar_explicit_state_overrides8  s    %%c* 	)TD	
 x4x4x44	 	r6   c                    |j                  d      5  t        d      }d d 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}}y # 1 sw Y   UxY w)Nr   zg{% from 'components/progress_bar.html' import render_progress_bar %}{{ render_progress_bar(value=60) }}zrole="progressbar"r   r   r   r   r   r   zaria-valuenowr   r(   s          r   %test_progress_bar_has_aria_attributesz>TestProgressBarComponent.test_progress_bar_has_aria_attributesA  s    %%c* 	)6D	
 $+#t++++#t+++#++++++t+++t+++++++&$&&&&$&&&&&&&&&$&&&$&&&&&&&	 	r0   N)r	   r
   r   r   r   r   r   r   r   r   r   r   r     s    	!  'r   r   )r   builtinsr#   _pytest.assertion.rewrite	assertionrewriter    pytestflaskr   	flask_wtfr   wtformsr   r   r   r:   rH   rQ   rW   rl   ru   r   r   r   r   <module>r      s~      (  '9 '!" !"N" "J!# !#N 8%% %%V- -@ 1  1L.' .'r   