Back to Repositories

Testing SunoApi Music Generation Integration in ruoyi-vue-pro

This test suite evaluates the SunoApi integration for music generation and lyrics functionality in the RuoYi Vue Pro framework. It validates various API endpoints including music generation, custom music creation with lyrics, and usage limit monitoring.

Test Coverage Overview

The test suite provides comprehensive coverage of the SunoApi music generation capabilities:

  • Basic music generation with mood and model selection
  • Custom music generation with verse and chorus specifications
  • Lyrics generation functionality
  • Music retrieval by ID
  • API usage limit monitoring

Implementation Analysis

The testing approach utilizes JUnit 5 for structured unit testing of the SunoApi integration. Each test method focuses on a specific API endpoint, implementing a clear arrange-act-assert pattern with proper test isolation through @Disabled annotations for controlled execution.

Technical Details

Testing infrastructure includes:

  • JUnit Jupiter test framework
  • Hutool core utilities for list operations
  • Configurable API endpoint URLs for testing environments
  • Custom request/response data models for music generation

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Clear test method naming conventions
  • Proper test isolation and independence
  • Structured request preparation and response handling
  • Comprehensive API functionality coverage
  • Flexible environment configuration

yunaiv/ruoyi-vue-pro

yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/music/SunoApiTests.java

            
package cn.iocoder.yudao.framework.ai.music;

import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import java.util.List;

/**
 * {@link SunoApi} 集成测试
 *
 * @author xiaoxin
 */
public class SunoApiTests {

    private final SunoApi sunoApi = new SunoApi("https://suno-3tah0ycyt-status2xxs-projects.vercel.app");
//    private final SunoApi sunoApi = new SunoApi("http://127.0.0.1:3001");

    @Test // 描述模式
    @Disabled
    public void testGenerate() {
        // 准备参数
        SunoApi.MusicGenerateRequest generateRequest = new SunoApi.MusicGenerateRequest(
                "happy music",
                "chirp-v3-5",
                false);

        // 调用方法
        List<SunoApi.MusicData> musicList = sunoApi.generate(generateRequest);
        // 打印结果
        System.out.println(musicList);
    }

    @Test // 歌词模式
    @Disabled
    public void testCustomGenerate() {
        // 准备参数
        SunoApi.MusicGenerateRequest generateRequest = new SunoApi.MusicGenerateRequest(
                "创作一首带有轻松吉他旋律的流行歌曲,[verse] 描述夏日海滩的宁静,[chorus] 节奏加快,表达对自由的向往。",
                "Happy",
                "Happy Song",
                "chirp-v3.5",
                false,
                false);

        // 调用方法
        List<SunoApi.MusicData> musicList = sunoApi.customGenerate(generateRequest);
        // 打印结果
        System.out.println(musicList);
    }

    @Test
    @Disabled
    public void testGenerateLyrics() {
        // 调用方法
        SunoApi.LyricsData lyricsData = sunoApi.generateLyrics("A soothing lullaby");
        // 打印结果
        System.out.println(lyricsData);
    }

    @Test
    @Disabled
    public void testGetMusicList() {
        // 准备参数
//        String id = "d460ddda-7c87-4f34-b751-419b08a590ca";
        String id = "584729e5-0fe9-4157-86da-1b4803ff42bf";

        // 调用方法
        List<SunoApi.MusicData> musicList = sunoApi.getMusicList(ListUtil.of(id));
        // 打印结果
        System.out.println(musicList);
    }

    @Test
    @Disabled
    public void testGetLimitUsage() {
        // 调用方法
        SunoApi.LimitUsageData limitUsageData = sunoApi.getLimitUsage();
        // 打印结果
        System.out.println(limitUsageData);
    }

}