Exemple #1
0
        public static Moq.Mock <TRepo> SetupRepository <TKey, TModel, TRepo>(List <TModel> lModels)
            where TModel : class, IIdentityKey <TKey>
            where TRepo : class, IRepository <TKey, TModel>
            where TKey : struct,
        IComparable,
        IComparable <TKey>,
        IConvertible,
        IEquatable <TKey>,
        IFormattable
        {
            IQueryable <TModel> queryableList = lModels.AsQueryable();

            var mockSet = new Moq.Mock <IDbSet <TModel> >();

            mockSet.As <IQueryable <TModel> >().Setup(m => m.Provider).Returns(queryableList.Provider);
            mockSet.As <IQueryable <TModel> >().Setup(m => m.Expression).Returns(queryableList.Expression);
            mockSet.As <IQueryable <TModel> >().Setup(m => m.ElementType).Returns(queryableList.ElementType);
            mockSet.As <IQueryable <TModel> >().Setup(m => m.GetEnumerator()).Returns(queryableList.GetEnumerator());

            Moq.Mock <TRepo> repository = new Moq.Mock <TRepo>();
            repository.Setup(x => x.Entities).Returns(mockSet.Object);
            repository.Setup(x => x.GetById(Moq.It.IsAny <TKey>())).Returns((int i) => lModels.Find(x => x.Id.Equals(i)));
            repository.Setup(x => x.Insert(Moq.It.IsAny <TModel>())).Callback <TModel>(y =>
            {
                var item = lModels.OrderByDescending(x => x.Id).FirstOrDefault();
                if (item != null)
                {
                    dynamic z = item.Id;
                    y.Id      = z + 1;
                    lModels.Add(y);
                }
            });
            repository.Setup(x => x.Update(Moq.It.IsAny <TModel>())).Callback <TModel>(y =>
            {
                var i = lModels.FindIndex(x => x.Id.Equals(y.Id));
                if (i != -1)
                {
                    lModels[i] = y;
                }
            });
            repository.Setup(x => x.Delete(Moq.It.IsAny <TModel>())).Callback <TModel>(y =>
            {
                var item = lModels.Where(x => x.Id.Equals(y.Id)).FirstOrDefault();
                if (item != null)
                {
                    lModels.Remove(item);
                }
            });
            repository.Setup(x => x.GetByIdAsync(Moq.It.IsAny <TKey>())).Returns((TKey i) => { return(Task.FromResult(lModels.Find(x => x.Id.Equals(i)))); });
            repository.Setup(x => x.InsertAsync(Moq.It.IsAny <TModel>())).Returns((TModel y) =>
                                                                                  Task.Run(() =>
            {
                var item = lModels.OrderByDescending(x => x.Id).FirstOrDefault();
                if (item != null)
                {
                    dynamic z = item.Id;
                    y.Id      = z + 1;
                    lModels.Add(y);
                }
            })
                                                                                  );
            repository.Setup(x => x.UpdateAsync(Moq.It.IsAny <TModel>())).Returns((TModel y) =>
                                                                                  Task.Run(() =>
            {
                var i = lModels.FindIndex(x => x.Id.Equals(y.Id));
                if (i != -1)
                {
                    lModels[i] = y;
                }
            })
                                                                                  );
            repository.Setup(x => x.DeleteAsync(Moq.It.IsAny <TModel>())).Returns((TModel y) =>
                                                                                  Task.Run(() =>
            {
                var item = lModels.Where(x => x.Id.Equals(y.Id)).FirstOrDefault();
                if (item != null)
                {
                    lModels.Remove(item);
                }
            })
                                                                                  );



            return(repository);
        }