PageRenderTime 51ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/MongoDB.Driver.Tests/Specifications/crud/UpdateManyTest.cs

http://github.com/mongodb/mongo-csharp-driver
C# | 111 lines | 89 code | 8 blank | 14 comment | 7 complexity | a2b65268a394654fa09424c9eefb1c94 MD5 | raw file
Possible License(s): Apache-2.0
  1. /* Copyright 2010-present MongoDB Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using FluentAssertions;
  16. using MongoDB.Bson;
  17. using System.Collections.Generic;
  18. using System.Linq;
  19. namespace MongoDB.Driver.Tests.Specifications.crud
  20. {
  21. public class UpdateManyTest : CrudOperationWithResultTestBase<UpdateResult>
  22. {
  23. private BsonDocument _filter;
  24. private UpdateOptions _options = new UpdateOptions();
  25. private BsonValue _update;
  26. protected override bool TrySetArgument(string name, BsonValue value)
  27. {
  28. switch (name)
  29. {
  30. case "filter":
  31. _filter = (BsonDocument)value;
  32. return true;
  33. case "update":
  34. _update = value;
  35. return true;
  36. case "upsert":
  37. _options.IsUpsert = value.ToBoolean();
  38. return true;
  39. case "collation":
  40. _options.Collation = Collation.FromBsonDocument(value.AsBsonDocument);
  41. return true;
  42. case "arrayFilters":
  43. var arrayFilters = new List<ArrayFilterDefinition>();
  44. foreach (BsonDocument arrayFilterDocument in value.AsBsonArray)
  45. {
  46. var arrayFilter = new BsonDocumentArrayFilterDefinition<BsonDocument>(arrayFilterDocument);
  47. arrayFilters.Add(arrayFilter);
  48. }
  49. _options.ArrayFilters = arrayFilters;
  50. return true;
  51. case "hint":
  52. _options.Hint = value;
  53. return true;
  54. }
  55. return false;
  56. }
  57. protected override UpdateResult ConvertExpectedResult(BsonValue expectedResult)
  58. {
  59. BsonValue modifiedCountValue;
  60. long? modifiedCount = null;
  61. if (((BsonDocument)expectedResult).TryGetValue("modifiedCount", out modifiedCountValue))
  62. {
  63. modifiedCount = modifiedCountValue.ToInt64();
  64. }
  65. BsonValue upsertedId = null;
  66. ((BsonDocument)expectedResult).TryGetValue("upsertedId", out upsertedId);
  67. return new UpdateResult.Acknowledged(expectedResult["matchedCount"].ToInt64(), modifiedCount, upsertedId);
  68. }
  69. protected override UpdateResult ExecuteAndGetResult(IMongoDatabase database, IMongoCollection<BsonDocument> collection, bool async)
  70. {
  71. UpdateDefinition<BsonDocument> updateDefinition = null;
  72. if (_update is BsonDocument updateDocument)
  73. {
  74. updateDefinition = new BsonDocumentUpdateDefinition<BsonDocument>(updateDocument);
  75. }
  76. else if (_update is BsonArray stages)
  77. {
  78. var pipeline = new BsonDocumentStagePipelineDefinition<BsonDocument, BsonDocument>(stages.Cast<BsonDocument>());
  79. updateDefinition = new PipelineUpdateDefinition<BsonDocument>(pipeline);
  80. }
  81. if (async)
  82. {
  83. return collection
  84. .UpdateManyAsync(_filter, updateDefinition, _options)
  85. .GetAwaiter()
  86. .GetResult();
  87. }
  88. else
  89. {
  90. return collection.UpdateMany(_filter, updateDefinition, _options);
  91. }
  92. }
  93. protected override void VerifyResult(UpdateResult actualResult, UpdateResult expectedResult)
  94. {
  95. if (actualResult.IsModifiedCountAvailable)
  96. {
  97. actualResult.ModifiedCount.Should().Be(expectedResult.ModifiedCount);
  98. }
  99. actualResult.MatchedCount.Should().Be(expectedResult.MatchedCount);
  100. actualResult.UpsertedId.Should().Be(expectedResult.UpsertedId);
  101. }
  102. }
  103. }