-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFixtureObjectUpdateDefinition.cs
57 lines (45 loc) · 1.78 KB
/
FixtureObjectUpdateDefinition.cs
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
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDbTest.Driver;
using MongoDbTest.Dtos;
namespace MongoDbTest;
public class FixtureObjectUpdateDefinition : IClassFixture<MongoDbConnection>
{
private readonly MongoDbConnection _dbConnection;
public FixtureObjectUpdateDefinition(MongoDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
[Fact]
public async Task UpdateUsingObjectDefinition()
{
var (collection, cat) = await SetupDb(nameof(UpdateUsingObjectDefinition));
cat.Name = "UpdatedCat";
var update = new ObjectUpdateDefinition<Animal>(cat);
await ExecuteUpdate(collection, cat.Id, update, cat.Name);
}
[Fact]
public async Task UpdateUsingFixedObjectDefinition()
{
var (collection, cat) = await SetupDb(nameof(UpdateUsingFixedObjectDefinition));
cat.Name = "UpdatedCat";
var update = new FixedObjectUpdateDefinition<Animal>(cat);
await ExecuteUpdate(collection, cat.Id, update, cat.Name);
}
private async Task<(IMongoCollection<Animal> collection, Cat cat)> SetupDb(string testName)
{
var collection = _dbConnection.Database.GetCollection<Animal>(testName);
var cat = new Cat
{
Name = "TheCat"
};
await collection.InsertOneAsync(cat);
return (collection, cat);
}
private async Task ExecuteUpdate(IMongoCollection<Animal> collection, ObjectId id, UpdateDefinition<Animal> update, string expectedName)
{
var updatedCat = await collection.FindOneAndUpdateAsync(new ExpressionFilterDefinition<Animal>(animal => animal.Id == id), update,
new FindOneAndUpdateOptions<Animal>() { ReturnDocument = ReturnDocument.After });
Assert.Equal(expectedName, updatedCat.Name);
}
}