mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-15 01:49:08 +02:00
[management] Let a discovery request name a record and a new upstream
Editing a provider's upstream URL meant retyping its API key. The key is the one field the API never returns, so there was nothing to retype from, and the dashboard had to demand it because a provider_id request resolved the upstream from the stored row — listing the old endpoint while the form showed the new one. The request now reads as a partial edit of the record it names, the same way PUT on a provider already does: an upstream in the body overrides the stored one, an omitted upstream keeps it. The credential and the catalog entry still come from the record only, so a caller cannot aim a stored key at a vendor of their choosing.
This commit is contained in:
@@ -456,3 +456,50 @@ func TestDiscoverProviderModels_SurfacesTheVendorRefusal(t *testing.T) {
|
||||
|
||||
require.EqualError(t, err, "the provider rejected the credential")
|
||||
}
|
||||
|
||||
// TestDiscoverProviderModels_ListsAgainstTheUrlOnTheForm covers the edit the
|
||||
// operator cannot otherwise make: the upstream has been retyped and the
|
||||
// credential has not, because the API never returned it to be retyped. Naming
|
||||
// the record supplies the key; the request supplies the URL under test.
|
||||
func TestDiscoverProviderModels_ListsAgainstTheUrlOnTheForm(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
f := newBootstrapFixture(t)
|
||||
// Twice: the create, and the listing, which is gated on Create too.
|
||||
f.expectPermission("account1", "user1", modules.AgentNetworkProviders, operations.Create, true)
|
||||
f.expectPermission("account1", "user1", modules.AgentNetworkProviders, operations.Create, true)
|
||||
|
||||
created, err := f.manager.CreateProvider(ctx, "user1", newCheckedProvider("account1"))
|
||||
require.NoError(t, err)
|
||||
f.vendor.requests = nil
|
||||
|
||||
_, err = f.manager.DiscoverProviderModels(ctx, "account1", "user1", modeldiscovery.Request{
|
||||
CatalogID: "openai_api",
|
||||
UpstreamURL: "https://gateway.example.com",
|
||||
}, created.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
asked := f.vendor.only(t)
|
||||
require.Equal(t, "https://gateway.example.com", asked.UpstreamURL, "the typed url must be the one listed against")
|
||||
require.Equal(t, "sk-good", asked.APIKey, "and the stored key must be what lists it")
|
||||
}
|
||||
|
||||
// TestDiscoverProviderModels_FallsBackToTheStoredUrl keeps the plain refresh
|
||||
// working: a request naming only the record still reaches the saved upstream.
|
||||
func TestDiscoverProviderModels_FallsBackToTheStoredUrl(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
f := newBootstrapFixture(t)
|
||||
f.expectPermission("account1", "user1", modules.AgentNetworkProviders, operations.Create, true)
|
||||
f.expectPermission("account1", "user1", modules.AgentNetworkProviders, operations.Create, true)
|
||||
|
||||
created, err := f.manager.CreateProvider(ctx, "user1", newCheckedProvider("account1"))
|
||||
require.NoError(t, err)
|
||||
stored := f.vendor.only(t).UpstreamURL
|
||||
f.vendor.requests = nil
|
||||
|
||||
_, err = f.manager.DiscoverProviderModels(ctx, "account1", "user1", modeldiscovery.Request{
|
||||
CatalogID: "openai_api",
|
||||
}, created.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, stored, f.vendor.only(t).UpstreamURL)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user