antigravity_image_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. //go:build unit
  2. package service
  3. import (
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. // TestIsImageGenerationModel_GeminiProImage 测试 gemini-3-pro-image 识别
  8. func TestIsImageGenerationModel_GeminiProImage(t *testing.T) {
  9. require.True(t, isImageGenerationModel("gemini-3-pro-image"))
  10. require.True(t, isImageGenerationModel("gemini-3-pro-image-preview"))
  11. require.True(t, isImageGenerationModel("models/gemini-3-pro-image"))
  12. }
  13. // TestIsImageGenerationModel_GeminiFlashImage 测试 gemini-2.5-flash-image 识别
  14. func TestIsImageGenerationModel_GeminiFlashImage(t *testing.T) {
  15. require.True(t, isImageGenerationModel("gemini-2.5-flash-image"))
  16. require.True(t, isImageGenerationModel("gemini-2.5-flash-image-preview"))
  17. }
  18. // TestIsImageGenerationModel_RegularModel 测试普通模型不被识别为图片模型
  19. func TestIsImageGenerationModel_RegularModel(t *testing.T) {
  20. require.False(t, isImageGenerationModel("claude-3-opus"))
  21. require.False(t, isImageGenerationModel("claude-sonnet-4-20250514"))
  22. require.False(t, isImageGenerationModel("gpt-4o"))
  23. require.False(t, isImageGenerationModel("gemini-2.5-pro")) // 非图片模型
  24. require.False(t, isImageGenerationModel("gemini-2.5-flash"))
  25. // 验证不会误匹配包含关键词的自定义模型名
  26. require.False(t, isImageGenerationModel("my-gemini-3-pro-image-test"))
  27. require.False(t, isImageGenerationModel("custom-gemini-2.5-flash-image-wrapper"))
  28. }
  29. // TestIsImageGenerationModel_CaseInsensitive 测试大小写不敏感
  30. func TestIsImageGenerationModel_CaseInsensitive(t *testing.T) {
  31. require.True(t, isImageGenerationModel("GEMINI-3-PRO-IMAGE"))
  32. require.True(t, isImageGenerationModel("Gemini-3-Pro-Image"))
  33. require.True(t, isImageGenerationModel("GEMINI-2.5-FLASH-IMAGE"))
  34. }
  35. // TestExtractImageSize_ValidSizes 测试有效尺寸解析
  36. func TestExtractImageSize_ValidSizes(t *testing.T) {
  37. svc := &AntigravityGatewayService{}
  38. // 1K
  39. body := []byte(`{"generationConfig":{"imageConfig":{"imageSize":"1K"}}}`)
  40. require.Equal(t, "1K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  41. // 2K
  42. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":"2K"}}}`)
  43. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  44. // 4K
  45. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":"4K"}}}`)
  46. require.Equal(t, "4K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  47. }
  48. // TestExtractImageSize_CaseInsensitive 测试大小写不敏感
  49. func TestExtractImageSize_CaseInsensitive(t *testing.T) {
  50. svc := &AntigravityGatewayService{}
  51. body := []byte(`{"generationConfig":{"imageConfig":{"imageSize":"1k"}}}`)
  52. require.Equal(t, "1K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  53. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":"4k"}}}`)
  54. require.Equal(t, "4K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  55. }
  56. // TestExtractImageSize_Default 测试无 imageConfig 返回默认 2K
  57. func TestExtractImageSize_Default(t *testing.T) {
  58. svc := &AntigravityGatewayService{}
  59. // 无 generationConfig
  60. body := []byte(`{"contents":[]}`)
  61. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  62. // 有 generationConfig 但无 imageConfig
  63. body = []byte(`{"generationConfig":{"temperature":0.7}}`)
  64. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  65. // 有 imageConfig 但无 imageSize
  66. body = []byte(`{"generationConfig":{"imageConfig":{}}}`)
  67. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  68. }
  69. // TestExtractImageSize_InvalidJSON 测试非法 JSON 返回默认 2K
  70. func TestExtractImageSize_InvalidJSON(t *testing.T) {
  71. svc := &AntigravityGatewayService{}
  72. body := []byte(`not valid json`)
  73. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  74. body = []byte(`{"broken":`)
  75. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  76. }
  77. // TestExtractImageSize_EmptySize 测试空 imageSize 返回默认 2K
  78. func TestExtractImageSize_EmptySize(t *testing.T) {
  79. svc := &AntigravityGatewayService{}
  80. body := []byte(`{"generationConfig":{"imageConfig":{"imageSize":""}}}`)
  81. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  82. // 空格
  83. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":" "}}}`)
  84. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  85. }
  86. // TestExtractImageSize_InvalidSize 测试无效尺寸返回默认 2K
  87. func TestExtractImageSize_InvalidSize(t *testing.T) {
  88. svc := &AntigravityGatewayService{}
  89. body := []byte(`{"generationConfig":{"imageConfig":{"imageSize":"3K"}}}`)
  90. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  91. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":"8K"}}}`)
  92. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  93. body = []byte(`{"generationConfig":{"imageConfig":{"imageSize":"invalid"}}}`)
  94. require.Equal(t, "2K", NormalizeImageBillingTierOrDefault(svc.extractImageInputSize(body)))
  95. }