Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

108 linhas
5.3 KiB

  1. package service
  2. import (
  3. "testing"
  4. "github.com/QuantumNous/new-api/common"
  5. "github.com/QuantumNous/new-api/constant"
  6. "github.com/QuantumNous/new-api/model"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func TestGetBoundVideoAssetChannelForModelFindsSeedanceTianyiYunBinding(t *testing.T) {
  11. db := setupDoubaoAssetChannelDB(t)
  12. createDoubaoAssetChannelForTest(t, db, 16, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", "key", common.ChannelStatusEnabled)
  13. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 16, true)
  14. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", 16))
  15. ch, err := GetBoundVideoAssetChannelForModel(10, "default", "Doubao-Seedance-2.0", VideoAssetFamilySeedance)
  16. require.NoError(t, err)
  17. require.NotNil(t, ch)
  18. assert.Equal(t, 16, ch.Id)
  19. }
  20. func TestGetBoundVideoAssetChannelForModelFindsKlingBindingByFamily(t *testing.T) {
  21. db := setupDoubaoAssetChannelDB(t)
  22. createDoubaoAssetChannelForTest(t, db, 59, constant.ChannelTypeKlingAiping, "default", "key", common.ChannelStatusEnabled)
  23. createDoubaoAssetAbilityForTest(t, db, "default", "kling-v2-6", 59, true)
  24. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeKlingAiping, "default", 59))
  25. ch, err := GetBoundVideoAssetChannelForModel(10, "default", "kling-v2-6", VideoAssetFamilyKling)
  26. require.NoError(t, err)
  27. require.NotNil(t, ch)
  28. assert.Equal(t, 59, ch.Id)
  29. }
  30. func TestGetBoundVideoAssetChannelForModelRejectsBindingWithoutAbility(t *testing.T) {
  31. db := setupDoubaoAssetChannelDB(t)
  32. createDoubaoAssetChannelForTest(t, db, 16, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", "key", common.ChannelStatusEnabled)
  33. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", 16))
  34. ch, err := GetBoundVideoAssetChannelForModel(10, "default", "Doubao-Seedance-2.0", VideoAssetFamilySeedance)
  35. require.NoError(t, err)
  36. assert.Nil(t, ch)
  37. }
  38. func TestBindVideoAssetChannelReplacesOtherFamilyBindings(t *testing.T) {
  39. db := setupDoubaoAssetChannelDB(t)
  40. createDoubaoAssetChannelForTest(t, db, 7, constant.ChannelTypeDoubaoVideoCompatibleAiping, "default", "aiping-key", common.ChannelStatusEnabled)
  41. createDoubaoAssetChannelForTest(t, db, 16, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", "tianyiyun-key", common.ChannelStatusEnabled)
  42. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 7, true)
  43. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 16, true)
  44. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleAiping, "default", 7))
  45. selected, err := model.CacheGetChannel(16)
  46. require.NoError(t, err)
  47. require.NoError(t, BindVideoAssetChannel(10, "default", selected, VideoAssetFamilySeedance))
  48. oldBinding, err := model.GetUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleAiping, "default")
  49. require.NoError(t, err)
  50. assert.Nil(t, oldBinding)
  51. newBinding, err := model.GetUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default")
  52. require.NoError(t, err)
  53. require.NotNil(t, newBinding)
  54. assert.Equal(t, 16, newBinding.ChannelId)
  55. }
  56. func TestGetBoundVideoAssetChannelForModelPrefersLatestFamilyBindingForLegacyRows(t *testing.T) {
  57. db := setupDoubaoAssetChannelDB(t)
  58. createDoubaoAssetChannelForTest(t, db, 7, constant.ChannelTypeDoubaoVideoCompatibleAiping, "default", "aiping-key", common.ChannelStatusEnabled)
  59. createDoubaoAssetChannelForTest(t, db, 16, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", "tianyiyun-key", common.ChannelStatusEnabled)
  60. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 7, true)
  61. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 16, true)
  62. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleAiping, "default", 7))
  63. require.NoError(t, model.BindUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", 16))
  64. require.NoError(t, db.Model(&model.UserAssetChannel{}).
  65. Where("user_id = ? AND channel_type = ?", 10, constant.ChannelTypeDoubaoVideoCompatibleAiping).
  66. Update("updated_at", int64(100)).Error)
  67. require.NoError(t, db.Model(&model.UserAssetChannel{}).
  68. Where("user_id = ? AND channel_type = ?", 10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun).
  69. Update("updated_at", int64(200)).Error)
  70. ch, err := GetBoundVideoAssetChannelForModel(10, "default", "Doubao-Seedance-2.0", VideoAssetFamilySeedance)
  71. require.NoError(t, err)
  72. require.NotNil(t, ch)
  73. assert.Equal(t, 16, ch.Id)
  74. }
  75. func TestResolveVideoAssetChannelForModelAutoSelectsAndPersistsFamilyBinding(t *testing.T) {
  76. db := setupDoubaoAssetChannelDB(t)
  77. createDoubaoAssetChannelForTest(t, db, 16, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default", "tianyiyun-key", common.ChannelStatusEnabled)
  78. createDoubaoAssetAbilityForTest(t, db, "default", "Doubao-Seedance-2.0", 16, true)
  79. ch, err := ResolveVideoAssetChannelForModel(10, "default", "Doubao-Seedance-2.0", VideoAssetFamilySeedance)
  80. require.NoError(t, err)
  81. require.NotNil(t, ch)
  82. assert.Equal(t, 16, ch.Id)
  83. binding, err := model.GetUserAssetChannel(10, constant.ChannelTypeDoubaoVideoCompatibleTianyiYun, "default")
  84. require.NoError(t, err)
  85. require.NotNil(t, binding)
  86. assert.Equal(t, 16, binding.ChannelId)
  87. }