
    %~i4                    0   d dl mZ 	 d dlZd dlmc mZ d dlZd dl	Z	d dl
mZ e	j                  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y)    )annotationsN)	WikiStorec               #  L   K   t        d      } |  | j                          yw)u#   인메모리 WikiStore 인스턴스z:memory:)db_pathN)r   close)ss    f/home/jay/projects/insuwiki/.worktrees/task-2064-dev6/scripts/kakao_knowledge/tests/test_wiki_store.pystorer
      s       	*%A
GGGIs   "$c                 (    ddddddddd	g d
dddgdS )u   테스트용 위키 엔트리z	kakao-001u)   고지의무 - 주상병 부상병 구분   고지의무u   질병고지ut   주상병은 비염, 부상병은 위보호용 약처방을 위해 위염이 진단된 건데 고지대상인가요?uQ   부상병으로 기재된 위염도 진단명이 있으면 고지대상입니다.u   강나윤 / 인카 / 수도권z
2026-01-15u   보상스터디)r   u	   주상병u	   부상병   위염u   비염mediumu   [강나윤] 질문...u   [답변자] 답변...)idtitlecategorysubcategoryquestionanswerexpertsource_datesource_chatkeywords
confidence
raw_thread r       r	   sample_entryr      s;     <"% Ke2#(R.0GH r   c                  $    e Zd ZddZddZddZy)TestInsertAndGetc                ,   |j                  |      }|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}}|j                  |      }d}||u}|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}}|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
|d   }	|d   }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
y)uP   insert_entry 후 get_entry로 조회하면 모든 필드가 일치해야 한다.r   ==z%(py0)s == %(py3)sentry_idpy0py3assert %(py5)spy5Nis notz%(py0)s is not %(py3)sresultz%(py1)s == %(py4)spy1py4assert %(py6)spy6r   r   r   r   r   r   r   r   r   r   r   )
insert_entry
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation	get_entry)selfr
   r   r$   @py_assert2@py_assert1@py_format4@py_format6r-   @py_assert0@py_assert3@py_format5@py_format7s                r	   test_insert_and_getz$TestInsertAndGet.test_insert_and_get7   s
   %%l3'--x-----x-------x---x-----------*!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!d|1|D11|11111|1111|11111111111g7,w"77"77777"7777777"77777777j!=\*%==!%=====!%====!===%========m$C](CC$(CCCCC$(CCCC$CCC(CCCCCCCCj!=\*%==!%=====!%====!===%========h9<#99#99999#9999999#99999999h9<#99#99999#9999999#99999999m$C](CC$(CCCCC$(CCCC$CCC(CCCCCCCCm$C](CC$(CCCCC$(CCCC$CCC(CCCCCCCCj!=\*%==!%=====!%====!===%========l#A|L'AA#'AAAAA#'AAAA#AAA'AAAAAAAAl#A|L'AA#'AAAAA#'AAAA#AAA'AAAAAAAAr   c                   |j                  |       |j                  |d         }d}||u}|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}}|d	   }d}	||	u}|slt        j                  d|fd
||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	|d   }d}	||	u}|slt        j                  d|fd
||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	d}|d	   }	||	v }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	d}|d   }	||	v }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	y)uE   insert 시 created_at과 updated_at이 자동 설정되어야 한다.r   Nr*   r,   r-   r%   r(   r)   
created_at)z%(py1)s is not %(py4)sr/   r2   r3   
updated_atTin)z%(py1)s in %(py4)s)
r4   r=   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r
   r   r-   r?   r@   rA   rB   rC   rD   rE   rF   s               r	   test_insert_auto_timestampsz,TestInsertAndGet.test_insert_auto_timestampsK   s   <(d!34!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!l#/4/#4////#4///#///4///////l#/4/#4////#4///#///4///////*f\**s*****s****s************f\**s*****s****s***********r   c                p   |j                  d      }d}||u }|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)	u>   존재하지 않는 id 조회 시 None을 반환해야 한다.nonexistent-id-9999Nisz%(py0)s is %(py3)sr-   r%   r(   r)   )	r=   r5   r6   r7   r8   r9   r:   r;   r<   r>   r
   r-   r?   r@   rA   rB   s          r	   test_get_nonexistentz%TestInsertAndGet.test_get_nonexistentV   si    !67v~vvvr   Nr
   r   r   dictr
   r   )__name__
