Ë
    ;½Tj¦,  ã                   ó¸   — d dl m Z mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZmZmZmZmZ  e«       Z G d
„ de«      Zy)é    )ÚdatetimeÚtimeÚ	timedelta)Úpatch)Úget_user_model)ÚSimpleUploadedFile)Úcall_command)ÚTestCase)Útimezone)Ú!run_all_document_expiry_remindersÚ.send_document_expiry_reminders_for_days_beforeÚsend_expiry_hourly_reminders)ÚDocumentExpiryReminderLogÚKYCDocumentÚTransporterProfileÚUserRoleÚVehicleÚVehicleDocumentc                   óž  — e Zd Zd„ Zd„ Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z	 ed«      d„ «       Z
 ed«      d	„ «       Z ed«       ed
«      d„ «       «       Z ed«       ed«       ed
«      d„ «       «       «       Z ed«       ed«       ed
«      d„ «       «       «       Z ed«      d„ «       Zy)ÚDocumentExpiryReminderTestsc                 ó6   — t        j                  «       | _        y )N)r   Ú	localdateÚtoday)Úselfs    úG/var/www/html/truck-me/accounts/tests/test_document_expiry_reminders.pyÚsetUpz!DocumentExpiryReminderTests.setUp   s   € Ü×'Ñ'Ó)ˆ�
ó    c                 ó  — t         j                  j                  ||› d�d¬«      }t        j                  j	                  |t        j
                  j                  dd¬«       t        j                  j	                  ||dd¬	«       |S )
Nz	@test.comÚsecret)ÚemailÚpasswordÚ03000000001Úen)ÚuserÚroleÚphoneÚlanguageTF)r$   Úaccount_typeÚlocalÚcountry_to_country)ÚUserÚobjectsÚcreate_userr   ÚcreateÚRoleÚTRANSPORTERr   )r   Úusernamer(   r$   s       r   Ú_create_transporterz/DocumentExpiryReminderTests._create_transporter   sz   € Ü�|‰|×'Ñ'¨¸8¸*ÀIÐ8NÐYaÐ'ÓbˆÜ×Ñ×Ñ T´·±×0IÑ0IÐQ^ÐimÐÔnÜ×"Ñ"×)Ñ)ØØ%ØØ$ð	 	*ô 	
ð ˆr   z/accounts.document_expiry_reminders.notify_usersc           
      óf  — | j                  dt        j                  j                  «      }t        j
                  j                  |t        j                  j                  | j                  t        d¬«      z   ¬«      }t        d«      }| j                  |d«       |j                  «        |j                  d   ^}}}}| j                  ||j                  g«       | j                  |d«       | j                  |d   d	«       | j                  |d
   t!        |j"                  «      «       | j%                  t&        j
                  j)                  t&        j*                  j,                  |j"                  |j.                  dt&        j0                  t&        j2                  ¬«      j5                  «       «       y )Nzdriver@test.comé   ©Údays©r$   Údocument_typeÚexpiry_dateé   r   ÚDOCUMENT_EXPIRINGÚdays_beforeÚ7Údocument_id)Úkindr>   r9   r<   Úreminder_hourÚreminder_on)r2   r   ÚAccountTypeÚDRIVERr   r,   r.   ÚDocumentTypeÚDRIVER_LICENSEr   r   r   ÚassertEqualÚassert_called_onceÚ	call_argsÚidÚstrÚpkÚ
