mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
f1d333f0e6
Audited exported helpers in `coderd/util/*`, `testutil`, `cryptorand`, and friends, then replaced duplicated implementations with canonical versions. - **fix: `maps.SortedKeys` generic signature** — value type was hardcoded to `any`, making it impossible to actually call. Added second type parameter `V any`. Added table-driven tests with `cmp.Diff`. - **refactor: replace ad-hoc ptr helpers with `ptr.Ref`** — removed `int64Ptr`, `stringPtr`, `boolPtr`, `i64ptr`, `strPtr`, `PtrInt32` across 6 files. - **refactor: replace local `sortedKeys`/`sortKeys` with `maps.SortedKeys`** — now that the signature is fixed, scripts can use it. - **refactor: replace hand-rolled `capitalize` with `strings.Capitalize`** — the typegen version was also not UTF-8 safe. > 🤖 This PR was created with the help of Coder Agents, and was reviewed by my human. 🧑💻
127 lines
2.5 KiB
Go
127 lines
2.5 KiB
Go
package maps_test
|
|
|
|
import (
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
|
|
"github.com/coder/coder/v2/coderd/util/maps"
|
|
)
|
|
|
|
func TestSortedKeys(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for idx, tc := range []struct {
|
|
name string
|
|
input map[string]int
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "SortsAlphabetically",
|
|
input: map[string]int{
|
|
"banana": 1,
|
|
"apple": 2,
|
|
"cherry": 3,
|
|
},
|
|
expected: []string{"apple", "banana", "cherry"},
|
|
},
|
|
{
|
|
name: "AlreadySorted",
|
|
input: map[string]int{
|
|
"alpha": 1,
|
|
"mango": 2,
|
|
"zebra": 3,
|
|
},
|
|
expected: []string{"alpha", "mango", "zebra"},
|
|
},
|
|
{
|
|
name: "EmptyMap",
|
|
input: map[string]int{},
|
|
expected: nil,
|
|
},
|
|
} {
|
|
t.Run("#"+strconv.Itoa(idx)+"_"+tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
got := maps.SortedKeys(tc.input)
|
|
if diff := cmp.Diff(tc.expected, got); diff != "" {
|
|
t.Fatalf("unexpected result (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSubset(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for idx, tc := range []struct {
|
|
a map[string]string
|
|
b map[string]string
|
|
// expected value from Subset
|
|
expected bool
|
|
}{
|
|
{
|
|
a: nil,
|
|
b: nil,
|
|
expected: true,
|
|
},
|
|
{
|
|
a: map[string]string{},
|
|
b: map[string]string{},
|
|
expected: true,
|
|
},
|
|
{
|
|
a: map[string]string{"a": "1", "b": "2"},
|
|
b: map[string]string{"a": "1", "b": "2"},
|
|
expected: true,
|
|
},
|
|
{
|
|
a: map[string]string{"a": "1", "b": "2"},
|
|
b: map[string]string{"a": "1"},
|
|
expected: false,
|
|
},
|
|
{
|
|
a: map[string]string{"a": "1"},
|
|
b: map[string]string{"a": "1", "b": "2"},
|
|
expected: true,
|
|
},
|
|
{
|
|
a: map[string]string{"a": "1", "b": "2"},
|
|
b: map[string]string{},
|
|
expected: false,
|
|
},
|
|
{
|
|
a: map[string]string{"a": "1", "b": "2"},
|
|
b: map[string]string{"a": "1", "b": "3"},
|
|
expected: false,
|
|
},
|
|
// Zero value
|
|
{
|
|
a: map[string]string{"a": "1", "b": ""},
|
|
b: map[string]string{"a": "1", "b": "3"},
|
|
expected: true,
|
|
},
|
|
// Zero value, but the other way round
|
|
{
|
|
a: map[string]string{"a": "1", "b": "3"},
|
|
b: map[string]string{"a": "1", "b": ""},
|
|
expected: false,
|
|
},
|
|
// Both zero values
|
|
{
|
|
a: map[string]string{"a": "1", "b": ""},
|
|
b: map[string]string{"a": "1", "b": ""},
|
|
expected: true,
|
|
},
|
|
} {
|
|
t.Run("#"+strconv.Itoa(idx), func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
actual := maps.Subset(tc.a, tc.b)
|
|
if actual != tc.expected {
|
|
t.Errorf("expected %v, got %v", tc.expected, actual)
|
|
}
|
|
})
|
|
}
|
|
}
|