__module____qualname__rG   rN   rU   r   r   r	   r   r   6   s    B(	+r   r   c                      e Zd ZddZddZy)TestUpdateEntryc                   |j                  |       |j                  |d         }d}||u}|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}}|d	   }t        j                  d
       |j                  |d   ddi      }	d}|	|u }|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}}|j                  |d         }
d}|
|u}|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}}|
d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|
d   }|d   }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|
d	   }||k\  }|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)ua   필드 부분 업데이트 후 변경사항이 반영되고 updated_at이 갱신되어야 한다.r   Nr*   r,   originalr%   r(   r)   rJ   g{Gz?r   u   수정된 답변입니다.TrQ   rS   successupdatedr!   r.   r/   r2   r3   r   >=)z%(py1)s >= %(py3)soriginal_updated_atr0   r'   )r4   r=   r5   r6   r7   r8   r9   r:   r;   r<   timesleepupdate_entry)r>   r
   r   r_   r?   r@   rA   rB   rd   r`   ra   rC   rD   rE   rF   s                  r	   test_update_entryz!TestUpdateEntry.test_update_entryb   s   <(??<#56##xt####xt######x###x###t#######&|4 	

4$$\$%7(D`9abw$w$ww$//,t"45""wd""""wd""""""w"""w"""d"""""""x @$@@ $@@@@@ $@@@@ @@@$@@@@@@@@w8<#88#88888#8888888#88888888|$;$(;;;;;$(;;;;$;;;;;;(;;;;(;;;;;;;;r   c                v   |j                  dddi      }d}||u }|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)uE   존재하지 않는 id 업데이트 시 False를 반환해야 한다.rP   r   u   변경FrQ   rS   r-   r%   r(   r)   N)	rh   r5   r6   r7   r8   r9   r:   r;   r<   rT   s          r	   test_update_nonexistentz'TestUpdateEntry.test_update_nonexistentw   sr    ##$9Hh;OPvvvvr   NrV   rX   )rY   rZ   r[   ri   rk   r   r   r	   r]   r]   a   s    <*r   r]   c                      e Zd ZddZddZy)TestDeleteEntryc                   |j                  |       |j                  |d         }d}||u }|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}}|j                  }|d   } ||      }	d	}
|	|
u }|st        j                  d|fd
|	|
f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d	x}x}x}	x}}
y	)u<   삭제 후 get_entry 조회 시 None을 반환해야 한다.r   TrQ   rS   r`   r%   r(   r)   N)zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_entry
}(%(py4)s)
} is %(py9)sr
   r&   py2r1   r3   py9assert %(py11)spy11)r4   delete_entryr5   r6   r7   r8   r9   r:   r;   r<   r=   )r>   r
   r   r`   r?   r@   rA   rB   rD   @py_assert5@py_assert8@py_assert7@py_format10@py_format12s                 r	   test_delete_entryz!TestDeleteEntry.test_delete_entry   s   <($$\$%78w$w$ww$:|D1:12:d:2d::::2d::::::u:::u::::::1:::2:::d::::::::r   c                p   |j                  d      }d}||u }|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	)
