1package cli
2
3import (
4 "net/http"
5 "net/http/httptest"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9
10 "github.com/bnema/gordon/internal/adapters/in/cli/remote"
11)
12
13func TestRunAuthLoginWithToken_VerifiesAndStores(t *testing.T) {
14 t.Setenv("XDG_CONFIG_HOME", t.TempDir())
15
16 var receivedAuth string
17 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
18 if r.URL.Path != "/admin/status" {
19 w.WriteHeader(http.StatusNotFound)
20 return
21 }
22 receivedAuth = r.Header.Get("Authorization")
23 w.Header().Set("Content-Type", "application/json")
24 w.WriteHeader(http.StatusOK)
25 _, _ = w.Write([]byte(`{"routes":0,"registry_domain":"","registry_port":0,"server_port":0,"auto_route":false,"network_isolation":false,"container_status":{}}`))
26 }))
27 defer server.Close()
28
29 config := &remote.ClientConfig{
30 Active: "prod",
31 Remotes: map[string]remote.RemoteEntry{
32 "prod": {URL: server.URL},
33 },
34 }
35 assert.NoError(t, remote.SaveRemotes(remote.DefaultRemotesPath(), config))
36
37 err := runAuthLoginWithToken("", "token123")
38 assert.NoError(t, err)
39
40 loaded, err := remote.LoadRemotes("")
41 assert.NoError(t, err)
42 assert.Equal(t, "token123", loaded.Remotes["prod"].Token)
43 assert.Equal(t, "Bearer token123", receivedAuth)
44}
45
46func TestRunAuthLoginWithToken_StoresTokenOnVerificationFailure(t *testing.T) {
47 t.Setenv("XDG_CONFIG_HOME", t.TempDir())
48
49 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
50 if r.URL.Path != "/admin/status" {
51 w.WriteHeader(http.StatusNotFound)
52 return
53 }
54 w.WriteHeader(http.StatusUnauthorized)
55 _, _ = w.Write([]byte(`{"error":"unauthorized"}`))
56 }))
57 defer server.Close()
58
59 config := &remote.ClientConfig{
60 Active: "prod",
61 Remotes: map[string]remote.RemoteEntry{
62 "prod": {URL: server.URL},
63 },
64 }
65 assert.NoError(t, remote.SaveRemotes(remote.DefaultRemotesPath(), config))
66
67 err := runAuthLoginWithToken("", "token123")
68 assert.NoError(t, err)
69
70 loaded, err := remote.LoadRemotes("")
71 assert.NoError(t, err)
72 assert.Equal(t, "token123", loaded.Remotes["prod"].Token)
73}