package com.rj.service;

import com.rj.config.SiliconFlowConfig;
import com.rj.dto.SiliconFlowTtsRequest;
import com.rj.dto.SiliconFlowTtsResponse;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

import static org.junit.jupiter.api.Assertions.*;

/**
 * SiliconFlow TTS 服务测试类
 * 
 * @author rj
 * @date 2025-01-02
 */
@SpringBootTest
@TestPropertySource(properties = {
    "siliconflow.enabled=true",
    "siliconflow.api-key=test-api-key",
    "siliconflow.base-url=https://api.siliconflow.cn/v1"
})
public class SiliconFlowTtsServiceTest {
    
    @Autowired
    private SiliconFlowTtsService ttsService;
    
    @Autowired
    private SiliconFlowConfig config;
    
    @Test
    public void testServiceConfiguration() {
        assertNotNull(config);
        assertTrue(config.isEnabled());
        assertEquals("https://api.siliconflow.cn/v1", config.getBaseUrl());
        assertEquals("fnlp/MOSS-TTSD-v0.5", config.getDefaultTtsModel());
    }
    
    @Test
    public void testServiceAvailability() {
        // 注意：这个测试需要真实的API Key才能通过
        // 在测试环境中，我们主要测试配置是否正确
        assertNotNull(ttsService);
    }
    
    @Test
    public void testTtsRequestCreation() {
        SiliconFlowTtsRequest request = new SiliconFlowTtsRequest();
        request.setModel("fnlp/MOSS-TTSD-v0.5");
        request.setInput("[S1]Hello, how are you today?[S2]I'm doing great, thanks for asking![S1]That's wonderful to hear");
        // voice参数有默认值，但也可以手动设置
        
        assertNotNull(request);
        assertEquals("fnlp/MOSS-TTSD-v0.5", request.getModel());
        assertNotNull(request.getInput());
        assertEquals("fnlp/MOSS-TTSD-v0.5:claire", request.getVoice()); // 验证默认voice参数
    }
    
    @Test
    public void testTtsResponseCreation() {
        SiliconFlowTtsResponse successResponse = SiliconFlowTtsResponse.success(
            "base64AudioData", "wav", 22050, 5.5
        );
        
        assertTrue(successResponse.isSuccess());
        assertEquals("base64AudioData", successResponse.getAudio());
        assertEquals("wav", successResponse.getFormat());
        assertEquals(22050, successResponse.getSampleRate());
        assertEquals(5.5, successResponse.getDuration());
        
        SiliconFlowTtsResponse errorResponse = SiliconFlowTtsResponse.error("API调用失败");
        assertFalse(errorResponse.isSuccess());
        assertEquals("API调用失败", errorResponse.getMessage());
    }
}

