package Ġcom . netflix . spin n aker . ke el . artifacts Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Ċ import Ġcom . netflix . spin n aker . ke el . api . events . Artifact Version Deploy ed Ċ import Ġcom . netflix . spin n aker . ke el . api . support . Event Publisher Ċ import Ġcom . netflix . spin n aker . ke el . core . api . Promotion Status . CURRENT Ċ import Ġcom . netflix . spin n aker . ke el . core . api . Promotion Status . PENDING Ċ import Ġcom . netflix . spin n aker . ke el . events . Artifact Deploy ed Notification Ċ import Ġcom . netflix . spin n aker . ke el . persistence . Ke el Repository Ċ import Ġcom . netflix . spin n aker . ke el . test . Dummy Resource Spec Ċ import Ġcom . netflix . spin n aker . ke el . test . delivery Config Ċ import Ġcom . netflix . spin n aker . ke el . test . resource Ċ import Ġdev . min ut est . junit . JUnit 5 Min ut ests Ċ import Ġdev . min ut est . root Context Ċ import Ġio . mock k . Called Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ Ċ class ĠArtifact Deploy ed Listener Tests Ġ: ĠJ Unit 5 Min ut ests Ġ{ ĊĠ Ġclass ĠFix ture Ġ{ ĊĠĠĠ Ġval Ġresource Ġ= Ġresource () ĊĠĠĠ Ġval Ġresource Spy : ĠResource < Dummy Resource Spec > Ġ= Ġspy k ( resource ) ĊĠĠĠ Ġval Ġconfig Ġ= Ġdelivery Config ( resource Ġ= Ġresource Spy ) ĊĠĠĠ Ġval Ġartifact Ġ= Ġconfig . artifacts . first () ĊĠĠĠ Ġval Ġrepository Ġ= Ġmock k < Ke el Repository >( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġpublisher : ĠEvent Publisher Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠ Ġval Ġevent Ġ= ĠArtifact Version Deploy ed ( ĊĠĠĠĠĠ Ġresource Id Ġ= Ġresource Spy . id , ĊĠĠĠĠĠ Ġartifact Version Ġ= Ġ" 1 . 1 . 1 " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġsubject Ġ= ĠArtifact Deploy ed Listener ( repository , Ġpublisher ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtests () Ġ= Ġroot Context < Fixture > Ġ{ ĊĠĠĠ Ġfixture Ġ{ ĠFix ture () Ġ} ĊĊĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠ Ġevery Ġ{ Ġrepository . getResource ( resource . id ) Ġ} Ġreturns Ġresource Spy ĊĠĠĠĠĠ Ġevery Ġ{ Ġrepository . delivery Config For ( resource . id ) Ġ} Ġreturns Ġconfig ĊĠĠĠĠĠ Ġevery Ġ{ Ġrepository . environment For ( resource . id ) Ġ} Ġreturns Ġconfig . environments . first () ĊĠĠĠĠĠ Ġevery Ġ{ Ġrepository . get Artifact Promotion Status ( config , Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} Ġreturns ĠP ENDING ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġafter Ġ{ ĊĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" no Ġartifact Ġassociated Ġwith Ġthe Ġresource ") Ġ{ ĊĠĠĠĠĠ Ġtest (" nothing Ġis Ġmarked Ġas Ġdeployed ") Ġ{ ĊĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġrepository . is Approved For ( config , Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġrepository . mark As Successfully Deploy ed To ( config , Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" an Ġartifact Ġis Ġassociated Ġwith Ġa Ġresource ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresource Spy . find Associated Artifact ( config ) Ġ} Ġreturns Ġartifact ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcontext (" artifact Ġis Ġapproved Ġfor Ġenv ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrepository . is Approved For ( any (), Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" artifact Ġhas Ġbeen Ġmarked Ġcurrently Ġdeployed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrepository . get Artifact Promotion Status ( any (), Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} Ġreturns ĠCURRENT ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" artifact Ġis Ġnot Ġmarked Ġas Ġdeployed Ġagain ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġrepository . mark As Successfully Deploy ed To ( any (), Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" artifact Ġhas Ġnot Ġbeen Ġmarked Ġcurrently Ġdeployed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtest (" version Ġis Ġmarked Ġas Ġdeployed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġrepository . mark As Successfully Deploy ed To ( any (), Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" an Ġevent Ġis Ġsent Ġout ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġpublisher . publish Event ( of Type < Artifact Deploy ed Notification >()) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" artifact Ġis Ġnot Ġapproved Ġfor Ġenv ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrepository . is Approved For ( any (), Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest (" nothing Ġis Ġmarked Ġas Ġdeployed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġrepository . mark As Successfully Deploy ed To ( config , Ġany (), Ġevent . artifact Version , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtest (" an Ġevent Ġis Ġnot Ġsent Ġout ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsubject . on Artifact Version Deploy ed ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġpublisher Ġwas Not ĠCalled Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