
    j6                         d Z ddlZddlmc mZ ddlmZ ddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZ  e	j&                         d        Z e	j&                         d	        Z e	j&                         d
        Z e	j&                         d        Z	 	 d"dZ e	j&                         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  G d d      Z! G d d      Z" G d  d!      Z#y)#uS   
Transaction list — filtering, search, sorting & pagination tests — Story 3.5.
    N)Decimal)db)Account)Category)Transactionc                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )NChasecheckingTnametype	is_activer   _dbsessionaddcommitr   as     G/var/www/html/financials/tests/test_blueprints/test_transaction_list.pyacctr      s5    W:>AKKOOAKKH    c                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )NSavingssavingsTr   r   r   s     r   acct2r      s5    YY$?AKKOOAKKHr   c                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )N	GroceriesTr   	is_systemr   r   r   r   r   r   r   cs     r   catr$       s5    kTTBAKKOOAKKHr   c                     t        ddd      }t        j                  j                  |       t        j                  j	                          |S )NDiningFTr   r!   r"   s     r   cat2r'   (   s5    h%4@AKKOOAKKHr   c           
          t        |||t        |      | j                  |r|j                  nd |d      }t        j                  j                  |       |S )NT)datemerchant_normalizedmerchant_rawamount
account_idcategory_idnotes	is_manual)r   r   idr   r   r   )r   r)   merchantr,   r$   r/   ts          r   	_make_txnr4   0   sK    $v77!CFFt		A KKOOAHr   c                     t        |ddd|      }t        |ddd|      }t        |dd	d
      }t        j                  j                          |||fS )Nz