assertTruer   ÚfilterÚDocKindÚKYCr9   ÚREMINDER_HOUR_DAY_WINDOWÚREMINDER_ON_DAY_WINDOWÚexists)	r   Úmock_notifyÚdriverÚdocÚsentÚuser_idsÚeventÚpayloadÚ_s	            r   Ú2test_sends_kyc_reminder_exactly_days_before_expiryzNDocumentExpiryReminderTests.test_sends_kyc_reminder_exactly_days_before_expiry*   sZ  € à×)Ñ)Ð*;Ô=O×=[Ñ=[×=bÑ=bÓcˆÜ×!Ñ!×(Ñ(ØÜ%×2Ñ2×AÑAØŸ
™
¤Y°AÔ%6Ñ6ð )ó 
ˆô >¸aÓ@ˆà×Ñ˜˜qÔ!Ø×&Ñ&Ô(Ø'2×'<Ñ'<¸QÑ'?Ð$ˆ�%˜ 1Ø×Ñ˜ F§I¡I ;Ô/Ø×Ñ˜Ð 3Ô4Ø×Ñ˜ Ñ/°Ô5Ø×Ñ˜ Ñ/´°S·V±V³Ô=Ø�‰Ü%×-Ñ-×4Ñ4Ü.×6Ñ6×:Ñ:ØŸF™FØŸO™OØÜ7×PÑPÜ5×LÑLð 5ó ÷ ‰f‹hõ		
r   c                 óŽ  — | j                  dt        j                  j                  «      }t        j
                  j                  |t        j                  j                  | j                  t        d¬«      z   ¬«       t        d«      }t        d«      }| j                  |d«       | j                  |d«       |j                  «        y )Nzdriver2@test.comé   r5   r7   r:   r   )r2   r   rB   rC   r   r,   r.   rD   ÚPERMITr   r   r   rF   rG   )r   rS   rT   ÚfirstÚseconds        r   Ú#test_idempotent_per_reminder_windowz?DocumentExpiryReminderTests.test_idempotent_per_reminder_windowG   s    € à×)Ñ)Ð*<Ô>P×>\Ñ>\×>cÑ>cÓdˆÜ×Ñ×"Ñ"ØÜ%×2Ñ2×9Ñ9ØŸ
™
¤Y°BÔ%7Ñ7ð 	#ô 	
ô ?¸rÓBˆÜ?ÀÓCˆà×Ñ˜ Ô"Ø×Ñ˜ Ô#Ø×&Ñ&Õ(r   c                 ó¨  — | j                  dt        j                  j                  «      }| j                  t        d¬«      z   }t        j                  j                  |t        j                  j                  |¬«      }t        d«      }t        d«      }t        d«      }| j                  |d«       | j                  |d«       | j                  |d«       | j                  |j                  d«       | j                  t        j                  j                  t        j                   j"                  |j$                  |¬«      j'                  «       d«       y )	Nzdriver3@test.comr]   r5   r7   r4   r:   r   )r?   r>   r9   )r2   r   rB   rC   r   r   r   r,   r.   rD   ÚPASSPORT_COPYr   rF   Ú
call_countr   rM   rN   rO   rK   Úcount)r   rS   rT   ÚexpiryrU   Úsent_31Úsent_7Úsent_1s           r   Ú8test_sends_separate_reminders_for_31_7_and_1_day_windowszTDocumentExpiryReminderTests.test_sends_separate_reminders_for_31_7_and_1_day_windowsW   s  € à×)Ñ)Ð*<Ô>P×>\Ñ>\×>cÑ>cÓdˆØ—‘œi¨RÔ0Ñ0ˆÜ×!Ñ!×(Ñ(ØÜ%×2Ñ2×@Ñ@Øð )ó 
ˆô AÀÓDˆÜ?ÀÓBˆÜ?ÀÓBˆà×Ñ˜ !Ô$Ø×Ñ˜ Ô#Ø×Ñ˜ Ô#Ø×Ñ˜×/Ñ/°Ô3Ø×ÑÜ%×-Ñ-×4Ñ4Ü.×6Ñ6×:Ñ:ØŸF™FØ"ð 5ó ÷ ‰e‹gØõ	
r   c                 óT  — | j                  dt        j                  j                  «      }t        j
                  j                  |t        j                  j                  | j                  t        d¬«      z   ¬«       t        d«      }| j                  |d«       |j                  «        y )Nzfleetdriver@test.comr4   r5   r7   r   )r2   r   rB   ÚTRANSPORTER_DRIVERr   r,   r.   rD   rE   r   r   r   rF   Úassert_not_called)r   rS   Úfleet_driverrV   s       r   Ú test_skips_fleet_driver_accountsz<DocumentExpiryReminderTests.test_skips_fleet_driver_accountsr   sŠ   € à×/Ñ/Ø"Ü×*Ñ*×=Ñ=ó
