diff --git a/pkg/controllers/proxyprovider/controller.go b/pkg/controllers/proxyprovider/controller.go index 62fc597..1eba6cb 100644 --- a/pkg/controllers/proxyprovider/controller.go +++ b/pkg/controllers/proxyprovider/controller.go @@ -212,9 +212,13 @@ func (c *ProxyProviderController) reconcileUpdate(ctx context.Context, pp *v1alp if err != nil { return fmt.Errorf("error when calling `ProvidersAPI.ProvidersProxyPartialUpdate`: %w with response %v", err, r) } - pp.Status.PK = strconv.Itoa(int(resp.Pk)) + err = c.reconcileOutpost(ctx, pp.Spec.Outpost, int32(pk), ReconcileOutpostModeAdd) + if err != nil { + return fmt.Errorf("error when calling `reconcileOutpost`: %w", err) + } + return c.updateProxyProviderStatus(ctx, pp) } diff --git a/pkg/controllers/proxyprovider/controller_test.go b/pkg/controllers/proxyprovider/controller_test.go index ae88f9d..56d1fbc 100644 --- a/pkg/controllers/proxyprovider/controller_test.go +++ b/pkg/controllers/proxyprovider/controller_test.go @@ -123,6 +123,7 @@ func TestController_syncHandler_update(t *testing.T) { pp.Status.PK = "42" pp.Finalizers = []string{DeleteAuthentikProxyProviderFinalizer} + var outpostPartialUpdateCalled bool server := newAuthentikTestServer(t, authentikTestHandlers{ allRetrieve: func(w http.ResponseWriter, _ *http.Request) { writeJSON(t, w, http.StatusOK, map[string]any{"pk": 42}) @@ -130,6 +131,20 @@ func TestController_syncHandler_update(t *testing.T) { proxyPartialUpdate: func(w http.ResponseWriter, _ *http.Request) { writeJSON(t, w, http.StatusOK, map[string]any{"pk": 42}) }, + outpostRetrieve: outpostRetrieveHandler(t, nil), + outpostPartialUpdate: func(w http.ResponseWriter, r *http.Request) { + outpostPartialUpdateCalled = true + var body struct { + Providers []int32 `json:"providers"` + } + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + t.Fatalf("decode outpost patch body: %v", err) + } + if !slices.Contains(body.Providers, 42) { + t.Fatalf("patched providers = %v, want to contain 42", body.Providers) + } + writeJSON(t, w, http.StatusOK, map[string]any{"pk": testOutpostID, "providers": body.Providers}) + }, }) t.Cleanup(server.Close) @@ -140,6 +155,9 @@ func TestController_syncHandler_update(t *testing.T) { if err != nil { t.Fatalf("syncHandler() error = %v", err) } + if !outpostPartialUpdateCalled { + t.Fatal("expected Authentik outpost partial update call") + } got := getProxyProvider(t, ctrl, pp.Namespace, pp.Name) if got.Status.PK != "42" {