/*
 * Copyright OpenSearch Contributors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.opensearch.commons.notifications.action

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import org.opensearch.commons.destination.message.LegacyChimeMessage
import org.opensearch.commons.utils.recreateObject

internal class LegacyPublishNotificationRequestTests {

    private fun assertRequestEquals(
        expected: LegacyPublishNotificationRequest,
        actual: LegacyPublishNotificationRequest
    ) {
        assertEquals(expected.baseMessage.channelName, actual.baseMessage.channelName)
        assertEquals(expected.baseMessage.channelType, actual.baseMessage.channelType)
        assertEquals(expected.baseMessage.messageContent, actual.baseMessage.messageContent)
        assertEquals(expected.baseMessage.url, actual.baseMessage.url)
        assertNull(actual.validate())
    }

    @Test
    fun `publish request serialize and deserialize transport object should be equal`() {
        val baseMessage = LegacyChimeMessage.Builder("chime_message").withMessage("Hello world").withUrl("https://amazon.com").build()
        val request = LegacyPublishNotificationRequest(baseMessage)
        val recreatedObject = recreateObject(request) { LegacyPublishNotificationRequest(it) }
        assertRequestEquals(request, recreatedObject)
    }
}