1// Copyright (C) MongoDB, Inc. 2017-present. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); you may 4// not use this file except in compliance with the License. You may obtain 5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 6 7package mongo 8 9import ( 10 "testing" 11 12 "go.mongodb.org/mongo-driver/bson" 13 "go.mongodb.org/mongo-driver/internal/testutil/assert" 14) 15 16func TestResults(t *testing.T) { 17 t.Run("delete result", func(t *testing.T) { 18 t.Run("unmarshal into", func(t *testing.T) { 19 doc := bson.D{ 20 {"n", int64(2)}, 21 {"ok", int64(1)}, 22 } 23 24 b, err := bson.Marshal(doc) 25 assert.Nil(t, err, "Marshal error: %v", err) 26 27 var result DeleteResult 28 err = bson.Unmarshal(b, &result) 29 assert.Nil(t, err, "Unmarshal error: %v", err) 30 assert.Equal(t, int64(2), result.DeletedCount, "expected DeletedCount 2, got %v", result.DeletedCount) 31 }) 32 t.Run("marshal from", func(t *testing.T) { 33 result := DeleteResult{DeletedCount: 1} 34 buf, err := bson.Marshal(result) 35 assert.Nil(t, err, "Marshal error: %v", err) 36 37 var doc bson.D 38 err = bson.Unmarshal(buf, &doc) 39 assert.Nil(t, err, "Unmarshal error: %v", err) 40 41 assert.Equal(t, 1, len(doc), "expected document length 1, got %v", len(doc)) 42 for _, elem := range doc { 43 if elem.Key != "n" { 44 continue 45 } 46 47 n, ok := elem.Value.(int64) 48 assert.True(t, ok, "expected n type %T, got %T", int64(0), elem.Value) 49 assert.Equal(t, int64(1), n, "expected n 1, got %v", n) 50 return 51 } 52 t.Fatal("key n not found in document") 53 }) 54 }) 55 t.Run("update result", func(t *testing.T) { 56 t.Run("unmarshal into", func(t *testing.T) { 57 doc := bson.D{ 58 {"n", 1}, 59 {"nModified", 2}, 60 {"upserted", bson.A{ 61 bson.D{ 62 {"index", 0}, 63 {"_id", 3}, 64 }, 65 }}, 66 } 67 b, err := bson.Marshal(doc) 68 assert.Nil(t, err, "Marshal error: %v", err) 69 70 var result UpdateResult 71 err = bson.Unmarshal(b, &result) 72 assert.Nil(t, err, "Unmarshal error: %v", err) 73 assert.Equal(t, int64(1), result.MatchedCount, "expected MatchedCount 1, got %v", result.MatchedCount) 74 assert.Equal(t, int64(2), result.ModifiedCount, "expected ModifiedCount 2, got %v", result.ModifiedCount) 75 upsertedID := result.UpsertedID.(int32) 76 assert.Equal(t, int32(3), upsertedID, "expected upsertedID 3, got %v", upsertedID) 77 }) 78 }) 79} 80