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) {
3635func 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
95101func TestWatcherSyncPortUpdatesPort (t * testing.T ) {
0 commit comments