Skip to content

Commit 3319f77

Browse files
committed
Fix tests
1 parent b9dc878 commit 3319f77

2 files changed

Lines changed: 35 additions & 18 deletions

File tree

internal/qbit/client_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"net/http"
66
"net/http/cookiejar"
77
"net/http/httptest"
8-
"strconv"
98
"testing"
109
)
1110

@@ -162,11 +161,23 @@ func TestSetPort_Success(t *testing.T) {
162161
if err != nil {
163162
t.Fatalf("ParseForm error: %v", err)
164163
}
165-
portStr := r.Form.Get("listen_port")
166-
var err2 error
167-
receivedPort, err2 = strconv.Atoi(portStr)
168-
if err2 != nil {
169-
t.Fatalf("Atoi error: %v", err2)
164+
// qBittorrent API expects the preferences as JSON in the 'json' form field
165+
jsonStr := r.Form.Get("json")
166+
if jsonStr == "" {
167+
w.WriteHeader(http.StatusBadRequest)
168+
_, _ = w.Write([]byte("json parameter missing"))
169+
return
170+
}
171+
var prefs map[string]int
172+
if err := json.Unmarshal([]byte(jsonStr), &prefs); err != nil {
173+
t.Fatalf("json.Unmarshal error: %v", err)
174+
}
175+
var ok bool
176+
receivedPort, ok = prefs["listen_port"]
177+
if !ok {
178+
w.WriteHeader(http.StatusBadRequest)
179+
_, _ = w.Write([]byte("listen_port parameter missing"))
180+
return
170181
}
171182
w.WriteHeader(http.StatusOK)
172183
return

internal/sync/watcher_test.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"net/http/httptest"
77
"os"
88
"path/filepath"
9-
"strconv"
109
"testing"
1110

1211
"github.com/eslutz/forwardarr/internal/qbit"
@@ -36,17 +35,19 @@ func TestReadPortFromFile_Success(t *testing.T) {
3635
func newTestQbitServer(t *testing.T, initialPort int, getStatus, setStatus int) (*httptest.Server, *int, *int, *int) {
3736
t.Helper()
3837

39-
port := initialPort
40-
setPortCalls := 0
41-
getPortCalls := 0
38+
// Use heap-allocated variables so pointers remain valid
39+
port := new(int)
40+
*port = initialPort
41+
setPortCalls := new(int)
42+
getPortCalls := new(int)
4243

4344
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
4445
switch r.URL.Path {
4546
case "/api/v2/auth/login":
4647
w.WriteHeader(http.StatusOK)
4748
_, _ = w.Write([]byte("Ok."))
4849
case "/api/v2/app/preferences":
49-
getPortCalls++
50+
*getPortCalls++
5051
status := http.StatusOK
5152
if getStatus != 0 {
5253
status = getStatus
@@ -58,9 +59,9 @@ func newTestQbitServer(t *testing.T, initialPort int, getStatus, setStatus int)
5859
}
5960

6061
w.Header().Set("Content-Type", "application/json")
61-
_ = json.NewEncoder(w).Encode(qbit.Preferences{ListenPort: port})
62+
_ = json.NewEncoder(w).Encode(qbit.Preferences{ListenPort: *port})
6263
case "/api/v2/app/setPreferences":
63-
setPortCalls++
64+
*setPortCalls++
6465
status := http.StatusOK
6566
if setStatus != 0 {
6667
status = setStatus
@@ -77,10 +78,15 @@ func newTestQbitServer(t *testing.T, initialPort int, getStatus, setStatus int)
7778
w.WriteHeader(http.StatusBadRequest)
7879
return
7980
}
80-
portStr := r.Form.Get("listen_port")
81-
if portStr != "" {
82-
if p, err := strconv.Atoi(portStr); err == nil {
83-
port = p
81+
82+
// qBittorrent API expects the preferences as JSON in the 'json' form field
83+
jsonStr := r.Form.Get("json")
84+
if jsonStr != "" {
85+
var prefs map[string]int
86+
if err := json.Unmarshal([]byte(jsonStr), &prefs); err != nil {
87+
t.Errorf("json.Unmarshal error: %v", err)
88+
} else if newPort, ok := prefs["listen_port"]; ok {
89+
*port = newPort
8490
}
8591
}
8692
w.WriteHeader(http.StatusOK)
@@ -89,7 +95,7 @@ func newTestQbitServer(t *testing.T, initialPort int, getStatus, setStatus int)
8995
}
9096
}))
9197

92-
return server, &port, &getPortCalls, &setPortCalls
98+
return server, port, getPortCalls, setPortCalls
9399
}
94100

95101
func TestWatcherSyncPortUpdatesPort(t *testing.T) {

0 commit comments

Comments
 (0)