1package miniredis
2
3import (
4	"reflect"
5	"sort"
6)
7
8// T is implemented by Testing.T
9type T interface {
10	Helper()
11	Errorf(string, ...interface{})
12}
13
14// CheckGet does not call Errorf() iff there is a string key with the
15// expected value. Normal use case is `m.CheckGet(t, "username", "theking")`.
16func (m *Miniredis) CheckGet(t T, key, expected string) {
17	t.Helper()
18
19	found, err := m.Get(key)
20	if err != nil {
21		t.Errorf("GET error, key %#v: %v", key, err)
22		return
23	}
24	if found != expected {
25		t.Errorf("GET error, key %#v: Expected %#v, got %#v", key, expected, found)
26		return
27	}
28}
29
30// CheckList does not call Errorf() iff there is a list key with the
31// expected values.
32// Normal use case is `m.CheckGet(t, "favorite_colors", "red", "green", "infrared")`.
33func (m *Miniredis) CheckList(t T, key string, expected ...string) {
34	t.Helper()
35
36	found, err := m.List(key)
37	if err != nil {
38		t.Errorf("List error, key %#v: %v", key, err)
39		return
40	}
41	if !reflect.DeepEqual(expected, found) {
42		t.Errorf("List error, key %#v: Expected %#v, got %#v", key, expected, found)
43		return
44	}
45}
46
47// CheckSet does not call Errorf() iff there is a set key with the
48// expected values.
49// Normal use case is `m.CheckSet(t, "visited", "Rome", "Stockholm", "Dublin")`.
50func (m *Miniredis) CheckSet(t T, key string, expected ...string) {
51	t.Helper()
52
53	found, err := m.Members(key)
54	if err != nil {
55		t.Errorf("Set error, key %#v: %v", key, err)
56		return
57	}
58	sort.Strings(expected)
59	if !reflect.DeepEqual(expected, found) {
60		t.Errorf("Set error, key %#v: Expected %#v, got %#v", key, expected, found)
61		return
62	}
63}
64