ˆô 	×Ñ×"Ñ"ØÜ%×2Ñ2×AÑAØŸ
™
¤Y°AÔ%6Ñ6ð 	#ô 	
ô >¸aÓ@ˆà×Ñ˜˜qÔ!Ø×%Ñ%Õ'r   c           	      ó.  — | j                  dt        j                  j                  «      }t        j
                  j                  |ddd¬«      }t        j
                  j                  |t        j                  j                  t        dd«      | j                  t        d¬	«      z   ¬
«      }t        d«      }| j                  |d«       |j                  «        |j                   d   d d \  }}}| j                  ||j"                  g«       | j                  |d«       | j                  |d   d«       | j                  |d   t%        |j&                  «      «       | j                  |d   d«       | j                  |d   t%        |j&                  «      «       y )Nzowner@test.comÚFlatbedzABC-123z10.00)ÚownerÚvehicle_typeÚregistration_numberÚload_capacityzinsurance.pdfs   pdfr:   r5   )Úvehicler8   Úfiler9   r   é   r;   r?   ÚVEHICLEÚ
vehicle_idr<   Ú1r>   )r2   r   rB   ÚFLEET_OWNERr   r,   r.   r   rD   Ú	INSURANCEr   r   r   r   rF   rG   rH   rI   rJ   rK   )	r   rS   rr   rv   rU   rV   rW   rX   rY   s	            r   Ú.test_notifies_fleet_owner_for_vehicle_documentzJDocumentExpiryReminderTests.test_notifies_fleet_owner_for_vehicle_documentƒ   sa  € à×(Ñ(Ð)9Ô;M×;YÑ;Y×;eÑ;eÓfˆÜ—/‘/×(Ñ(ØØ"Ø )Ø!ð	 )ó 
ˆô ×%Ñ%×,Ñ,ØÜ)×6Ñ6×@Ñ@Ü# O°VÓ<ØŸ
™
¤Y°AÔ%6Ñ6ð	 -ó 
ˆô >¸aÓ@ˆà×Ñ˜˜qÔ!Ø×&Ñ&Ô(Ø#.×#8Ñ#8¸Ñ#;¸B¸QÐ#?Ñ ˆ�%˜Ø×Ñ˜ E§H¡H :Ô.Ø×Ñ˜Ð 3Ô4Ø×Ñ˜ ™¨)Ô4Ø×Ñ˜ Ñ.´°G·J±J³Ô@Ø×Ñ˜ Ñ/°Ô5Ø×Ñ˜ Ñ/´°S·V±V³Õ=r   c                 ót  — | j                  dt        j                  j                  «      }t        j
                  j                  |t        j                  j                  | j                  t        d¬«      z   ¬«       t        d«       |j                  «        t        «       }| j                  |d   d   d«       y )Nzcmd@test.comr4   r5   r7   Úsend_document_expiry_remindersr<   r   )r2   r   rB   rC   r   r,   r.   rD   ÚCOUNTRY_GCCr   r   r	   rG   r   rF   )r   rS   rT   Úresultss       r   Ú(test_management_command_runs_all_windowszDDocumentExpiryReminderTests.test_management_command_runs_all_windowsŸ   s–   € à×)Ñ)¨.Ô:L×:XÑ:X×:_Ñ:_Ó`ˆÜ×Ñ×"Ñ"ØÜ%×2Ñ2×>Ñ>ØŸ
™
¤Y°AÔ%6Ñ6ð 	#ô 	
ô 	Ð5Ô6à×&Ñ&Ô(Ü3Ó5ˆØ×Ñ˜ Ñ/°Ñ2°AÕ6r   z5accounts.document_expiry_reminders.timezone.localtimec           	      óÒ  — t        j                  t        j                  | j                  t        dd«      «      «      |_        | j                  dt        j                  j                  «      }t        j                  j                  |t        j                  j                  | j                  ¬«       t!        «       }t!        «       }| j#                  |d«       | j#                  |d«       | j#                  |j$                  d«       |j&                  d   d   }| j#                  |d   d	«       | j#                  |d
   d«       | j#                  |d   | j                  j)                  «       «       t        j                  t        j                  | j                  t        dd«      «      «      |_        t!        «       }| j#                  |d«       | j#                  |j$                  d«       y )Né
   é   zhourly@test.comr7   r:   r   é   r<   Ú0r@   Ú10rA   é   é   )r   Ú
make_awarer   Úcombiner   r   Úreturn_valuer2   r   rB   rC   r   r,   r.   rD   rE   r   rF   rd   rH   Ú	isoformat)r   Úmock_localtimerS   rT   r_   r`   rY   Úthirds           r   Ú-test_expiry_day_hourly_reminder_once_per_hourzIDocumentExpiryReminderTests.test_expiry_day_hourly_reminder_once_per_hour®   s‰  € ô '/×&9Ñ&9¼(×:JÑ:JÈ4Ï:É:ÔW[Ð\^Ð`bÓWcÓ:dÓ&eˆÔ#Ø×)Ñ)Ð*;Ô=O×=[Ñ=[×=bÑ=bÓcˆÜ×Ñ×"Ñ"ØÜ%×2Ñ2×AÑAØŸ
™
ð 	#ô 	
ô -Ó.ˆÜ-Ó/ˆØ×Ñ˜ Ô"Ø×Ñ˜ Ô#Ø×Ñ˜×/Ñ/°Ô3Ø×'Ñ'¨Ñ*¨1Ñ-ˆØ×Ñ˜ Ñ/°Ô5Ø×Ñ˜ Ñ1°4Ô8Ø×Ñ˜ Ñ/°·±×1EÑ1EÓ1GÔHä&.×&9Ñ&9¼(×:JÑ:JÈ4Ï:É:ÔW[Ð\^Ð`aÓWbÓ:cÓ&dˆÔ#Ü,Ó.ˆØ×Ñ˜ Ô"Ø×Ñ˜×/Ñ/°Õ3r   z5accounts.document_expiry_reminders.timezone.localdatec           	      ó¤  — | j                   t        d¬«      z
  }| j                   |_        t        j                  t        j                  | j                   t        dd«      «      «      |_        | j                  dt        j                  j                  «      }t        j                  j                  |t        j                  j                   |¬«       t#        «       }| j%                  |d«       |j&                  d   d   }| j%                  |d	   d
