mongo-csharp-driver /tests/MongoDB.Driver.Tests/Specifications/crud/AggregateTest.cs

Language C# Lines 81
MD5 Hash 31eed7b34c6bd33b7b62b192553e7316 Estimated Cost $1,359 (why?)
Repository git://github.com/mongodb/mongo-csharp-driver.git View Raw File View Project SPDX
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* Copyright 2010-2015 MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using MongoDB.Bson;
using MongoDB.Driver.Core.Clusters;
using MongoDB.Driver.Core.Misc;

namespace MongoDB.Driver.Tests.Specifications.crud
{
    public class AggregateTest : CrudOperationWithResultTestBase<List<BsonDocument>>
    {
        private List<BsonDocument> _stages;
        private AggregateOptions _options = new AggregateOptions();

        public override bool CanExecute(ClusterDescription clusterDescription, BsonDocument arguments, out string reason)
        {
            var version = clusterDescription.Servers[0].Version;
            reason = string.Format("Server must be at least 2.6.0. Current server is {0}.", version);
            return !(version < new SemanticVersion(2, 6, 0) &&
                ((BsonArray)arguments["pipeline"])
                    .Cast<BsonDocument>()
                    .Last()
                    .Contains("$out"));
        }

        protected override bool TrySetArgument(string name, BsonValue value)
        {
            switch (name)
            {
                case "pipeline":
                    _stages = ((BsonArray)value).Cast<BsonDocument>().ToList();
                    return true;
                case "batchSize":
                    _options.BatchSize = (int)value;
                    return true;
            }

            return false;
        }

        protected override List<BsonDocument> ConvertExpectedResult(BsonValue expectedResult)
        {
            return ((BsonArray)expectedResult).Select(x => (BsonDocument)x).ToList();
        }

        protected override List<BsonDocument> ExecuteAndGetResult(IMongoCollection<BsonDocument> collection, bool async)
        {
            if (async)
            {
                var cursor = collection.AggregateAsync<BsonDocument>(_stages, _options).GetAwaiter().GetResult();
                return cursor.ToListAsync().GetAwaiter().GetResult();
            }
            else
            {
                return collection.Aggregate<BsonDocument>(_stages, _options).ToList();
            }
        }

        protected override void VerifyResult(List<BsonDocument> actualResult, List<BsonDocument> expectedResult)
        {
            actualResult.Should().Equal(expectedResult);
        }
    }
}
Back to Top