1
2
3
4
5
6
7
8
9
10
11
12
13 package db
14
15 import (
16 "context"
17
18 "github.com/go-kivik/kivik/v4"
19 "github.com/go-kivik/kivik/v4/kiviktest/kt"
20 )
21
22 func init() {
23 kt.Register("Delete", _delete)
24 }
25
26 func _delete(ctx *kt.Context) {
27 ctx.RunRW(func(ctx *kt.Context) {
28 ctx.RunAdmin(func(ctx *kt.Context) {
29 testDelete(ctx, ctx.Admin)
30 })
31 ctx.RunNoAuth(func(ctx *kt.Context) {
32 testDelete(ctx, ctx.NoAuth)
33 })
34 })
35 }
36
37 type deleteDoc struct {
38 ID string `json:"_id"`
39 Rev string `json:"_rev,omitempty"`
40 Deleted bool `json:"_deleted"`
41 }
42
43 func testDelete(ctx *kt.Context, client *kivik.Client) {
44 ctx.Parallel()
45 dbName := ctx.TestDB()
46 admdb := ctx.Admin.DB(dbName, ctx.Options("db"))
47 if err := admdb.Err(); err != nil {
48 ctx.Errorf("Failed to connect to db as admin: %s", err)
49 }
50 db := client.DB(dbName, ctx.Options("db"))
51 if err := db.Err(); err != nil {
52 ctx.Errorf("Failed to connect to db: %s", err)
53 return
54 }
55
56 doc := &deleteDoc{
57 ID: ctx.TestDBName(),
58 }
59 rev, err := admdb.Put(context.Background(), doc.ID, doc)
60 if err != nil {
61 ctx.Errorf("Failed to create test doc: %s", err)
62 return
63 }
64 doc.Rev = rev
65
66 doc2 := &deleteDoc{
67 ID: ctx.TestDBName(),
68 }
69 rev, err = admdb.Put(context.Background(), doc2.ID, doc2)
70 if err != nil {
71 ctx.Errorf("Failed to create test doc: %s", err)
72 return
73 }
74 doc2.Rev = rev
75
76 ddoc := &testDoc{
77 ID: "_design/foo",
78 }
79 rev, err = admdb.Put(context.Background(), ddoc.ID, ddoc)
80 if err != nil {
81 ctx.Fatalf("Failed to create design doc in test db: %s", err)
82 }
83 ddoc.Rev = rev
84
85 local := &testDoc{
86 ID: "_local/foo",
87 }
88 rev, err = admdb.Put(context.Background(), local.ID, local)
89 if err != nil {
90 ctx.Fatalf("Failed to create local doc in test db: %s", err)
91 }
92 local.Rev = rev
93
94 ctx.Run("group", func(ctx *kt.Context) {
95 ctx.Run("WrongRev", func(ctx *kt.Context) {
96 ctx.Parallel()
97 _, err := db.Delete(context.Background(), doc2.ID, "1-9c65296036141e575d32ba9c034dd3ee")
98 ctx.CheckError(err)
99 })
100 ctx.Run("InvalidRevFormat", func(ctx *kt.Context) {
101 ctx.Parallel()
102 _, err := db.Delete(context.Background(), doc2.ID, "invalid rev format")
103 ctx.CheckError(err)
104 })
105 ctx.Run("MissingDoc", func(ctx *kt.Context) {
106 ctx.Parallel()
107 _, err := db.Delete(context.Background(), "missing doc", "1-9c65296036141e575d32ba9c034dd3ee")
108 ctx.CheckError(err)
109 })
110 ctx.Run("ValidRev", func(ctx *kt.Context) {
111 ctx.Parallel()
112 _, err := db.Delete(context.Background(), doc.ID, doc.Rev)
113 ctx.CheckError(err)
114 })
115 ctx.Run("DesignDoc", func(ctx *kt.Context) {
116 ctx.Parallel()
117 _, err := db.Delete(context.Background(), ddoc.ID, ddoc.Rev)
118 ctx.CheckError(err)
119 })
120 ctx.Run("Local", func(ctx *kt.Context) {
121 ctx.Parallel()
122 _, err := db.Delete(context.Background(), local.ID, local.Rev)
123 ctx.CheckError(err)
124 })
125 })
126 }
127
View as plain text