2026-05-01Amazon10.00)r)   r2   r,   r$   
2026-05-10Whole Foodsz55.00z
2026-05-20Targetz30.00r)   r2   r,   )r4   r   r   r   )r   r   r$   t1t2t3s         r   
three_txnsr?   @   sT    	4lXgSV	WB	4l]7X[	\B	4lXg	NBKKr2:r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestListBasicc                    |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}}y )	N/transactions/   ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2py5assert %(py7)spy7
getstatus_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)
selfclientr   r   rH   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s
             r   test_returns_200zTestListBasic.test_returns_200L   s    ::./##*s*#s****#s******x***x***#***s*******r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	NrC      Whole Foodsinz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.data
}rH   py1py3rL   rM   rN   
rP   datarR   rS   rW   rT   rU   rV   rX   rY   
rZ   r[   r   r?   rH   @py_assert0r]   @py_assert2r_   r`   s
             r   test_shows_transaction_merchantz-TestListBasic.test_shows_transaction_merchantP   s~    ::./..~....~...~...................r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )NrC      Amazonrd   rf   rH   rg   rM   rN   rc      Targetrj   rl   s
             r   !test_shows_all_three_transactionsz/TestListBasic.test_shows_all_three_transactionsT   sX   ::./)HMM)yM))))yM)))y))))))H)))H)))M)))))))..~....~...~...................)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c                 Z   |\  }}}|j                  d      }d|j                   d}|j                  }	 |	       }
|j                  }|
|v }|st	        j
                  d|fd|
|f      t	        j                  |      t	        j                  |	      t	        j                  |
      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}x}	x}
x}}y )	NrC   z/editrd   )z_%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.encode
}()
} in %(py9)s
{%(py9)s = %(py7)s.data
}rH   )rh   ri   rL   rN   py9zassert %(py11)spy11)rP   r1   encoderk   rR   rS   rW   rT   rU   rV   rX   rY   )rZ   r[   r   r?   r<   r=   r>   rH   rm   rn   r]   @py_assert8@py_assert6@py_format10@py_format12s                  r   test_each_row_links_to_editz)TestListBasic.test_each_row_links_to_editZ   s    
B::./we,F,33F35FF5FFFF5FFF,FFF3FFF5FFFFFFFFFFFFFFFFFFFFr   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	NrC      3rd   rf   rH   rg   rM   rN   rj   rl   s
             r   test_total_count_displayedz(TestListBasic.test_total_count_displayed_   s~    ::./$x}}$t}$$$$t}$$$t$$$$$$x$$$x$$$}$$$$$$$r   N)__name__
__module____qualname__ra   ro   rs   r|   r    r   r   rA   rA   K   s    +/*G
%r   rA   c                   $    e Zd Zd Zd Zd Zd Zy)TestEmptyStatesc                    |j                  d      }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  }t        t        j                  |            d x}x}}y )	NrC   s   No transactions yetrd   rf   rH   rg   rM   rN   rj   	rZ   r[   r   rH   rm   r]   rn   r_   r`   s	            r   .test_no_transactions_shows_no_transactions_yetz>TestEmptyStates.test_no_transactions_shows_no_transactions_yetg   s    ::./%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6r   c                    |j                  d      }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  }t        t        j                  |            d x}x}}y )	NrC   s   Add Transactionrd   rf   rH   rg   rM   rN   rj   r   s	            r   .test_no_transactions_shows_add_transaction_ctaz>TestEmptyStates.test_no_transactions_shows_add_transaction_ctak   s    ::./!2X]]2!]2222!]222!222222X222X222]2222222r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	N/transactions/?q=zzznomatchs   No transactions matchrd   rf   rH   rg   rM   rN   rj   rl   s
             r   ,test_filters_no_match_shows_no_match_messagez<TestEmptyStates.test_filters_no_match_shows_no_match_messageo   s    ::;<'88==8'=8888'=888'88888888888888=8888888r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	Nr   s   Clearrd   rf   rH   rg   rM   rN   rj   rl   s
             r   .test_filters_no_match_shows_clear_filters_linkz>TestEmptyStates.test_filters_no_match_shows_clear_filters_links   s~    ::;<(8==(x=((((x=(((x((((((8(((8(((=(((((((r   N)r   r   r   r   r   r   r   r   r   r   r   r   f   s    739)r   r   c                   $    e Zd Zd Zd Zd Zd Zy)
TestSearchc                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )N/transactions/?q=wholerc   rd   rf   rH   rg   rM   rN   rq   not inz0%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.data
}rr   rj   rl   s
             r   test_search_filters_by_merchantz*TestSearch.test_search_filters_by_merchant{   sX   ::67..~....~...~...................--y----y---y---------------------y----y---y-------------------r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	Nz/transactions/?q=WHOLErc   rd   rf   rH   rg   rM   rN   rj   rl   s
             r   test_search_is_case_insensitivez*TestSearch.test_search_is_case_insensitive   s~    ::67..~....~...~...................r   c                    t        |dd      }t        j                  j                          |j	                  d      }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  }
t        t        j                  |
            d x}x}}y )NzGas Stationzroad trip fuel)r2   r/   z/transactions/?q=road+trips   Gas Stationrd   rf   rH   rg   rM   rN   )r4   r   r   r   rP   rk   rR   rS   rW   rT   rU   rV   rX   rY   )rZ   r[   r   r   r3   rH   rm   r]   rn   r_   r`   s              r   test_search_filters_by_notesz'TestSearch.test_search_filters_by_notes   s    d]:JK:::;..~....~...~...................r   c                 B   |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )
Nr   rq   r   r   rH   rg   rM   rN   rc   rj   rl   s
             r   "test_search_no_match_returns_emptyz-TestSearch.test_search_no_match_returns_empty   s    ::;<--y----y---y-------------------2X]]2~]2222~]222~222222X222X222]2222222r   N)r   r   r   r   r   r   r   r   r   r   r   r   z   s    .//3r   r   c                       e Zd Zd Zd Zy)TestCategoryFilterc                    |\  }}}|j                  d|j                         }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  }t        t        j                  |            d x}	x}}
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  }t        t        j                  |            d x}	x}}
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  }t        t        j                  |            d x}	x}}
y )N/transactions/?category_id=rq   rd   rf   rH   rg   rM   rN   rc   rr   r   r   rP   r1   rk   rR   rS   rW   rT   rU   rV   rX   rY   )rZ   r[   r   r?   r$   r<   r=   r>   rH   rm   r]   rn   r_   r`   s                 r   +test_filter_by_category_shows_only_matchingz>TestCategoryFilter.test_filter_by_category_shows_only_matching   sn   
B:: ;CFF8DE)HMM)yM))))yM)))y))))))H)))H)))M)))))))..~....~...~...................--y----y---y-------------------r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	Nz/transactions/?category_id=9999rq   r   r   rH   rg   rM   rN   rj   rl   s
             r   1test_filter_by_nonexistent_category_returns_emptyzDTestCategoryFilter.test_filter_by_nonexistent_category_returns_empty   s~    ::?@--y----y---y-------------------r   N)r   r   r   r   r   r   r   r   r   r      s    ..r   r   c                       e Zd Zd Zy)TestAccountFilterc                    t        |dd       t        |dd       t        j                  j                          |j	                  d|j
                         }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  }t        t        j                  |            d x}x}	}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  }t        t        j                  |            d x}x}	}y )NzIn Chaser7   )r2   r,   z
