U
    k/i                     @   s8   d dl T d dlmZ d dlmZ G dd deejZdS )    )*)cmf_testplan)EvaTestCodeMixinc                       s   e Zd Zejjddg Zdd Z fddZddd	d
Ze	e
dddddd Zed fdd	Zed fdd	Z  ZS )CmfTestplanrunZsetupc                 C   s$   | j r
d S tjjdddgd| _ d S )Nztestplan.base:defaultTZsave_eval_code)codeZcache_inmemoryfields)ZworkflowmodelsZCmfWorkflowget)self r   (./modules/evatest/models/cmf_testplan.py_calc_workflow	   s    zCmfTestplan._calc_workflowc                    sB   | j jr4tjj| jdddd}|s.tddd || _ t j||S )Nu   Тест-планыr   T)parentnametypesystemu   Реестр тест-планов не найден в проекте. Убедитесь, что проект инициализирован.)abort)	Ztree_parentZis_nullr	   ZCmfRegistryr
   r   	cmf_alertsupersave)r   argskwargsregistry	__class__r   r   r      s    zCmfTestplan.saveN)	testcyclec                O   sB   ddl m} |d t| j| jj|r*|jnd tjjjdd d S )Nr   )r   up   Обработка может занять несколько минут, ожидайте оповещения.)testplan_idtestcycle_idnotify_person_id)r   )Zcmf.appr   Zschedule_deferred_job_run_jobidvaluegZcurrent_person)r   r   r   r   r   r   r   r   r       s    zCmfTestplan.run    Запуск тест-плана   T)descriptionpriorityZshow_bg_progressbarc                    st   d fdd	 t jj| dgd}|sFt jd|j |d}|  d S  ||  t jj|dd	|j d
ddd d S )Nr   c           
         s   t jj| ddddgd}|r,t jj|d}n|}t jjdd|gdd	gd
D ]Z}t j|||j|jd}|  |j	D ]}|j
||d qr|j}	d} | |j|	|d  qJdS )u/  Копируем структуру плана тестирования

            Args:
                parent_folder (CmfTestcycle, CmfTestplanTestcaseFolder): родительский узел
                depth (int, optional): уровень копирования. Defaults to 0.
            Ztest_configurationstestplanZdefault_responsibler!   r   )r!   ztree_parent_folder.id==ztestplan_testcases.testcaseorderno)filterr   )r   tree_parent_folderr   r+   )r   Ztestcycle_testcase_folderN   )r	   CmfTestcycler
   ZCmfTestcycleTestcaseFolderZCmfTestplanTestcaseFolderlistr   r+   r   Ztestplan_testcasesr   r!   )
r   Zparent_folder_idZtree_parent_folder_iddepthr   r-   Zplan_testcase_folderZ
run_folderZtestplan_testcaseZrun_folder_id	copy_treer   r   r3   .   s<      
  
z'CmfTestplan._run_job.<locals>.copy_treer   r)   u   Прогон )r   r(   r$   u   Тест-план «u    » успешно запущенTr.   )Zpersonr   msgZforce_notify_current_personr'   )Nr   )r	   r   r
   r/   r   r   Z	CmfNotifyZplace_notify)r   r   r   _args_kwargsr(   r   r   r2   r   r    +   s"    #

zCmfTestplan._run_jobc                    sB   |dkr$| j |f||||d|S t j|f||||d|S )Nreleaseobject_fieldsr,   r   order_by)releases_options_listr   field_options_list)clsrelation_field_namer9   r,   r   r:   r   r   r   r   r<   c   s       zCmfTestplan.field_options_listc           
         s   |sg }|sdg}|sg }|dddgg}|o4| d}| dd }	|r\|sN|	s\|dd|gg}|d |d	 t j|f||||d
|S )Nr   Zlogic_prefixr*   zlist.release	parent_idsearch=Zsys_typer   r8   )r
   appendr   r<   )
r=   r>   r9   r,   r   r:   Zfilter_by_projectr   r?   r@   r   r   r   r;   l   s.    

   z!CmfTestplan.releases_options_list)NNNN)NNNNN)__name__
__module____qualname__r   r   Zapi_methodsr   r   r   staticmethodZcmf_deferred_jobr    classmethodr<   r;   __classcell__r   r   r   r   r      s(   6               r   N)Zcmf.includeZmodules.evatest.fieldsr   Z-modules.evatest.models.cmf_evatest_code_mixinr   r   r   r   r   r   <module>   s   