package com.sonymusic

import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

import static org.junit.jupiter.api.Assertions.assertNull

class SnowsqlTest extends BaseGlobalVarTest {
    def snowsql

    @BeforeEach
    void setUp() {
        super.setUp()
        snowsql = loadScript('vars/snowsql.groovy')
        helper.registerAllowedMethod('sh')
        helper.registerAllowedMethod('withEcr', [Closure])
        binding.setVariable('env', [:])
    }

    @Test
    void testCallWithMissingParameters() {
        assertThrowsWithMessage(
            IllegalArgumentException.class,
            "snowsql: Missing required parameter: 'script'",
            { snowsql.call() }
        )
    }

    @Test
    void testCallWithMissingEnvironmentVariables() {
        assertThrowsWithMessage(
            AssertionError.class,
            "SNOWSQL_ACCOUNT is mandatory. Expression: env.SNOWSQL_ACCOUNT",
            { snowsql.call(script: 'test.sql') }
        )
    }

    @Test
    void testCallWithAllEnvironmentVariables() {
        binding.setVariable('env', [
                SNOWSQL_ACCOUNT  : 'account',
                SNOWSQL_USER     : 'user',
                SNOWSQL_DATABASE : 'database',
                SNOWSQL_SCHEMA   : 'schema',
                SNOWSQL_ROLE     : 'role',
                SNOWSQL_WAREHOUSE: 'warehouse',
                SNOWSQL_PWD      : 'pwd'
        ])

        assertNull(
                snowsql(script: 'test')
        )

        assertMethodCalledTimes('withEcr', 1)
    }
}
