...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package kivik
16
17 import (
18 "context"
19 "errors"
20 "io"
21 "testing"
22
23 "github.com/google/go-cmp/cmp"
24
25 "github.com/go-kivik/kivik/v4/driver"
26 "github.com/go-kivik/kivik/v4/int/mock"
27 )
28
29 func TestChangesIterator(t *testing.T) {
30 t.Parallel()
31
32 want := []string{"a", "b", "c"}
33 var idx int
34 changes := newChanges(context.Background(), nil, &mock.Changes{
35 NextFunc: func(ch *driver.Change) error {
36 if idx >= len(want) {
37 return io.EOF
38 }
39 ch.ID = want[idx]
40 idx++
41 return nil
42 },
43 })
44
45 ids := []string{}
46 for change, err := range changes.Iterator() {
47 if err != nil {
48 t.Fatalf("Unexpected error: %s", err)
49 }
50 ids = append(ids, change.ID)
51 }
52 if diff := cmp.Diff(want, ids); diff != "" {
53 t.Errorf("Unexpected changes: %s", diff)
54 }
55 }
56
57 func TestChangesIteratorError(t *testing.T) {
58 t.Parallel()
59
60 changes := newChanges(context.Background(), nil, &mock.Changes{
61 NextFunc: func(*driver.Change) error {
62 return errors.New("failure")
63 },
64 })
65
66 for _, err := range changes.Iterator() {
67 if err == nil {
68 t.Fatal("Expected error")
69 }
70 return
71 }
72 t.Fatal("Expected an error during iteration")
73 }
74
75 func TestChangesIteratorBreak(t *testing.T) {
76 t.Parallel()
77
78 changes := newChanges(context.Background(), nil, &mock.Changes{
79 NextFunc: func(ch *driver.Change) error {
80 return nil
81 },
82 })
83
84 for _, err := range changes.Iterator() {
85 if err != nil {
86 t.Fatalf("Unexpected error: %s", err)
87 }
88 break
89 }
90 if changes.iter.state != stateClosed {
91 t.Errorf("Expected iterator to be closed")
92 }
93 }
94
View as plain text