private static NavigationCollectionRepository <Author, ICollection <Book>, Book> GetBooksNavRepo(Author author) { var item = new AlreadyLoadedItem <Author>(author, null); var repo = new NavigationCollectionRepository <Author, ICollection <Book>, Book>(item, a => a.Books, new DefaultNavigationSetter <Author, ICollection <Book> >(a => a.Books)); return(repo); }
public IRestResource GetFullResource(IDeferredItem <TItem> item, IDataTransaction dataTransaction) { IEngineRepository <TNav> navRepository = new NavigationCollectionRepository <TItem, TCollection, TNav>(item, _navTools.NavExpression, _navTools.Setter); var eventWrapper = new DataEventWrapper <TNav>(dataTransaction, navRepository); eventWrapper.TryWrapEvents(_navTools.RepoEvents); var context = new FullEngineContext <TNav>(eventWrapper.Transaction, eventWrapper.Repository, _subContext); return(new EngineRestCollection <TNav>(context)); }
public void AttachNewItem_NullCollection_CreatesCollection() { var author = new Author { Books = null }; NavigationCollectionRepository <Author, ICollection <Book>, Book> repo = GetBooksNavRepo(author); var book = repo.CreateAndAttachItem(); Assert.NotNull(author.Books); Assert.Contains(book, author.Books); }
public void AttachNewItem_EmptyCollection_AddsItem() { var books = new List <Book>(); var author = new Author { Books = books }; NavigationCollectionRepository <Author, ICollection <Book>, Book> repo = GetBooksNavRepo(author); var book = repo.CreateAndAttachItem(); Assert.Contains(book, books); }
public void MarkDeleted_Collection_RemovesTestData() { var testBook = new Book { Title = "Test" }; var author = new Author { Books = new List <Book> { testBook } }; NavigationCollectionRepository <Author, ICollection <Book>, Book> repo = GetBooksNavRepo(author); repo.MarkDeleted(testBook); Assert.Equal(0, author.Books.Count); }
public void GetAllItemsQuery_Collection_ContainsTestData() { var testBook = new Book { Title = "Test" }; var author = new Author { Books = new List <Book> { testBook } }; NavigationCollectionRepository <Author, ICollection <Book>, Book> repo = GetBooksNavRepo(author); var bookQuery = repo.GetAllItems().ToList(); Assert.Contains(testBook, bookQuery); }
public async Task SetValueAsync(IDeferredItem <TItem> item, object deserializedValue, IDataTransaction dataTransaction) { IEngineRepository <TNav> navRepository = new NavigationCollectionRepository <TItem, TCollection, TNav>(item, _navTools.NavExpression, _navTools.Setter); IDataTransaction transaction = new VoidTransaction(); // we commit the transaction in the parent. TODO optional save-as-you-go ? var navContext = new FullEngineContext <TNav>(transaction, navRepository, _subContext); var navLocatorCreator = new NavigationItemLocatorCreator <TNav>(_subContext); IEnumerable deserializedCollection = (IEnumerable)deserializedValue; // todo null ? foreach (object deserializedItem in deserializedCollection) { var itemData = new RestItemData(deserializedItem); DeferredItemBase <TNav> deferredItem = await navLocatorCreator.LocateOrCreateItemAsync(navRepository, itemData, item.LoadAsync); var navEngineItem = new EngineRestItem <TNav>(navContext, deferredItem); Acknowledgment acknowledgment = await navEngineItem.EditAsync(itemData); } // TODO: remove items that were not located? }