In Savingsz20.00z/transactions/?account_id=s   In Chaserd   rf   rH   rg   rM   rN   s
   In Savingsr   r   )r4   r   r   r   rP   r1   rk   rR   rS   rW   rT   rU   rV   rX   rY   )rZ   r[   r   r   r   r$   rH   rm   r]   rn   r_   r`   s               r   *test_filter_by_account_shows_only_matchingz<TestAccountFilter.test_filter_by_account_shows_only_matching   s   $G<%,w?:: :477)DE+hmm+{m++++{m+++{++++++h+++h+++m+++++++1HMM1}M1111}M111}111111H111H111M1111111r   N)r   r   r   r   r   r   r   r   r      s    2r   r   c                       e Zd Zd Zd Zd Zy)TestDateRangeFilterc                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz#/transactions/?date_from=2026-05-10rq   r   r   rH   rg   rM   rN   rc   rd   rf   rr   rj   rl   s
             r   test_date_from_excludes_earlierz3TestDateRangeFilter.test_date_from_excludes_earlier   sX   ::CD--y----y---y-------------------..~....~...~...................)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz!/transactions/?date_to=2026-05-10rq   rd   rf   rH   rg   rM   rN   rc   rr   r   r   rj   rl   s
             r   test_date_to_excludes_laterz/TestDateRangeFilter.test_date_to_excludes_later   sX   ::AB)HMM)yM))))yM)))y))))))H)))H)))M)))))))..~....~...~...................--y----y---y-------------------r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz6/transactions/?date_from=2026-05-10&date_to=2026-05-10rc   rd   rf   rH   rg   rM   rN   rq   r   r   rr   rj   rl   s
             r   test_date_range_combinedz,TestDateRangeFilter.test_date_range_combined   sX   ::VW..~....~...~...................--y----y---y---------------------y----y---y-------------------r   N)r   r   r   r   r   r   r   r   r   r   r      s    *..r   r   c                       e Zd Zd Zd Zd Zy)TestAmountRangeFilterc                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz/transactions/?amount_min=30rq   r   r   rH   rg   rM   rN   rc   rd   rf   rr   rj   rl   s
             r    test_amount_min_excludes_smallerz6TestAmountRangeFilter.test_amount_min_excludes_smaller   sX   ::<=--y----y---y-------------------..~....~...~...................)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz/transactions/?amount_max=30rq   rd   rf   rH   rg   rM   rN   rr   rc   r   r   rj   rl   s
             r   test_amount_max_excludes_largerz5TestAmountRangeFilter.test_amount_max_excludes_larger   sX   ::<=)HMM)yM))))yM)))y))))))H)))H)))M))))))))HMM)yM))))yM)))y))))))H)))H)))M)))))))2X]]2~]2222~]222~222222X222X222]2222222r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}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  }	t        t        j                  |	            d x}x}}y )Nz*/transactions/?amount_min=25&amount_max=40rr   rd   rf   rH   rg   rM   rN   rq   r   r   rc   rj   rl   s
             r   test_amount_range_combinedz0TestAmountRangeFilter.test_amount_range_combined   sX   ::JK)HMM)yM))))yM)))y))))))H)))H)))M)))))))--y----y---y-------------------2X]]2~]2222~]222~222222X222X222]2222222r   N)r   r   r   r   r   r   r   r   r   r   r      s    *33r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestSortingc                 <   |j                  d      }|j                  j                         }|j                  d      }|j                  d      }||k  }|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 }y )NrC   r:   r6   <z%(py0)s < %(py2)s
target_pos
amazon_posrJ   rK   assert %(py4)spy4rP   rk   decodefindrR   rS   rT   rU   rV   rW   rX   rY   )rZ   r[   r   r?   rH   htmlr   r   r\   @py_format3@py_format5s              r   test_default_sort_is_date_descz*TestSorting.test_default_sort_is_date_desc   s    ::./}}##%YYx(
YYx(
J&&&&zJ&&&&&&z&&&z&&&&&&J&&&J&&&&&&&r   c                 <   |j                  d      }|j                  j                         }|j                  d      }|j                  d      }||k  }|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 }y )Nz /transactions/?sort=date&dir=ascr6   r:   r   r   r   r   r   r   r   r   )rZ   r[   r   r?   rH   r   r   r   r\   r   r   s              r   test_sort_date_asczTestSorting.test_sort_date_asc   s    ::@A}}##%YYx(
YYx(
J&&&&zJ&&&&&&z&&&z&&&&&&J&&&J&&&&&&&r   c                 <   |j                  d      }|j                  j                         }|j                  d      }|j                  d      }||k  }|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 }y )Nz#/transactions/?sort=amount&dir=descr9   r6   r   r   	whole_posr   r   r   r   r   )rZ   r[   r   r?   rH   r   r   r   r\   r   r   s              r   test_sort_amount_descz!TestSorting.test_sort_amount_desc   s    ::CD}}##%IIm,	YYx(
:%%%%y:%%%%%%y%%%y%%%%%%:%%%:%%%%%%%r   c                 <   |j                  d      }|j                  j                         }|j                  d      }|j                  d      }||k  }|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 }y )Nz"/transactions/?sort=amount&dir=ascr6   r9   r   r   r   r   r   r   r   r   )rZ   r[   r   r?   rH   r   r   r   r\   r   r   s              r   test_sort_amount_ascz TestSorting.test_sort_amount_asc   s    ::BC}}##%YYx(
IIm,	I%%%%zI%%%%%%z%%%z%%%%%%I%%%I%%%%%%%r   c                    |j                  d      }|j                  j                         }|j                  d      }|j                  d      }|j                  d      }||k  }	||k  }
|	r|
s	t	        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	t        j                         v st	        j                  |      rt	        j                  |      nd	d
z  }dd|iz  }t        t	        j                  |            d x}	}
y )Nz$/transactions/?sort=merchant&dir=ascr6   r9   r:   )r   r   )z%(py0)s < %(py3)sz%(py3)s < %(py4)sr   r   r   )rJ   ri   r   zassert %(py6)spy6r   )rZ   r[   r   r?   rH   r   r   r   r   r\   rn   r   @py_format7s                r   test_sort_merchant_ascz"TestSorting.test_sort_merchant_asc   s    ::DE}}##%YYx(
IIm,	YYx(
J22J22222zJ222222z222z222222J222J2222222222222222r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	Nz!/transactions/?sort=date&dir=descs	   sort=daterd   rf   rH   rg   rM   rN   rj   rl   s
             r   test_sort_indicator_shownz%TestSorting.test_sort_indicator_shown   s~    ::AB,x}},|},,,,|},,,|,,,,,,x,,,x,,,},,,,,,,r   c                    |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}}y )	Nz$/transactions/?sort=invalid&dir=descrD   rE   rG   rH   rI   rM   rN   rO   )
rZ   r[   r   r?   rH   r\   r]   r^   r_   r`   s
             r    test_invalid_sort_column_ignoredz,TestSorting.test_invalid_sort_column_ignored  s    ::DE##*s*#s****#s******x***x***#***s*******r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s%    ''&&3-+r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestPaginationc                 J   t        d      D ]  }t        |d|dz  dz   dd|dd	       ! t        j                  j	                          |j                  d
      }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  }
