...

Source file src/github.com/go-kivik/kivik/v4/kiviktest/db/put.go

Documentation: github.com/go-kivik/kivik/v4/kiviktest/db

     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("Put", put)
    24  }
    25  
    26  func put(ctx *kt.Context) {
    27  	ctx.RunRW(func(ctx *kt.Context) {
    28  		ctx.RunAdmin(func(ctx *kt.Context) {
    29  			testPut(ctx, ctx.Admin)
    30  		})
    31  		ctx.RunNoAuth(func(ctx *kt.Context) {
    32  			testPut(ctx, ctx.NoAuth)
    33  		})
    34  	})
    35  }
    36  
    37  func testPut(ctx *kt.Context, client *kivik.Client) {
    38  	ctx.Parallel()
    39  	dbName := ctx.TestDB()
    40  	db := client.DB(dbName, ctx.Options("db"))
    41  	if err := db.Err(); !ctx.IsExpectedSuccess(err) {
    42  		return
    43  	}
    44  	ctx.Run("group", func(ctx *kt.Context) {
    45  		ctx.Run("Create", func(ctx *kt.Context) {
    46  			const age = 32
    47  			ctx.Parallel()
    48  
    49  			doc := &testDoc{
    50  				ID:   ctx.TestDBName(),
    51  				Name: "Alberto",
    52  				Age:  age,
    53  			}
    54  			var rev string
    55  			err := kt.Retry(func() error {
    56  				var e error
    57  				rev, e = db.Put(context.Background(), doc.ID, doc)
    58  				return e
    59  			})
    60  			if !ctx.IsExpectedSuccess(err) {
    61  				return
    62  			}
    63  			doc.Rev = rev
    64  			doc.Age = 40
    65  			ctx.Run("Update", func(ctx *kt.Context) {
    66  				err := kt.Retry(func() error {
    67  					_, e := db.Put(context.Background(), doc.ID, doc)
    68  					return e
    69  				})
    70  				ctx.CheckError(err)
    71  			})
    72  		})
    73  		ctx.Run("DesignDoc", func(ctx *kt.Context) {
    74  			ctx.Parallel()
    75  			doc := map[string]interface{}{
    76  				"_id":      "_design/testddoc",
    77  				"language": "javascript",
    78  				"views": map[string]interface{}{
    79  					"testview": map[string]interface{}{
    80  						"map": `function(doc) {
    81  			                if (doc.include) {
    82  			                    emit(doc._id, doc.index);
    83  			                }
    84  			            }`,
    85  					},
    86  				},
    87  			}
    88  			err := kt.Retry(func() error {
    89  				_, err := db.Put(context.Background(), doc["_id"].(string), doc)
    90  				return err
    91  			})
    92  			ctx.CheckError(err)
    93  		})
    94  		ctx.Run("Local", func(ctx *kt.Context) {
    95  			ctx.Parallel()
    96  			doc := map[string]interface{}{
    97  				"_id":  "_local/foo",
    98  				"name": "Bob",
    99  			}
   100  			err := kt.Retry(func() error {
   101  				_, err := db.Put(context.Background(), doc["_id"].(string), doc)
   102  				return err
   103  			})
   104  			ctx.CheckError(err)
   105  		})
   106  		ctx.Run("LeadingUnderscoreInID", func(ctx *kt.Context) {
   107  			ctx.Parallel()
   108  			doc := map[string]interface{}{
   109  				"_id":  "_badid",
   110  				"name": "Bob",
   111  			}
   112  			err := kt.Retry(func() error {
   113  				_, err := db.Put(context.Background(), doc["_id"].(string), doc)
   114  				return err
   115  			})
   116  			ctx.CheckError(err)
   117  		})
   118  		ctx.Run("HeavilyEscapedID", func(ctx *kt.Context) {
   119  			ctx.Parallel()
   120  			doc := map[string]interface{}{
   121  				"_id":  "foo+bar & spáces ?!*,",
   122  				"name": "Bob",
   123  			}
   124  			err := kt.Retry(func() error {
   125  				_, err := db.Put(context.Background(), doc["_id"].(string), doc)
   126  				return err
   127  			})
   128  			ctx.CheckError(err)
   129  		})
   130  		ctx.Run("SlashInID", func(ctx *kt.Context) {
   131  			ctx.Parallel()
   132  			doc := map[string]interface{}{
   133  				"_id":  "foo/bar",
   134  				"name": "Bob",
   135  			}
   136  			err := kt.Retry(func() error {
   137  				_, err := db.Put(context.Background(), doc["_id"].(string), doc)
   138  				return err
   139  			})
   140  			ctx.CheckError(err)
   141  		})
   142  		ctx.Run("Conflict", func(ctx *kt.Context) {
   143  			ctx.Parallel()
   144  			doc := map[string]interface{}{
   145  				"_id":  "duplicate",
   146  				"name": "Bob",
   147  			}
   148  			err := kt.Retry(func() error {
   149  				_, err := ctx.Admin.DB(dbName).Put(context.Background(), doc["_id"].(string), doc)
   150  				return err
   151  			})
   152  			if err != nil {
   153  				ctx.Fatalf("Failed to create document for duplicate test: %s", err)
   154  			}
   155  			err = kt.Retry(func() error {
   156  				_, err = db.Put(context.Background(), doc["_id"].(string), doc)
   157  				return err
   158  			})
   159  			ctx.CheckError(err)
   160  		})
   161  	})
   162  }
   163  

View as plain text