public TestRepoProvider(PodBoyContext context) : base(null, null, Observable.Return(new IOrderByExpression <TestEntity>[] { new OrderByExpression <TestEntity, int>(_ => _.Id) })) { CreateRepository = () => Substitute.For <PodboyRepository>(context); }
public static void InitEntities <T>(PodBoyContext context, List <T> collection = null) where T : class, IEntity { if (collection == null) { collection = new List <T>(); } // channels var observable = new ObservableCollection <T>(collection); var queryable = collection.AsQueryable(); var entitySet = Substitute.For <DbSet <T>, IQueryable <T>, IDbAsyncEnumerable <T> >(); ((IQueryable <T>)entitySet).Provider.Returns(new TestDbAsyncQueryProvider <T>(queryable.Provider)); ((IQueryable <T>)entitySet).Expression.Returns(queryable.Expression); ((IQueryable <T>)entitySet).ElementType.Returns(queryable.ElementType); ((IQueryable <T>)entitySet).GetEnumerator().Returns(_ => queryable.GetEnumerator()); ((IDbAsyncEnumerable <T>)entitySet).GetAsyncEnumerator() .Returns(_ => new TestDbAsyncEnumerator <T>(queryable.GetEnumerator())); // add entitySet.When(_ => _.Add(Arg.Any <T>())).Do(c => { collection.Add(c.Arg <T>()); observable.Add(c.Arg <T>()); }); // add range entitySet.When(_ => _.AddRange(Arg.Any <IEnumerable <T> >())).Do(c => { collection.AddRange(c.Arg <IEnumerable <T> >()); observable.AddRange(c.Arg <IEnumerable <T> >()); }); // remove entitySet.When(_ => _.Remove(Arg.Any <T>())).Do(c => { collection.Remove(c.Arg <T>()); observable.Remove(c.Arg <T>()); }); entitySet.Find(Arg.Any <object[]>()) .Returns(c => collection.FirstOrDefault(_ => _.Id == c.Arg <object[]>().Cast <int>().First())); entitySet.FindAsync(Arg.Any <object[]>()) .Returns( c => Task.FromResult(collection.FirstOrDefault(_ => _.Id == c.Arg <object[]>().Cast <int>().First()))); context.Set <T>().Returns(entitySet); context.Set <T>().Local.Returns(observable); context.Set <T>().Include(Arg.Any <string>()).Returns(entitySet); }
public async Task AddChannelTest() { using (var db = new PodBoyContext()) { using (var transaction = db.Database.BeginTransaction()) { var channel = db.Channels.Add(new Channel("test") { Title = "Test Channel", Description = "This is a test!" }); channel.Episodes.Add(new Episode { Media = new Media() }); await db.SaveChangesAsync(); Assert.NotEqual(0, channel.Id); transaction.Rollback(); } } }