Src Code
class ReportingUtil {
companion object {
private val gson = Gson()
private val amazonSNS = AmazonSNSClientBuilder.standard().build()
private val topicArn = AppConfig.findString(TOPIC_ARN)
}
/**
* This function will convert object to json format and will publish to SNS topic.
* [invoiceData] -
*/
fun publishFailureInvoiceToSNS(invoiceData: InvoiceData) {
val jsonInvoiceMap = gson.toJson(invoiceData)
log.info("The Invoice : $invoiceData is converted to json format : $jsonInvoiceMap")
amazonSNS.publish(topicArn, jsonInvoiceMap)
log.info("Json invoice: $jsonInvoiceMap is published to the sns topic")
}
}
Unit Test
@Test
fun `test to publish invoice data to SNS topic`(){
initConfig()
val amazonSNS = mockk<AmazonSNS>()
val invoiceData = InvoiceData("a", "a", "a", BigDecimal(6), "a", "a", mutableMapOf("a" to "a"))
val reportingUtil = ReportingUtil()
every {
amazonSNS.publish("topicArn", "jsonInvoiceMap")
} returns PublishResult().withMessageId("MESSAGE_ID")
reportingUtil.publishFailureInvoiceToSNS(invoiceData)
}
This is giving me following error on src publish line,
com.amazonaws.services.sns.model.InvalidParameterException: Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: 5f1732ac-d63e-5e13-964c-65c312e218d7; Proxy: null)
My use-case does not allow me to use dependency injection, therefore I made client static here.
I also want to add my custom optimization plans in catalyst which will also be triggered at build time. Is there any way to do all this before execution?