u?   존재하지 않는 id 삭제 시 False를 반환해야 한다.rP   FrQ   rS   r-   r%   r(   r)   N)	rt   r5   r6   r7   r8   r9   r:   r;   r<   rT   s          r	   test_delete_nonexistentz'TestDeleteEntry.test_delete_nonexistent   sk    ##$9:vvvvr   NrV   rX   )rY   rZ   r[   rz   r|   r   r   r	   rm   rm      s    ;r   rm   c                  4    e Zd ZddZddZddZddZddZy)	TestListEntriesc           
     F    ddddddddd	d
dddddddddddddd
ddddgS )Nz	entry-001u   고지의무 항목1r   u   질문1u   답변1draftr   r   r   r   r   statusz	entry-002u   보상 항목1   보상u   질문2u   답변2approvedz	entry-003u   고지의무 항목2u   질문3u   답변3rejectedz	entry-004u   보상 항목2u   질문4u   답변4r   )r>   s    r	   _make_entrieszTestListEntries._make_entries   sp     "/*%#! ")$%#$ "/*%#$ ")$%#$3!
 !	
r   c                   | j                         }|D ]  }|j                  |        |j                         }t        |      }d}||k(  }|st	        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                  |      dz  }dd|iz  }	t        t	        j                  |	            d	x}x}}y	)
uP   여러 항목 삽입 후 전체 목록 조회 시 모두 반환되어야 한다.   r!   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenresultsr&   r0   r'   r3   assert %(py8)spy8N)r   r4   list_entriesr   r5   r6   r7   r8   r9   r:   r;   r<   )
r>   r
   entrieser   r?   ru   @py_assert4rF   @py_format9s
             r	   test_list_entries_allz%TestListEntries.test_list_entries_all   s    $$& 	"Aq!	"$$&7| q |q    |q      s   s      7   7   |   q       r   c                   | j                         D ]  }|j                  |        |j                  d      }t        |      }d}||k(  }|st	        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                  |      dz  }d	d
|iz  }t        t	        j                  |            dx}x}}d |D        }	t        |	      }
|
sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |	      t	        j                  |
      dz  }t        t	        j                  |            dx}	}
y)uL   category 필터링 시 해당 카테고리 항목만 반환되어야 한다.r   )r      r!   r   r   r   r   r   r   Nc              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   .0rs     r	   	<genexpr>zDTestListEntries.test_list_entries_filter_category.<locals>.<genexpr>   s     Dq1Z=N2D   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr&   rp   r1   r   r4   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r   r>   r
   r   r   r?   ru   r   rF   r   r@   rD   rE   s               r	   !test_list_entries_filter_categoryz1TestListEntries.test_list_entries_filter_category   s&   ##% 	"Aq!	"$$n$=7| q |q    |q      s   s      7   7   |   q       DGDDsDDDDDDDDDsDDDsDDDDDDDDDDDDDDr   c                   | j                         D ]  }|j                  |        |j                  d      }t        |      }d}||k(  }|st	        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                  |      dz  }d	d
|iz  }t        t	        j                  |            dx}x}}d |D        }	t        |	      }
|
sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |	      t	        j                  |
      dz  }t        t	        j                  |            dx}	}
y)uD   status 필터링 시 해당 상태 항목만 반환되어야 한다.r   )r   r   r!   r   r   r   r   r   r   Nc              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r	   r   zBTestListEntries.test_list_entries_filter_status.<locals>.<genexpr>   s     >1X;*,>r   r   r   r   r   r   s               r	   test_list_entries_filter_statusz/TestListEntries.test_list_entries_filter_status   s&   ##% 	"Aq!	"$$J$77| q |q    |q      s   s      7   7   |   q       >g>>s>>>>>>>>>s>>>s>>>>>>>>>>>>>>r   c                   | j                         D ]  }|j                  |        |j                  dd      }|j                  dd      }t        |      }d}||k(  }|st	        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                  |      dz  }d	d
|iz  }	t        t	        j                  |	            dx}x}}t        |      }d}||k(  }|st	        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                  |      dz  }d	d
|iz  }	t        t	        j                  |	            dx}x}}|D 
ch c]  }
|
d   	 }}
|D 
ch c]  }
|
d   	 }}
|j                  } ||      }|sddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }t        t	        j                  |            dx}}yc c}
w c c}
w )u>   limit/offset 페이지네이션이 정상 동작해야 한다.r   r   )limitoffsetr!   r   r   page1r   r   r   Npage2r   zLassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.isdisjoint
}(%(py3)s)
}	ids_page1	ids_page2r&   rp   r'   r)   )r   r4   r   r   r5   r6   r7   r8   r9   r:   r;   r<   
isdisjoint)r>   r
   r   r   r   r?   ru   r   rF   r   r   r   r   r@   rB   s                  r	   test_list_entries_paginationz,TestListEntries.test_list_entries_pagination   s   ##% 	"Aq!	"""1"5""1"55zQzQzQss55zQ5zQzQzQss55zQ&+,QtW,	,&+,QtW,	,##.#I........y...y...#......I...I.......... -,s   1M:M?N)returnz
