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