...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package indexeddb
16
17 import (
18 "context"
19 "strings"
20 "testing"
21
22 "github.com/google/go-cmp/cmp"
23 "github.com/gopherjs/gopherjs/js"
24 "gitlab.com/flimzy/testy"
25
26 kivik "github.com/go-kivik/kivik/v4"
27 "github.com/go-kivik/kivik/v4/kiviktest/kt"
28 _ "github.com/go-kivik/kivik/v4/pouchdb"
29 "github.com/go-kivik/kivik/v4/pouchdb/internal"
30 )
31
32 func TestPurge(t *testing.T) {
33 pouchVer := internal.PouchDBVersion(t)
34 if strings.HasPrefix(pouchVer, "7.") {
35 t.Skipf("Skipping PouchDB 8+ test for PouchDB %v", pouchVer)
36 }
37
38 js.Global.Call("require", "fake-indexeddb/auto")
39 indexedDBPlugin := js.Global.Call("require", "pouchdb-adapter-indexeddb")
40 pouchDB := js.Global.Get("PouchDB")
41 pouchDB.Call("plugin", indexedDBPlugin)
42 idbPouch := pouchDB.Call("defaults", map[string]interface{}{
43 "adapter": "indexeddb",
44 })
45 js.Global.Set("PouchDB", idbPouch)
46
47 t.Run("not found", func(t *testing.T) {
48 const wantErr = "not_found: missing"
49 client, err := kivik.New("pouch", "")
50 if err != nil {
51 t.Errorf("Failed to connect to PouchDB/memdown driver: %s", err)
52 return
53 }
54 dbname := kt.TestDBName(t)
55 ctx := context.Background()
56 t.Cleanup(func() {
57 _ = client.DestroyDB(ctx, dbname)
58 })
59 if e := client.CreateDB(ctx, dbname); e != nil {
60 t.Fatalf("Failed to create db: %s", e)
61 }
62 _, err = client.DB(dbname).Purge(ctx, map[string][]string{"foo": {"1-xxx"}})
63 if !testy.ErrorMatches(wantErr, err) {
64 t.Errorf("Unexpected error: %s", err)
65 }
66 })
67 t.Run("success", func(t *testing.T) {
68 client, err := kivik.New("pouch", "")
69 if err != nil {
70 t.Errorf("Failed to connect to PouchDB/memdown driver: %s", err)
71 return
72 }
73 const docID = "test"
74 dbname := kt.TestDBName(t)
75 ctx := context.Background()
76 t.Cleanup(func() {
77 _ = client.DestroyDB(ctx, dbname)
78 })
79 if e := client.CreateDB(ctx, dbname); e != nil {
80 t.Fatalf("Failed to create db: %s", e)
81 }
82 db := client.DB(dbname)
83 rev, err := db.Put(ctx, docID, map[string]string{"foo": "bar"})
84 if err != nil {
85 t.Fatal(err)
86 }
87 result, err := db.Purge(ctx, map[string][]string{docID: {rev}})
88 if err != nil {
89 t.Fatal(err)
90 }
91 want := &kivik.PurgeResult{
92 Seq: 0,
93 Purged: map[string][]string{
94 docID: {rev},
95 },
96 }
97 if d := cmp.Diff(want, result); d != "" {
98 t.Error(d)
99 }
100 })
101 }
102
View as plain text