github.com/go-kivik/kivik/v4@v4.3.2/kiviktest/db/delete.go (about) 1 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 2 // use this file except in compliance with the License. You may obtain a copy of 3 // the License at 4 // 5 // http://www.apache.org/licenses/LICENSE-2.0 6 // 7 // Unless required by applicable law or agreed to in writing, software 8 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 9 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 10 // License for the specific language governing permissions and limitations under 11 // the License. 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 }