«       | j%                  |d   | j                   j)                  «       «       | j                   t        d¬«      z
  }||_        t        j                  t        j                  |t        dd«      «      «      |_        t#        «       }	| j%                  |	d«       | j%                  |j*                  d«       y )Nrx   r5   é	   r   zexpired@test.comr7   r:   r‡   ÚexpiredÚtruerA   )r   r   rŽ   r   rŒ   r   r�   r   r2   r   rB   rC   r   r,   r.   rD   rE   r   rF   rH   r�   rd   )
r   r�   Úmock_localdaterS   Ú
expired_onrT   Ú
sent_todayrY   Ú	yesterdayÚsent_yesterdays
             r   Ú=test_expired_document_hourly_reminder_continues_on_later_dayszYDocumentExpiryReminderTests.test_expired_document_hourly_reminder_continues_on_later_daysÈ   sx  € ð —Z‘Z¤)°Ô"3Ñ3ˆ
Ø&*§j¡jˆÔ#Ü&.×&9Ñ&9¼(×:JÑ:JÈ4Ï:É:ÔW[Ð\]Ð_`ÓWaÓ:bÓ&cˆÔ#Ø×)Ñ)Ð*<Ô>P×>\Ñ>\×>cÑ>cÓdˆÜ×Ñ×"Ñ"ØÜ%×2Ñ2×AÑAØ"ð 	#ô 	
ô 2Ó3ˆ
Ø×Ñ˜ QÔ'Ø×'Ñ'¨Ñ*¨1Ñ-ˆØ×Ñ˜ Ñ+¨VÔ4Ø×Ñ˜ Ñ/°·±×1EÑ1EÓ1GÔHà—J‘J¤°Ô!2Ñ2ˆ	Ø&/ˆÔ#Ü&.×&9Ñ&9¼(×:JÑ:JÈ9ÔVZÐ[\Ð^_ÓV`Ó:aÓ&bˆÔ#Ü5Ó7ˆØ×Ñ˜¨Ô+Ø×Ñ˜×/Ñ/°Õ3r   c           	      ó„  — | j                   t        d¬«      z
  }| j                   |_        t        j                  t        j                  | j                   t        dd«      «      «      |_        | j                  dt        j                  j                  «      }t        j                  j                  |t        j                  j                   |¬«       t#        «       }t#        «       }t#        «       }| j%                  |d«       | j%                  |d«       | j%                  |d«       | j%                  |j&                  d«       y )Nr‹   r5   é   zexpired2@test.comr7   r:   r   )r   r   rŽ   r   rŒ   r   r�   r   r2   r   rB   rC   r   r,   r.   rD   rE   r   rF   rd   )	r   r�   r—   rS   r˜   rT   r_   r`   r‘   s	            r   Ú8test_expired_document_hourly_idempotent_within_same_hourzTDocumentExpiryReminderTests.test_expired_document_hourly_idempotent_within_same_hourå   sÿ   € ð —Z‘Z¤)°Ô"3Ñ3ˆ