list[dict]rX   )rY   rZ   r[   r   r   r   r   r   r   r   r	   r~   r~      s    "
H!E?/r   r~   c                      e Zd ZddZddZy)TestSearchEntriesc                   |j                  |       |j                  d      }t        |      }d}||k\  }|st        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                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}|D 	cg c]  }	|	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
c c}	w )uJ   title/question/answer/keywords에서 검색 결과를 반환해야 한다.r      rb   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr   r   r   r   r   Nr   rL   )z%(py1)s in %(py3)sidsre   r(   r)   )r4   search_entriesr   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r
   r   r   r?   ru   r   rF   r   r   r   rC   rA   rB   s                 r	   test_search_entriesz%TestSearchEntries.test_search_entries   s)   <(&&x07| q |q    |q      s   s      7   7   |   q        '(1qw((D!(!S((((!S(((!((((((S(((S((((((( )s   7G.c                   |j                  |       |j                  d      }g }||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)	uS   검색어와 매칭되는 항목이 없으면 빈 리스트를 반환해야 한다.u!   존재하지않는검색어XYZ999r!   r#   r   r%   r(   r)   N)
r4   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r
   r   r   r?   r@   rA   rB   s           r	   test_search_no_resultsz(TestSearchEntries.test_search_no_results   sy    <(&&'JKw"}w"ww"r   NrV   )rY   rZ   r[   r   r   r   r   r	   r   r      s    )r   r   c                      e Zd ZddZddZy)TestApproveRejectc                
   |j                  |       |j                  |d         }d}||u }|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}}|j                  |d         }d	}||u}|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}}|d   }	d}
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d	x}	x}}
y	)u5   approve 후 status가 'approved'가 되어야 한다.r   TrQ   rS   okr%   r(   r)   Nr*   r,   r-   r   r   r!   r.   r/   r2   r3   )r4   approve_entryr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r
   r   r   r?   r@   rA   rB   r-   rC   rD   rE   rF   s                r	   test_approve_entryz$TestApproveReject.test_approve_entry   s;   <(  d!34rTzrTrrTd!34!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!h-:-:----:------:-------r   c                
   |j                  |       |j                  |d         }d}||u }|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}}|j                  |d         }d	}||u}|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}}|d   }	d}
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d	x}	x}}
y	)u4   reject 후 status가 'rejected'가 되어야 한다.r   TrQ   rS   r   r%   r(   r)   Nr*   r,   r-   r   r   r!   r.   r/   r2   r3   )r4   reject_entryr5   r6   r7   r8   r9   r:   r;   r<   r=   r   s                r	   test_reject_entryz#TestApproveReject.test_reject_entry  s;   <(T 23rTzrTrrTd!34!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!h-:-:----:------:-------r   NrV   )rY   rZ   r[   r   r   r   r   r	   r   r      s    ..r   r   c                      e Zd ZddZddZy)TestBulkImportc           	        t        d      D cg c]  }d|dd| dd| d| d }}|j                  |      }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}}|D ]  }	|j                  }|	d   }
 ||
      }d}||u}|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |
      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}x}} yc c}w )uH   여러 항목 일괄 import 시 성공 건수가 반환되어야 한다.   zbulk-03du   항목	   테스트qa)r   r   r   r   r   r!   r#   countr%   r(   r)   Nr   r*   )zS%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_entry
}(%(py4)s)
} is not %(py9)sr
   ro   rr   rs   )rangebulk_importr5   r6   r7   r8   r9   r:   r;   r<   r=   )r>   r
   ir   r   r?   r@   rA   rB   r   rD   ru   rv   rw   rx   ry   s                   r	   test_bulk_importzTestBulkImport.test_bulk_import  sl    1X
 1S'?vaS\{bcdecf`guvwxvysz{
 
 !!'*uzuuu 	8A??71T77?7+747+47777+477777757775777?7777777+777477777777	8