t        t        j                  |
            d x}x}}y )N7   2026-01-      02d	Merchant 03d1.00r;   rC   s   Page 1rd   rf   rH   rg   rM   rN   )ranger4   r   r   r   rP   rk   rR   rS   rW   rT   rU   rV   rX   rY   )rZ   r[   r   r   irH   rm   r]   rn   r_   r`   s              r    test_pagination_shows_first_pagez/TestPagination.test_pagination_shows_first_page  s    r 	CAd8AFQJs+;!<!*1S'26C	C 	::./)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c                    t        d      D ]  }t        |d|dz  dz   dd|dd	       ! t        j                  j	                          |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}}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  }
t        t        j                  |
            d x}x}}y )Nr   r   r   r   r   r   r   r   r;   z/transactions/?page=2rD   rE   rG   rH   rI   rM   rN   s   Page 2rd   rf   rg   )r   r4   r   r   r   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rk   )rZ   r[   r   r   r   rH   r\   r]   r^   r_   r`   rm   rn   s                r   #test_pagination_page_two_accessiblez2TestPagination.test_pagination_page_two_accessible  sD   r 	CAd8AFQJs+;!<!*1S'26C	C 	::56##*s*#s****#s******x***x***#***s*******)HMM)yM))))yM)))y))))))H)))H)))M)))))))r   c                 x   t        d      D ]  }t        |d|dz  dz   dd|dd	       ! t        j                  j	                          |j                  d
      }|j                  j                         t        fdt        d      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 )Nr   r   r   r   r   r   r   r   r;   rC   c              3   4   K   | ]  }d |dv sd  yw)r   r   r   Nr   ).0r   r   s     r   	<genexpr>zCTestPagination.test_pagination_shows_50_per_page.<locals>.<genexpr>#  s!     H!i#w,?4,GAHs   2   rE   )z%(py0)s == %(py3)scount)rJ   ri   zassert %(py5)srL   )r   r4   r   r   r   rP   rk   r   sumrR   rS   rT   rU   rV   rW   rX   rY   )rZ   r[   r   r   r   rH   r   rn   r\   @py_format4r_   r   s              @r   !test_pagination_shows_50_per_pagez0TestPagination.test_pagination_shows_50_per_page  s    r 	CAd8AFQJs+;!<!*1S'26C	C 	::./}}##%HuRyHHu{uuur   c                 :   t        d      D ]  }t        |d|dz  dz   dd|dd	       ! t        j                  j	                          |j                  d
      }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 )Nr   r   r   r   r   r   r   r   r;   z /transactions/?q=Merchant&page=1s
   q=Merchantrd   )z,%(py3)s in %(py7)s
{%(py7)s = %(py5)s.data
}rH   )ri   rL   rN   z%(py9)sru   )z0%(py12)s in %(py16)s
{%(py16)s = %(py14)s.data
})py12py14py16z%(py18)spy18zassert %(py21)spy21)r   r4   r   r   r   rP   rk   rR   rS   rW   rT   rU   rV   append_format_booloprX   rY   )rZ   r[   r   r   r   rH   r\   rn   ry   r]   rm   @py_assert11@py_assert15@py_assert13r`   rz   @py_format17@py_format19@py_format20@py_format22s                       r   !test_pagination_preserves_filtersz0TestPagination.test_pagination_preserves_filters&  sR   r 	CAd8AFQJs+;!<!*1S'26C	C 	::@AO}OO}-OO(--O-1OOOOO}OOO}OOOOOOOOOOOOOOOOOOO-OOOOOOOOO(OOO(OOO-OOOOOOOOOOOOOOr   N)r   r   r   r   r   r   r  r   r   r   r   r   
  s    **Pr   r   c                       e Zd Zd Zd Zd Zy)TestUrlParamsc                    |j                  d|j                         }|j                  }t        |      }|j                  } |       }	|j                  }
|	|
v }|sst        j                  d|fd|	|
f      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t        j                  |      t        j                  |      t        j                  |      t        j                  |	      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}x}x}x}	x}}
y )
Nr   rd   )z%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.id
})
}.encode
}()
} in %(py13)s
{%(py13)s = %(py11)s.data
}strr$   rH   )rJ   rh   ri   rL   rN   ru   rv   py13zassert %(py15)spy15)rP   r1   r  rw   rk   rR   rS   rT   rU   rV   rW   rX   rY   )rZ   r[   r   r?   r$   rH   rn   r]   ry   rx   @py_assert12@py_assert10@py_format14@py_format16s                 r   )test_active_filters_appear_in_filter_formz7TestUrlParams.test_active_filters_appear_in_filter_form2  s   :: ;CFF8DE664s6{4{!!4!#4x}}4#}4444#}444444s444s444444344434446444{444!444#444444x444x444}44444444r   c                    |j                  d      }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  }	t        t        j                  |	            d x}x}}y )	Nr   s   wholerd   rf   rH   rg   rM   rN   rj   rl   s
             r   "test_search_term_preserved_in_formz0TestUrlParams.test_search_term_preserved_in_form6  s~    ::67(8==(x=((((x=(((x((((((8(((8(((=(((((((r   c                    |j                  d|j                   d      }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  }
t        t        j                  |
            d x}x}}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  }
t        t        j                  |
            d x}x}}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  }
t        t        j                  |
            d x}x}}y )Nz$/transactions/?q=Amazon&category_id=z(&date_from=2026-05-01&date_to=2026-05-10rq   rd   rf   rH   rg   rM   rN   rc   r   r   rr   r   )rZ   r[   r   r?   r$   rH   rm   r]   rn   r_   r`   s              r   !test_combined_filters_all_appliedz/TestUrlParams.test_combined_filters_all_applied:  sl   ::2366(68
 )HMM)yM))))yM)))y))))))H)))H)))M)))))))2X]]2~]2222~]222~222222X222X222]2222222--y----y---y-------------------r   N)r   r   r   r  r  r  r   r   r   r  r  1  s    5).r   r  )r8   ALDIz25.00NN)$__doc__builtinsrT   _pytest.assertion.rewrite	assertionrewriterR   decimalr   pytestapp.extensionsr   r   app.models.accountr   app.models.categoryr   app.models.transactionr   fixturer   r   r$   r'   r4   r?   rA   r   r   r   r   r   r   r   r   r  r   r   r   <module>r      s+       $ & ( .
         @G"   % %6) )(3 32
. 
.2 2. .,3 3,++ ++`"P "PN. .r   