package Ġcom . github . aw st est kit . sqs . junit 5 Ċ Ċ import Ġorg . junit . jupiter . api . extension . After All Callback Ċ import Ġorg . junit . jupiter . api . extension . After Each Callback Ċ import Ġorg . junit . jupiter . api . extension . Before All Callback Ċ import Ġorg . junit . jupiter . api . extension . BeforeEach Callback Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . platform . commons . util . Annotation Utils Ċ import Ġsoftware . amazon . aw ssdk . services . sqs . S qs Client Ċ import Ġjava . lang . reflect . Annotated Element Ċ Ċ class ĠS qs Setup Extension Ġ: ĠBefore All Callback , ĠAfter All Callback , ĠBefore Each Callback , ĠAfter Each Callback Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsq s Client : ĠSimple S qs Client ĊĊĠĠĠ Ġoverride Ġfun Ġbefore All ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠS qs Client Factory ( S qs Client . builder ()) ĊĠĠĠĠĠĠĠ Ġsq s Client Ġ= ĠSimple S qs Client ( factory . create ( context )) ĊĊĠĠĠĠĠĠĠ Ġcreate Resources ( context . required TestClass ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter All ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Resources ( context . required TestClass ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠbeforeEach ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Resources ( context . required TestMethod ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠafterEach ( context : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Resources ( context . required TestMethod ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Resources ( annotated Element : ĠAnnot ated Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueues Ġ= Ġfind Queues ( annotated Element ) ĊĠĠĠĠĠĠĠ Ġqueues . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsq s Client . create Queue ( it . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Resources ( annotated Element : ĠAnnot ated Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueues Ġ= Ġfind Queues ( annotated Element ) ĊĠĠĠĠĠĠĠ Ġqueues . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsq s Client . delete Queue ( it . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Queues ( annotated Element : ĠAnnot ated Element ): ĠList < S qs Queue > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtopic Ġ= Ġfind S qs Queue ( annotated Element ) ĊĠĠĠĠĠĠĠ Ġtopic ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( topic ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfind S qs Queues ( annotated Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind S qs Queue ( annotated Element : ĠAnnot ated Element ): ĠS qs Queue ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAnnotation Utils . find Annotation ( annotated Element , ĠS qs Queue :: class . java ). orElse ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind S qs Queues ( annotated Element : ĠAnnot ated Element ): ĠList < S qs Queue > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtopics Ġ= ĠAnnotation Utils . find Annotation ( annotated Element , ĠS qs Queues :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( topics . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtopics . get (). value . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