Files
fm_be/internal/service/wopi_service_test.go
2026-07-16 22:16:45 +07:00

54 lines
1.5 KiB
Go

package service
import (
"context"
"net/url"
"testing"
)
func TestBuildActionURLWithToken(t *testing.T) {
t.Parallel()
svc := NewWOPIService(WOPIConfig{
PublicBaseURL: "https://api-wfm-dev.mybit.co.id",
EditActionURL: "https://collabora.mybit.co.id/browser/abc/cool.html?",
})
// access_token_ttl is an absolute expiry time in epoch milliseconds.
const accessTokenTTL = int64(1782971996000)
got, err := svc.BuildActionURLWithToken(
context.Background(),
"019f1c17-b244-76c3-a1c0-6b3b382ad8b6",
"jwt-token-value",
accessTokenTTL,
)
if err != nil {
t.Fatalf("BuildActionURLWithToken error = %v", err)
}
parsed, err := url.Parse(got)
if err != nil {
t.Fatalf("url.Parse error = %v", err)
}
// access_token and access_token_ttl must be SEPARATE top-level params so
// Collabora echoes them back on every WOPI callback.
if q := parsed.Query().Get("access_token"); q != "jwt-token-value" {
t.Fatalf("unexpected access_token: %q", q)
}
if q := parsed.Query().Get("access_token_ttl"); q != "1782971996000" {
t.Fatalf("unexpected access_token_ttl: %q", q)
}
// WOPISrc must be the BARE file URL — no token embedded inside it.
wopiSrc := parsed.Query().Get("WOPISrc")
if wopiSrc != "https://api-wfm-dev.mybit.co.id/wopi/files/019f1c17-b244-76c3-a1c0-6b3b382ad8b6" {
t.Fatalf("WOPISrc must be the bare file url, got %q", wopiSrc)
}
if inner, err := url.Parse(wopiSrc); err == nil {
if tok := inner.Query().Get("access_token"); tok != "" {
t.Fatalf("WOPISrc must not embed access_token, got %q", tok)
}
}
}