(t *testing.T)
| 2079 | } |
| 2080 | |
| 2081 | func TestUserAIProviderKeys(t *testing.T) { |
| 2082 | t.Parallel() |
| 2083 | |
| 2084 | createOpenAIProvider := func(t *testing.T, client *codersdk.ExperimentalClient, name string, enabled bool, apiKeys ...string) codersdk.AIProvider { |
| 2085 | t.Helper() |
| 2086 | |
| 2087 | provider, err := client.CreateAIProvider(testutil.Context(t, testutil.WaitLong), codersdk.CreateAIProviderRequest{ |
| 2088 | Type: codersdk.AIProviderTypeOpenAI, |
| 2089 | Name: name, |
| 2090 | Enabled: enabled, |
| 2091 | BaseURL: "https://api.openai.example.com/v1", |
| 2092 | APIKeys: apiKeys, |
| 2093 | }) |
| 2094 | require.NoError(t, err) |
| 2095 | return provider |
| 2096 | } |
| 2097 | |
| 2098 | findUserAIProviderKeyConfig := func( |
| 2099 | t *testing.T, |
| 2100 | configs []codersdk.UserAIProviderKeyConfig, |
| 2101 | providerID uuid.UUID, |
| 2102 | ) *codersdk.UserAIProviderKeyConfig { |
| 2103 | t.Helper() |
| 2104 | |
| 2105 | for i := range configs { |
| 2106 | if configs[i].Provider.ID == providerID { |
| 2107 | return &configs[i] |
| 2108 | } |
| 2109 | } |
| 2110 | return nil |
| 2111 | } |
| 2112 | |
| 2113 | t.Run("SelfServiceLifecycle", func(t *testing.T) { |
| 2114 | t.Parallel() |
| 2115 | |
| 2116 | ctx := testutil.Context(t, testutil.WaitLong) |
| 2117 | adminClient := newChatClient(t) |
| 2118 | firstUser := coderdtest.CreateFirstUser(t, adminClient.Client) |
| 2119 | memberClientRaw, _ := coderdtest.CreateAnotherUser(t, adminClient.Client, firstUser.OrganizationID) |
| 2120 | memberClient := codersdk.NewExperimentalClient(memberClientRaw) |
| 2121 | |
| 2122 | provider := createOpenAIProvider(t, adminClient, "test-user-key-"+uuid.NewString(), true, "test-provider-api-key") |
| 2123 | |
| 2124 | configs, err := memberClient.ListUserAIProviderKeyConfigs(ctx, "me") |
| 2125 | require.NoError(t, err) |
| 2126 | cfg := findUserAIProviderKeyConfig(t, configs, provider.ID) |
| 2127 | require.NotNil(t, cfg) |
| 2128 | require.False(t, cfg.HasUserAPIKey) |
| 2129 | require.True(t, cfg.HasProviderAPIKey) |
| 2130 | require.True(t, cfg.BYOKEnabled) |
| 2131 | |
| 2132 | cfgValue, err := memberClient.UpsertUserAIProviderKey(ctx, "me", provider.ID, codersdk.CreateUserAIProviderKeyRequest{APIKey: "test-user-api-key"}) |
| 2133 | require.NoError(t, err) |
| 2134 | require.Equal(t, provider.ID, cfgValue.Provider.ID) |
| 2135 | require.True(t, cfgValue.HasUserAPIKey) |
| 2136 | require.True(t, cfgValue.HasProviderAPIKey) |
| 2137 | require.True(t, cfgValue.BYOKEnabled) |
| 2138 |
nothing calls this directly
no test coverage detected