s   G-c                   dddddg dd}|j                  |g      }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}}|j                  d      }d}||u}|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}}|d   }t        |t              }	|	sddt        j                         v st        j
                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j
                  t              rt        j                  t              ndt        j                  |	      dz  }t        t        j                  |            dx}}	|d   }
g d}|
|k(  }|slt        j                  d	|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}y)ur   keywords가 list인 경우 DB에 JSON string으로 저장되고, 조회 시 다시 list로 복원되어야 한다.zbulk-keywords-001u   키워드 테스트r   u   질문u   답변)u
   키워드1u
   키워드2u
   키워드3)r   r   r   r   r   r   r   r!   r#   r   r%   r(   r)   Nr*   r,   r-   r   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancelistr   r.   r/   r2   r3   )r   r5   r6   r7   r8   r9   r:   r;   r<   r=   r   r   )r>   r
   entryr   r?   r@   rA   rB   r-   r   rC   rD   rE   rF   s                 r	   test_bulk_import_keywords_listz-TestBulkImport.test_bulk_import_keywords_list   s    &*# B
 !!5'*uzuuu!45!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!! ,3z,d33333333z333z333,333333d333d3333333333j!O%OO!%OOOOO!%OOOO!OOO%OOOOOOOOr   NrX   )rY   rZ   r[   r   r   r   r   r	   r   r     s    
8Pr   r   c                      e Zd ZddZy)TestGetStatsc                   ddddddddd	dddd
ddddddd
dddddddddddddddg}|D ]  }|j                  |        |j                         }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }
|
d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|
d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d
   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y) uH   카테고리별/상태별 통계가 정확하게 반환되어야 한다.zstat-001t1r   r   r   r   r   zstat-002t2r   zstat-003t3r   zstat-004t4r   zstat-005t5totalr   r!   r.   r/   r2   r3   Nby_categoryr      	by_statusr   )r4   	get_statsr5   r6   r:   r;   r<   )r>   r
   r   r   statsrC   rD   r?   rE   rF   r   r   s               r	   test_get_statszTestGetStats.test_get_stats8  s    .VYeht{|.VYeht~(PS_bnxy(PS_bnxy(PS_bnuv
  	"Aq!	" !W~""~""""~"""~""""""""""M*>*/a/*a////*a///*///a///////8$))$))))$)))$))))))))))+&	!&Q&!Q&&&&!Q&&&!&&&Q&&&&&&&$))$))))$)))$))))))))))$))$))))$)))$))))))))))r   NrX   )rY   rZ   r[   r   r   r   r	   r   r   7  s    *r   r   )
__future__r   builtinsr7   _pytest.assertion.rewrite	assertionrewriter5   rf   pytestkakao_knowledge.wiki_storer   fixturer
   r   r   r]   rm   r~   r   r   r   r   r   r   r	   <module>r      s    "
    0    .# #V B &H/ H/` *. .2P PH* *r   