§
     ’j«  ã                   óJ   — d Z ddlZddlmc mZ ddlmZ  G d„ d¦  «        Z	dS )zHUnit tests for State Published Prices & Bidding Market Price Comparison.é    N)ÚStatePriceSyncServicec                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestMaterialPriceBenchmarkz?Test suite for StatePriceSyncService & price comparison engine.c                 óÈ  — t          ¦   «         }|                     ¦   «         }d}||k    }|s—t          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}}| 
                    ¦   «         }t          |¦  «        }d}||k    }	|	sòt          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 ¦   «         }d}||v }|s—t          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 }|s—t          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 }|s—t          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 S )Nr   ©ú>)z%(py0)s > %(py3)sÚcount)Úpy0Úpy3úassert %(py5)sÚpy5é   ©ú>=©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚperiods©r
   Úpy1r   Úpy6úassert %(py8)sÚpy8c                 ó   — g | ]
}|d          ‘ŒS )Úpublish_period© )Ú.0Úps     ú9C:\Projects\DSCons\tests\test_material_price_benchmark.pyú
<listcomp>zRTestMaterialPriceBenchmark.test_seed_and_get_available_periods.<locals>.<listcomp>   s   € Ð=Ð=Ð=°˜Ð*Ô+Ð=Ð=Ð=ó    ú2026-08©Úin©z%(py1)s in %(py3)sÚperiod_codes©r   r   z2026-07z2026-06)r   Úseed_official_state_pricesÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚget_available_periodsr   )ÚselfÚsvcr	   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6r   Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r%   Ú@py_assert0s                 r   Ú#test_seed_and_get_available_periodsz>TestMaterialPriceBenchmark.test_seed_and_get_available_periods	   sj  € Ý#Ñ%Ô%ˆØ×.Ò.Ñ0Ô0ˆØÐˆu�qŠyÐÐÐÕÔÐÐÐÐˆu�qÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ�qÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐà×+Ò+Ñ-Ô-ˆÝ�7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø=Ð=°WÐ=Ñ=Ô=ˆØÐ(ˆy˜LÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆy˜LÐ(Ñ(Ô(Õ(Ô(ˆyÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜LÑ(Ô(Ð(Õ(Ô(˜LÑ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(ØÐ(ˆy˜LÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆy˜LÐ(Ñ(Ô(Õ(Ô(ˆyÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜LÑ(Ô(Ð(Õ(Ô(˜LÑ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(ØÐ(ˆy˜LÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆy˜LÐ(Ñ(Ô(Õ(Ô(ˆyÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(˜LÑ(Ô(Ð(Õ(Ô(˜LÑ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r    c                 óÆ  — t          ¦   «         }|                     d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         }||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         }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         }	t          |	¦  «        }d}
||
k    }|sòt          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 }||v }|s—t          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 }|s—t          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 }|s—t          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 }|s—t          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 }|s—t          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 }|s—t          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 }|s—t          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+         }g 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 S )-Nr!   ÚHAI_PHONG_KHU_VUC_2)r   Úregion_codeÚperiod)ú==)z%(py1)s == %(py4)s)r   Úpy4zassert %(py6)sr   u   Khu vá»±c IIÚregion_namer"   )z%(py1)s in %(py4)sÚkpisÚtotal_itemsé   r   )z%(py1)s >= %(py4)sÚprofitable_countr   r   )z%(py1)s > %(py4)sÚtotal_state_value_vndÚtotal_market_value_vndÚtotal_variance_vndÚitemsr   r   r   r   r   Úmaterial_coder$   Úitemr&   r   r   Úmaterial_nameÚstate_unit_price_vndÚmarket_unit_price_vndÚvariance_vndÚprofit_margin_percentÚ
risk_level)ÚHIGH_PROFITÚNORMAL_PROFITÚ	LOSS_RISKÚPENDING_DATA)r   Úget_price_comparisonr(   r)   r-   r.   r/   r   r*   r+   r,   )r1   r2   Údatar;   Ú@py_assert3r3   Ú@py_format5r9   rD   rK   r7   r8   r:   rM   r5   r6   s                   r   Ú!test_get_price_comparison_metricsz<TestMaterialPriceBenchmark.test_get_price_comparison_metrics   s�  € Ý#Ñ%Ô%ˆØ×'Ò'Ø$Ð2Gð (ñ 
ô 
ˆð �HŒ~Ð* Ð*ˆ~ Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*ˆ~ Ð*Ñ*Ô*Õ*Ô*ˆ~Ñ*Ô*Õ*Ô* Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÐ4  mÔ!4Ð4ˆ~Ð!4Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ˆ~Ð!4Ð4Ñ4Ô4Õ4Ô4ˆ~Ñ4Ô4Õ4Ô4Ð!4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4à�FŒ|ˆØ�MÔ"Ð( bÐ(Ð" bÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð" bÐ(Ñ(Ô(Õ(Ô(Ð"Ñ(Ô(Õ(Ô( bÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÐ&Ô'Ð+¨!Ð+Ð'¨!Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð'¨!Ð+Ñ+Ô+Õ+Ô+Ð'Ñ+Ô+Õ+Ô+¨!Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐ+Ô,Ð0¨qÐ0Ð,¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð,¨qÐ0Ñ0Ô0Õ0Ô0Ð,Ñ0Ô0Õ0Ô0¨qÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÐ,Ô-Ð1°Ð1Ð-°Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð-°Ð1Ñ1Ô1Õ1Ô1Ð-Ñ1Ô1Õ1Ô1°Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØÐ(Ô)Ð-¨AÐ-Ð)¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð)¨AÐ-Ñ-Ô-Õ-Ô-Ð)Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð �W”ˆÝ�5‰zŒzÐ˜RÐˆz˜RÒÐÐÐÕÔÐÐÐÐˆz˜RÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜RÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØð 	ñ 	ˆDØ"Ð*�? dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*�? dÐ*Ñ*Ô*Õ*Ô*�?Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* dÑ*Ô*Ð*Õ*Ô* dÑ*Ô*Ð*Ð*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ø"Ð*�? dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*�? dÐ*Ñ*Ô*Õ*Ô*�?Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* dÑ*Ô*Ð*Õ*Ô* dÑ*Ô*Ð*Ð*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ø)Ð1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Õ1Ô1Ð)Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1¨TÑ1Ô1Ð1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ø*Ð2Ð*¨dÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð*¨dÐ2Ñ2Ô2Õ2Ô2Ð*Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨dÑ2Ô2Ð2Õ2Ô2¨dÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ø!Ð)�> TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)�> TÐ)Ñ)Ô)Õ)Ô)�>Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô) TÑ)Ô)Ð)Õ)Ô) TÑ)Ô)Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ø*Ð2Ð*¨dÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð*¨dÐ2Ñ2Ô2Õ2Ô2Ð*Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨dÑ2Ô2Ð2Õ2Ô2¨dÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2ØÐ'�< 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'�< 4Ð'Ñ'Ô'Õ'Ô'�<Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' 4Ñ'Ô'Ð'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ø˜Ô%ð ð *ð *ð *ð Ð%ð *ð ð ð ð õ ì
ðð ð ð Ð%ð *ð ñ ô õ ô
 ð &ñ ô õ ô
 ð*ñ ô ð ð ñ ð ð ð ð ð ñ ð õ õ ì
ðñ ô ñ ô ð ð ð ð ð ð ð ñ ð	ð 	r    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r\   r   r    r   r   r      s8   € € € € € ØIÐIð
)ð 
)ð 
)ð ð  ð  ð  ð  r    r   )
r`   Úbuiltinsr*   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter(   Ú:app.modules.inventory.application.state_price_sync_servicer   r   r   r    r   ú<module>rf      sj   ðØ NÐ Nà  € € € € € € € € € € € € Ð \Ð \Ð \Ð \Ð \Ð \ð/ð /ð /ð /ð /ñ /ô /ð /ð /ð /r    