/// Remove
        public DataResponseHandler <string> Remove(params object[] pks)
        {
            try {
                if (pks == null)
                {
                    throw new ArgumentNullException(nameof(pks), "The parameter removeEntity can not be null");
                }
                var result = 0;
                using (var context = _dbContextCreator())
                {
                    var role = new DataResponseHandler <string> {
                        Succes = true
                    };

                    var dbSet  = context.Set <TEntity>();
                    var entity = GetById(pks);
                    dbSet.Attach(entity.Container);
                    context.Entry(entity).State = EntityState.Deleted;
                    result = context.SaveChanges();
                    if (result == 0)
                    {
                        return(new DataResponseHandler <string> {
                            Succes = false
                        });
                    }
                    return(role);
                }
            }
            catch (Exception ex)
            {
                return(new DataResponseHandler <string> {
                    Succes = false, Container = ex.Message
                });
            }
        }
        //Adds a new entity
        public DataResponseHandler <string> AddEntity(TEntity newEntity)
        {
            using (var context = _dbContextCreator())
            {
                try
                {
                    var result = 0;

                    var role = new DataResponseHandler <string> {
                        Succes = true
                    };
                    var dbSet = context.Set <TEntity>();
                    dbSet.Add(newEntity);
                    result = context.SaveChanges();
                    if (result == 0)
                    {
                        role = new DataResponseHandler <string> {
                            Succes = false
                        };
                    }
                    return(role);
                }
                catch (Exception ex)
                {
                    return(new DataResponseHandler <string> {
                        Succes = false, Container = ex.Message
                    });
                }
            }
        }
        public DataResponseHandler <string> UpdateEntity(Internship newItem, string guid)
        {
            using (var context = new Entities())
            {
                try
                {
                    var role = new DataResponseHandler <string> {
                        Succes = true
                    };
                    var oldItem = context.Internships.Find(guid);
                    oldItem.Hidden                 = newItem.Hidden;
                    oldItem.Image                  = newItem.Image;
                    oldItem.InternshipId           = newItem.InternshipId;
                    oldItem.InternshipPostPhoto    = newItem.InternshipPostPhoto;
                    oldItem.Keywords               = newItem.Keywords;
                    oldItem.LastUpdated            = newItem.LastUpdated;
                    oldItem.PositionsAvailable     = newItem.PositionsAvailable;
                    oldItem.Recruiter              = newItem.Recruiter;
                    oldItem.RecruiterResponsibleId = newItem.RecruiterResponsibleId;
                    oldItem.StartDate              = newItem.StartDate;
                    oldItem.StudentInternships     = newItem.StudentInternships;
                    oldItem.Title                  = newItem.Title;
                    oldItem.TypeJob                = newItem.TypeJob;

                    role.Container = oldItem.InternshipId;
                    return(role);
                }
                catch (Exception ex)
                {
                    return(new DataResponseHandler <string> {
                        Succes = false, Container = ex.Message
                    });
                }
            }
        }
        //adds multiple entities
        public DataResponseHandler <string> AddEntity(IEnumerable <TEntity> newEntities)
        {
            try
            {
                if (newEntities == null)
                {
                    throw new ArgumentNullException(nameof(newEntities), "The parameter newEntities can not be null");
                }
                var result = 0;
                using (var context = _dbContextCreator())
                {
                    var dbSet = context.Set <TEntity>();
                    var role  = new DataResponseHandler <string> {
                        Succes = true
                    };

                    dbSet.AddRange(newEntities);
                    result = context.SaveChanges();
                    if (result == 0)
                    {
                        return(new DataResponseHandler <string> {
                            Succes = false
                        });
                    }
                    return(role);
                }
            }
            catch (Exception ex)
            {
                return(new DataResponseHandler <string> {
                    Succes = false, Container = ex.Message
                });
            }
        }
 //Update an entity
 public DataResponseHandler <string> UpdateEntity(TEntity updateEntity)
 {
     try
     {
         var role = new DataResponseHandler <string> {
             Succes = true
         };
         if (updateEntity == null)
         {
             throw new ArgumentNullException(nameof(updateEntity), "The parameter updateEntity can not be null");
         }
         var result = 0;
         using (var context = _dbContextCreator())
         {
             var dbSet = context.Set <TEntity>();
             dbSet.Attach(updateEntity);
             context.Entry(updateEntity).State = EntityState.Modified;
             result = context.SaveChanges();
             if (result == 0)
             {
                 return(new DataResponseHandler <string> {
                     Succes = false
                 });
             }
             return(role);
         }
     }
     catch (Exception ex)
     {
         return(new DataResponseHandler <string> {
             Succes = false, Container = ex.Message
         });
     }
 }
 //returns data filtered with the given expression
 public DataResponseHandler <IEnumerable <TEntity> > GetData(Expression <Func <TEntity, bool> > filter)
 {
     try
     {
         if (filter == null)
         {
             throw new ArgumentNullException(nameof(filter), "The parameter filter can not be null");
         }
         var result = Enumerable.Empty <TEntity>();
         using (var context = _dbContextCreator())
         {
             var role = new DataResponseHandler <IEnumerable <TEntity> > {
                 Succes = true
             };
             var dbSet = context.Set <TEntity>();
             result         = dbSet.Where(filter).ToList();
             role.Container = result;
             return(role);
         }
     }
     catch (Exception ex)
     {
         return(new DataResponseHandler <IEnumerable <TEntity> > {
             Succes = false
         });
     }
 }
        public void All_OK()
        {
            Func <Entities> contextCreator = () => new Entities();
            DataResponseHandler <IEnumerable <Firm> > result = instance.GetAll();

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Container.Count() > 0);
        }
        protected T UnwrapResponse <T>(IRestResponse <T> result, DataResponseHandler <T> handler)
        {
            errorHandler?.ValidateResponse(result);

            handler.ValidateResponse(result);

            return(handler.UnwrapResponse(result));
        }
        public void GetData_OK()
        {
            Func <Entities> contextCreator = () => new Entities();
            Expression <Func <Firm, bool> >           filter = a => a.FirmId == "00000000-0000-0000-0000-000000000000";
            DataResponseHandler <IEnumerable <Firm> > result = instance.GetData(filter);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Container.Count() == 0);
        }
        public void Find_OK2()
        {
            Func <Entities>            contextCreator = () => new Entities();
            DataResponseHandler <Firm> result         = instance.GetById(pks: "5798-403c-a941-dcfaa6bacd2c");

            if (result.Succes == false)
            {
                Assert.AreEqual(result.Succes, false);
                return;
            }
            else
            {
                Assert.AreEqual(result.Container.FirmId, "05d68886-5798-403c-a941-dcfaa6bacd2c");
            }
        }
        //returns all the elements of the table
        public DataResponseHandler <IEnumerable <TEntity> > GetAll()
        {
            var result = Enumerable.Empty <TEntity>();

            using (var context = _dbContextCreator())
            {
                var dbSet = context.Set <TEntity>();
                var role  = new DataResponseHandler <IEnumerable <TEntity> > {
                    Succes = true
                };
                result         = dbSet.ToList();
                role.Container = result;
                return(role);
            }
        }
        public void Remove_SimpleItem_forEntity_OK()
        {
            /// changed pk for tests
            Func <Entities>            contextCreator = () => new Entities();
            DataResponseHandler <Firm> removeEntity   = instance.GetById("e081e4ef-377c-4ddd-977b-9e31ddf9f345");

            if (removeEntity.Succes == true)
            {
                var result   = instance.Remove(removeEntity.Container);
                var expected = true;
                Assert.AreEqual(expected, result.Succes);
            }
            else
            {
                Assert.AreEqual(removeEntity.Succes, false);
            }
        }
        public void Add_SimpleItem_OK()
        {
            string guid = Guid.NewGuid().ToString();


            Firm newEntity = new Firm
            {
                FirmId            = guid,
                Description       = "AN ADD",
                Name              = "New FIRM",
                NumberOfEmployees = 10,
                Deleted           = false,
            };
            DataResponseHandler <string> result = instance.AddEntity(newEntity);
            bool expected = true;

            Assert.AreEqual(expected, result.Succes);
        }
        public DataResponseHandler <IEnumerable <Internship> > GetAll()
        {
            using (var context = new Entities())
            {
                try
                {
                    var role = new DataResponseHandler <IEnumerable <Internship> > {
                        Succes = true
                    };
                    role.Container = context.Internships.ToList();

                    return(role);
                }
                catch (Exception ex)
                {
                    return(new DataResponseHandler <IEnumerable <Internship> > {
                        Succes = false
                    });
                }
            }
        }
        public DataResponseHandler <Internship> GetById(string guid)
        {
            using (var context = new Entities())
            {
                try
                {
                    var role = new DataResponseHandler <Internship> {
                        Succes = true
                    };
                    role.Container = context.Internships.Find(guid);

                    return(role);
                }
                catch (Exception ex)
                {
                    return(new DataResponseHandler <Internship> {
                        Succes = false
                    });
                }
            }
        }
        //removes a list of entries
        public DataResponseHandler <string> Remove(IEnumerable <TEntity> removeEntities)
        {
            try
            {
                if (removeEntities == null)
                {
                    throw new ArgumentNullException(nameof(removeEntities), "The parameter removeEntities can not be null");
                }
                var result = 0;
                using (var context = _dbContextCreator())
                {
                    var role = new DataResponseHandler <string> {
                        Succes = true
                    };

                    var dbSet = context.Set <TEntity>();
                    foreach (var removeEntity in removeEntities)
                    {
                        dbSet.Attach(removeEntity);
                        context.Entry(removeEntity).State = EntityState.Deleted;
                    }
                    dbSet.RemoveRange(removeEntities);
                    result = context.SaveChanges();
                    if (result == 0)
                    {
                        return(new DataResponseHandler <string> {
                            Succes = false
                        });
                    }
                    return(role);
                }
            }
            catch (Exception ex)
            {
                return(new DataResponseHandler <string> {
                    Succes = false, Container = ex.Message
                });
            }
        }
        public DataResponseHandler <string> AddEntity(Internship newItem)
        {
            using (var context = new Entities())
            {
                try
                {
                    var role = new DataResponseHandler <string> {
                        Succes = true
                    };
                    context.Internships.Add(newItem);
                    role.Container = newItem.InternshipId;

                    return(role);
                }
                catch (Exception ex)
                {
                    return(new DataResponseHandler <string> {
                        Succes = false, Container = ex.Message
                    });
                }
            }
        }
 //FINDS BY PRIMARY KEY
 public DataResponseHandler <TEntity> GetById(params object[] pks)
 {
     try
     {
         if (pks == null)
         {
             throw new ArgumentNullException(nameof(pks), "The parameter pks can not be null");
         }
         TEntity result = null;
         using (var context = _dbContextCreator())
         {
             var dbSet = context.Set <TEntity>();
             var role  = new DataResponseHandler <TEntity> {
                 Succes = true
             };
             result = dbSet.Find(pks);
             if (result != null)
             {
                 role.Container = result;
             }
             else if (result == null)
             {
                 return(new DataResponseHandler <TEntity> {
                     Succes = false
                 });
             }
             return(role);
         }
     }
     catch (Exception ex)
     {
         return(new DataResponseHandler <TEntity> {
             Succes = false
         });
     }
 }