Skip to content

Commit 7cc5cb0

Browse files
committed
Addes unit tests
1 parent 3d7dc6e commit 7cc5cb0

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright 2025 MongoDB Inc
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
//go:build unit
16+
17+
package transport
18+
19+
import (
20+
"net/http"
21+
"net/http/httptest"
22+
"testing"
23+
24+
"github.com/mongodb/mongodb-atlas-cli/atlascli/internal/config"
25+
"github.com/stretchr/testify/require"
26+
"go.mongodb.org/atlas/auth"
27+
)
28+
29+
func TestNewAccessTokenTransport(t *testing.T) {
30+
mockToken := &auth.Token{
31+
AccessToken: "mock-access-token",
32+
RefreshToken: "mock-refresh-token",
33+
}
34+
35+
saveToken := func(_ *auth.Token) error { return nil }
36+
37+
base := Default()
38+
accessTokenTransport, err := NewAccessTokenTransport(mockToken, base, saveToken)
39+
require.NoError(t, err)
40+
require.NotNil(t, accessTokenTransport)
41+
42+
req := httptest.NewRequest(http.MethodGet, "http://example.com", nil)
43+
resp, err := accessTokenTransport.RoundTrip(req)
44+
require.NoError(t, err)
45+
require.NotNil(t, resp)
46+
47+
authHeader := req.Header.Get("Authorization")
48+
expectedHeader := "Bearer " + mockToken.AccessToken
49+
require.Equal(t, expectedHeader, authHeader)
50+
}
51+
52+
func TestNewServiceAccountTransport(t *testing.T) {
53+
// Mock the token endpoint since the actual endpoint requires a valid client ID and secret.
54+
tokenServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
55+
w.Header().Set("Content-Type", "application/json")
56+
if _, err := w.Write([]byte(`{"access_token":"mock-token","token_type":"bearer","expires_in":3600}`)); err != nil {
57+
t.Errorf("Failed to write response: %v", err)
58+
}
59+
}))
60+
defer tokenServer.Close()
61+
62+
// Temporarily set OpsManagerURL to mock tokenServer URL
63+
originalURL := config.OpsManagerURL()
64+
config.SetOpsManagerURL(tokenServer.URL + "/")
65+
defer func() { config.SetOpsManagerURL(originalURL) }()
66+
67+
clientID := "mock-client-id"
68+
clientSecret := "mock-client-secret" //nolint:gosec
69+
base := http.DefaultTransport
70+
71+
tr, err := NewServiceAccountTransport(clientID, clientSecret, base)
72+
require.NoError(t, err)
73+
require.NotNil(t, tr)
74+
75+
// Create request to check authentication header
76+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
77+
if got := r.Header.Get("Authorization"); got != "Bearer mock-token" {
78+
t.Errorf("Expected Authorization header to be 'Bearer mock-token', but got: %v", got)
79+
}
80+
w.WriteHeader(http.StatusOK)
81+
}))
82+
defer server.Close()
83+
84+
req := httptest.NewRequest(http.MethodGet, server.URL, nil)
85+
resp, err := tr.RoundTrip(req)
86+
require.NoError(t, err)
87+
require.NotNil(t, resp)
88+
}

0 commit comments

Comments
 (0)