Ø&*§j¡jˆÔ#Ü&.×&9Ñ&9¼(×:JÑ:JÈ4Ï:É:ÔW[Ð\^Ð`aÓWbÓ:cÓ&dˆÔ#Ø×)Ñ)Ð*=Ô?Q×?]Ñ?]×?dÑ?dÓeˆÜ×Ñ×"Ñ"ØÜ%×2Ñ2×AÑAØ"ð 	#ô 	
ô -Ó.ˆÜ-Ó/ˆÜ,Ó.ˆà×Ñ˜ Ô"Ø×Ñ˜ Ô#Ø×Ñ˜ Ô"Ø×Ñ˜×/Ñ/°Õ3r   c                 ó  — | j                  dt        j                  j                  «      }t        j
                  j                  |t        j                  j                  | j                  ¬«      }t        «        | j                  |j                  d«       | j                  t        d¬«      z   |_        |j                  dg¬«       t        «        t!        d«      }| j                  |d«       | j                  |j                  d«       y )	Nzrenew@test.comr7   r:   r]   r5   r9   )Úupdate_fieldsr‡   )r2   r   rB   rC   r   r,   r.   rD   r^   r   r   rF   rd   r   r9   Úsaver   )r   rS   rT   rU   rg   s        r   Ú4test_updated_expiry_date_starts_fresh_reminder_cyclezPDocumentExpiryReminderTests.test_updated_expiry_date_starts_fresh_reminder_cycleþ   sÏ   € à×)Ñ)Ð*:Ô<N×<ZÑ<Z×<aÑ<aÓbˆÜ×!Ñ!×(Ñ(ØÜ%×2Ñ2×9Ñ9ØŸ
™
ð )ó 
ˆô
 	%Ô&Ø×Ñ˜×/Ñ/°Ô3àŸ*™*¤y°bÔ'9Ñ9ˆŒØ�‰ ˜ˆÔ/ä$Ô&Ü@ÀÓDˆØ×Ñ˜ !Ô$Ø×Ñ˜×/Ñ/°Õ3r   N)Ú__name__Ú
__module__Ú__qualname__r   r2   r   r[   ra   rj   ro   r~   rƒ   r’   rœ   rŸ   r£   © r   r   r   r      s[  „ ò*ò	ñ Ð<Ó=ñ
ó >ð
ñ8 Ð<Ó=ñ)ó >ð)ñ Ð<Ó=ñ
ó >ð
ñ4 Ð<Ó=ñ(ó >ð(ñ  Ð<Ó=ñ>ó >ð>ñ6 Ð<Ó=ñ7ó >ð7ñ Ð<Ó=Ù
ÐBÓCñ4ó Dó >ð4ñ0 Ð<Ó=Ù
ÐBÓCÙ
ÐBÓCñ4ó Dó Dó >ð4ñ4 Ð<Ó=Ù
ÐBÓCÙ
ÐBÓCñ4ó Dó Dó >ð4ñ, Ð<Ó=ñ4ó >ñ4r   r   N)r   r   r   Úunittest.mockr   Údjango.contrib.authr   Údjango.core.files.uploadedfiler   Údjango.core.managementr	   Údjango.testr
   Údjango.utilsr   Ú"accounts.document_expiry_remindersr   r   r   Úaccounts.modelsr   r   r   r   r   r   r+   r   r§   r   r   ú<module>r°      sI   ðß .Ñ .Ý å .Ý =Ý /Ý  Ý !÷ñ ÷
÷ ñ Ó€ôt4 (õ t4r   