package socialconnect import ( "context" "net/http" "net/http/httptest" "strings" "testing" ) func TestTikTokAuthorizationURL(t *testing.T) { c := NewTikTokConnector("client-key-123", "secret", "https://app.deklarix.de/oauth/tiktok/callback") u := c.AuthorizationURL("state-xyz") for _, want := range []string{ "https://www.tiktok.com/v2/auth/authorize/?", "client_key=client-key-123", "state=state-xyz", "response_type=code", } { if !strings.Contains(u, want) { t.Errorf("AuthorizationURL = %q, want it to contain %q", u, want) } } } func TestTikTokExchangeSuccess(t *testing.T) { tokenServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { t.Fatalf("ParseForm: %v", err) } if r.FormValue("client_key") != "client-key-123" { t.Errorf("client_key = %q, want client-key-123", r.FormValue("client_key")) } w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"access_token":"tt-access","refresh_token":"tt-refresh","expires_in":86400,"open_id":"tt-open-id-1"}`)) })) defer tokenServer.Close() c := NewTikTokConnector("client-key-123", "secret", "https://app.deklarix.de/oauth/tiktok/callback") c.TokenURL = tokenServer.URL tok, err := c.Exchange(context.Background(), "der-code") if err != nil { t.Fatalf("Exchange: %v", err) } if tok.AccessToken != "tt-access" || tok.RefreshToken != "tt-refresh" || tok.PlatformUserID != "tt-open-id-1" { t.Errorf("unexpected token: %+v", tok) } } func TestTikTokExchangePropagatesPlatformError(t *testing.T) { tokenServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // TikTok liefert Fehler oft mit Status 200, Fehlerfeldern im Body. w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"error":"invalid_grant","error_description":"code abgelaufen"}`)) })) defer tokenServer.Close() c := NewTikTokConnector("client-key-123", "secret", "https://app.deklarix.de/oauth/tiktok/callback") c.TokenURL = tokenServer.URL _, err := c.Exchange(context.Background(), "abgelaufener-code") if err == nil { t.Fatal("expected an error when the platform response contains an error field") } if !strings.Contains(err.Error(), "invalid_grant") { t.Errorf("error = %v, want it to mention invalid_grant", err) } }