package com.sonymusic

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

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

class YarnRunTest extends BaseGlobalVarTest {
    def yarnRun

    @BeforeEach
    void setUp() {
        super.setUp()
        yarnRun = loadScript('vars/yarnRun.groovy')

        helper.registerAllowedMethod('nodeSh', [Map])
        binding.setVariable('env', [:])
    }

    @Test
    void testCallWithNoArgs() {
        assertThrowsWithMessage(
            IllegalArgumentException.class, 
            "yarnRun: Missing required parameter: 'scriptNames'", 
            { yarnRun.call() }
        )
    }

    @Test
    void testCallWithScriptNames() {
        assertNull(
            yarnRun(scriptNames: ['lint', 'test:unit'])
        )
        assertMethodCalledOnceWith('nodeSh', [
            'set -e',
            'yarn run lint',
            'yarn run test:unit'
        ])
    }

    @Test
    void testCallWithNodeVersion() {
        assertNull(
            yarnRun(scriptNames: ['test'], nodeVersion: '22.1.1')
        )

        assertMethodCalledOnceWith('nodeSh', [
            'nodeVersion=22.1.1',
            'yarn run test',
        ])
    }

    @Test
    void testCallWithNodeVersion24() {
        assertNull(
            yarnRun(scriptNames: ['test'], nodeVersion: '24.5.0')
        )

        assertMethodCalledOnceWith('nodeSh', [
            'nodeVersion=24.5.0',
            'yarn run test',
        ])
    }

    @Test
    void testCallWithEnvVars() {
        assertNull(
            yarnRun(
                scriptNames: ['test'], 
                envVars: [
                    TEST: 'value',
                ]
            )
        )

        assertMethodCalledOnceWith('nodeSh', [
            'envVars={TEST=value}',
            'yarn run test'
        ])
    }
}
