1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
package lib
import (
"encoding/json"
"io"
"net/http"
"net/http/httptest"
"reflect"
"testing"
)
func TestGetRemoteURLContent(t *testing.T) {
t.Run("success", func(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("test content"))
}))
defer server.Close()
content, err := GetRemoteURLContent(server.URL)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if string(content) != "test content" {
t.Errorf("got %q, expected %q", string(content), "test content")
}
})
t.Run("non-OK status code", func(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
}))
defer server.Close()
_, err := GetRemoteURLContent(server.URL)
if err == nil {
t.Fatal("expected error, got nil")
}
})
t.Run("network error", func(t *testing.T) {
_, err := GetRemoteURLContent("http://invalid.invalid.invalid:1234")
if err == nil {
t.Fatal("expected error, got nil")
}
})
}
func TestGetRemoteURLReader(t *testing.T) {
t.Run("success", func(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("reader content"))
}))
defer server.Close()
reader, err := GetRemoteURLReader(server.URL)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
defer reader.Close()
content, err := io.ReadAll(reader)
if err != nil {
t.Fatalf("failed to read: %v", err)
}
if string(content) != "reader content" {
t.Errorf("got %q, expected %q", string(content), "reader content")
}
})
t.Run("non-OK status code", func(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer server.Close()
_, err := GetRemoteURLReader(server.URL)
if err == nil {
t.Fatal("expected error, got nil")
}
})
t.Run("network error", func(t *testing.T) {
_, err := GetRemoteURLReader("http://invalid.invalid.invalid:1234")
if err == nil {
t.Fatal("expected error, got nil")
}
})
}
func TestWantedListExtended_UnmarshalJSON(t *testing.T) {
t.Run("empty data", func(t *testing.T) {
var w WantedListExtended
err := w.UnmarshalJSON([]byte{})
if err != nil {
t.Errorf("unexpected error: %v", err)
}
})
t.Run("slice type", func(t *testing.T) {
var w WantedListExtended
data := []byte(`["a", "b", "c"]`)
err := w.UnmarshalJSON(data)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
expected := []string{"a", "b", "c"}
if !reflect.DeepEqual(w.TypeSlice, expected) {
t.Errorf("got %v, expected %v", w.TypeSlice, expected)
}
if w.TypeMap != nil && len(w.TypeMap) != 0 {
t.Errorf("expected empty TypeMap, got %v", w.TypeMap)
}
})
t.Run("map type", func(t *testing.T) {
var w WantedListExtended
data := []byte(`{"key1": ["val1", "val2"], "key2": ["val3"]}`)
err := w.UnmarshalJSON(data)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
expected := map[string][]string{
"key1": {"val1", "val2"},
"key2": {"val3"},
}
if !reflect.DeepEqual(w.TypeMap, expected) {
t.Errorf("got %v, expected %v", w.TypeMap, expected)
}
})
t.Run("invalid JSON", func(t *testing.T) {
var w WantedListExtended
data := []byte(`{invalid}`)
err := w.UnmarshalJSON(data)
if err == nil {
t.Error("expected error, got nil")
}
})
t.Run("standard json.Unmarshal", func(t *testing.T) {
type container struct {
Wanted WantedListExtended `json:"wanted"`
}
// Test with slice value
var c1 container
if err := json.Unmarshal([]byte(`{"wanted": ["item1", "item2"]}`), &c1); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(c1.Wanted.TypeSlice) != 2 {
t.Errorf("expected 2 items in TypeSlice, got %d", len(c1.Wanted.TypeSlice))
}
// Test with map value
var c2 container
if err := json.Unmarshal([]byte(`{"wanted": {"k": ["v1", "v2"]}}`), &c2); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(c2.Wanted.TypeMap) != 1 {
t.Errorf("expected 1 key in TypeMap, got %d", len(c2.Wanted.TypeMap))
}
})
}
|