public async Task <bool> AddWorkExperience(int?resumeId, WorkExperienceServiceModel model)
        {
            if (!this.IsEntityStateValid(model))
            {
                return(false);
            }

            if (resumeId == null)
            {
                return(false);
            }

            var resume = await this.resumesRepository.All().SingleOrDefaultAsync(r => r.Id == resumeId);

            if (resume == null)
            {
                return(false);
            }

            var workExperience = Mapper.Map <WorkExperience>(model);

            workExperience.ResumeId = resume.Id;

            await this.workHistoryRepository.AddAsync(workExperience);

            await this.workHistoryRepository.SaveChangesAsync();

            return(true);
        }
        public async Task <bool> UpdateAsync(WorkExperienceServiceModel model)
        {
            if (!this.IsEntityStateValid(model))
            {
                return(false);
            }

            var workExperience = await this.workHistoryRepository.All().SingleOrDefaultAsync(w => w.Id == model.Id);

            if (workExperience == null)
            {
                return(false);
            }

            workExperience.Position    = model.Position;
            workExperience.Institute   = model.Institute;
            workExperience.From        = model.From;
            workExperience.To          = model.To;
            workExperience.Description = model.Description;

            this.workHistoryRepository.Update(workExperience);
            await this.workHistoryRepository.SaveChangesAsync();

            return(true);
        }
        public async Task AddWorkExperience_ToNonExistingResume_ReturnsFalse()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var model = new Resume()
            {
                JobSeeker = new JobSeeker()
                {
                    FirstName = "JobSeekerName1",
                    LastName  = "JobSeekerName2",
                    User      = new User()
                    {
                        UserName = "******"
                    }
                }
            };

            var serviceModel = new WorkExperienceServiceModel();

            var workService = new WorkHistoryService(new EfRepository <Resume>(context),
                                                     new EfRepository <WorkExperience>(context));

            var result = await workService.AddWorkExperience(model.Id, serviceModel);

            Assert.False(result);
        }
        public async Task UpdateAsync_WithNonExistentWorkExperience_ReturnsFalse()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var serviceModel = new WorkExperienceServiceModel()
            {
                Position  = "NewTest",
                Institute = "InstituteTest",
                From      = 2000,
                To        = 2001,
            };

            var workService = new WorkHistoryService(new EfRepository <Resume>(context),
                                                     new EfRepository <WorkExperience>(context));

            var result = await workService.UpdateAsync(serviceModel);

            Assert.False(result);
        }
        public async Task UpdateAsync_WithValidData_ReturnsTrue()
        {
            string expectedResult = "NewPosition";

            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var model = new WorkExperience()
            {
                Position  = "PositionTest",
                Institute = "InstituteTest",
                From      = 2000,
                To        = 2001,
            };

            await context.AddAsync(model);

            context.SaveChanges();

            var serviceModel = new WorkExperienceServiceModel()
            {
                Id        = model.Id,
                Position  = expectedResult,
                Institute = "InstituteTest",
                From      = 2000,
                To        = 2001,
            };

            var workService = new WorkHistoryService(new EfRepository <Resume>(context),
                                                     new EfRepository <WorkExperience>(context));

            var result = await workService.UpdateAsync(serviceModel);

            Assert.True(result);

            var actualResult = (await context.WorksHistory.SingleAsync(w => w.Id == model.Id)).Position;

            Assert.Equal(expectedResult, actualResult);
        }
        public async Task AddWorkExperience_WithValidData_ToExistingResume_WorksCorrectly()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var model = new Resume()
            {
                JobSeeker = new JobSeeker()
                {
                    FirstName = "JobSeekerName1",
                    LastName  = "JobSeekerName2",
                    User      = new User()
                    {
                        UserName = "******"
                    }
                }
            };

            await context.AddAsync(model);

            context.SaveChanges();

            var serviceModel = new WorkExperienceServiceModel()
            {
                Position  = "NewTest",
                Institute = "InstituteTest",
                From      = 2000,
                To        = 2001,
            };

            var workService = new WorkHistoryService(new EfRepository <Resume>(context),
                                                     new EfRepository <WorkExperience>(context));

            var result = await workService.AddWorkExperience(model.Id, serviceModel);

            Assert.True(result);
        }