public async Task Can_Find_And_Map_Result() { //Given const int itemsCount = 3; var collection = await Database.OnceAndSaveAsync(async db => { var collection = new Collection { Name = "A Collection" }; for (var i = 0; i < itemsCount; i++) { collection.TodoItems.Add(new TodoItem { Name = $"Item{i}" }); } await db.Collections.AddAsync(collection); return(collection); }); //When var result = await Database.OnceAsync(async db => { var repository = new CollectionRepository(db); return(await repository.FindAndMapAsync(collection.Id, c => new { Collection = c, TodoItemsCount = c.TodoItems.Count, })); }); //Then Assert.Equal(collection.Id, result.Collection.Id); Assert.Equal(itemsCount, result.TodoItemsCount); }
public async Task Mapped_Found_Collection_Should_Not_Be_Tracked() { //Given const string realName = "A Collection"; const int itemsCount = 3; var collectionId = await Database.OnceAsync(async db => { var repo = new CollectionRepository(db); var collection = new Collection { Name = realName }; for (var i = 0; i < itemsCount; i++) { collection.TodoItems.Add(new TodoItem { Name = $"Item{i}" }); } await repo.AddAsync(collection); return(collection.Id); }); //When await Database.OnceAsync(async db => { var repo = new CollectionRepository(db); var found = await repo.FindAndMapAsync(collectionId, collection => new { Collection = collection, TodoItemsCount = collection.TodoItems.Count, }); Assert.Equal(itemsCount, found.TodoItemsCount); found.Collection.Name = "Manipulated Name"; await db.SaveChangesAsync(); }); //Then var result = await Database.OnceAsync(async db => await db.Collections.FindAsync(collectionId)); Assert.Equal(realName, result.Name); }