public HttpResponseMessage UpdateFeedbackFromEmployer([FromBody] JobApplicationEntity applicationEntity)
        {
            Result result = new Result();
            //Employer vertification
            object objemployer = null;

            Request.Properties.TryGetValue("employer", out objemployer);
            var employer = objemployer as EmployerEntity;

            if (objemployer == null || employer.EmployerId != applicationEntity.EmployerId)
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, new Result(false)));
            }

            if (String.IsNullOrEmpty(applicationEntity.FeedbackFromEmployer) || String.IsNullOrWhiteSpace(applicationEntity.FeedbackFromEmployer))
            {
                result.Message = "Feedback cannot be empty";
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            result = _jobApplicationManager.UpdateFeedbackFromEmployer(applicationEntity);


            // return failed
            if (!result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            // if success
            return(Request.CreateResponse(HttpStatusCode.Created, result));
        }
        public async Task SeedDefaultUserAndRoles(bool isDevelopmentEnvironment)
        {
            _context.Database.EnsureCreated();

            if (_context.Users.Any())
            {
                // database has been seeded
                return;
            }

            if (isDevelopmentEnvironment)
            {
                await CreateUserAndRole(Roles.AdministratorRole, "*****@*****.**", "admin").ConfigureAwait(false);
            }

            for (var i = 0; i < NumberOfTestUsersToAdd; i++)
            {
                var user = await CreateUserAndRole(Roles.FreeUserRole, $"test{i}@test.com", $"test{i}").ConfigureAwait(false);

                for (var j = 0; j < NumberOfCompaniesToAdd; j++)
                {
                    var jobApplication = new JobApplicationEntity
                    {
                        CompanyName     = $"{user.UserName} Company {j}",
                        ApplicationDate = new DateTime(2017, 11, 13),
                        CurrentStatus   = Status.Applied,
                        Owner           = user
                    };
                    _context.JobApplications.Add(jobApplication);
                }
            }

            await _context.SaveChangesAsync().ConfigureAwait(false);
        }
        public async void Create_ApplicationExists_ThrowException()
        {
            // Arrange
            var jobApplication = new JobApplicationEntity
            {
                Id              = _jobApplicationEntities[0].Id,
                CompanyName     = "New company",
                ApplicationDate = new DateTime(2017, 12, 20),
                CurrentStatus   = Status.Offer
            };

            _jobApplicationDbContext.JobApplications.Add(_jobApplicationEntities[0]);
            _jobApplicationDbContext.SaveChanges();

            JobApplicationDbContext context = ContextFixture.GetContext(_guid);

            _jobApplicationRepository = new JobApplicationRepository(context);

            // Act
            Exception ex = await Record.ExceptionAsync(async() => await _jobApplicationRepository.Create(jobApplication).ConfigureAwait(false))
                           .ConfigureAwait(false);

            // Assert
            JobApplicationEntity entity = ContextFixture.GetContext(_guid).JobApplications.FirstOrDefault(x => x.Id == jobApplication.Id);

            Assert.Equal(entity, _jobApplicationEntities[0]);
            Assert.IsType <ArgumentException>(ex);
            Assert.NotNull(ex);
        }
        public Result ShortlistOrDeclineJobApplication(JobApplicationEntity jobApplication)
        {
            Result result = new Result();

            try
            {
                var con   = new DapperConnectionManager();
                var query = new QueryEntity();
                query.Entity = jobApplication;
                query.Query  = @"
                UPDATE JobApplications SET  
                                                ApplicationStatus = @ApplicationStatus , 
                                                IsShortlisted = @IsShortlisted,
                                                IsDeclined = @IsDeclined,
                                                ShortListedDate = ISNULL(@ShortListedDate, NULL),
                                                DeclinedDate = ISNULL(@DeclinedDate, NULL)

                WHERE JobApplicationId = @JobApplicationId AND JobListingId = @JobListingId AND UserId = @UserId;
                SELECT * FROM JobApplications WHERE JobApplicationId = @JobApplicationId AND JobListingId = @JobListingId and UserId = @UserId;
               
                ";
                result       = con.ExecuteGetOneItemQuery <JobApplicationEntity>(query);

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
                result.Success = false;
                result.Message = ex.Message;
            }

            return(result);
        }
        public async void Update_ApplicationExists_UpdatesJobApplication()
        {
            // Arrange
            var jobApplication = new JobApplicationEntity
            {
                Id              = _jobApplicationEntities[0].Id,
                CompanyName     = "New company",
                ApplicationDate = new DateTime(2017, 12, 20),
                CurrentStatus   = Status.Offer
            };

            _jobApplicationDbContext.JobApplications.Add(_jobApplicationEntities[0]);
            _jobApplicationDbContext.SaveChanges();

            JobApplicationDbContext context = ContextFixture.GetContext(_guid);

            _jobApplicationRepository = new JobApplicationRepository(context);

            // Act
            await _jobApplicationRepository.Update(jobApplication).ConfigureAwait(false);

            // Assert
            JobApplicationEntity entity = ContextFixture.GetContext(_guid).JobApplications.FirstOrDefault(x => x.Id == jobApplication.Id);

            Assert.Equal(jobApplication, entity);
        }
        public Result UpdateFeedbackFromEmployer(JobApplicationEntity entity)
        {
            Result result = new Result();

            try
            {
                var con   = new DapperConnectionManager();
                var query = new QueryEntity();
                query.Entity = entity;
                query.Query  = @"
                BEGIN TRAN   
                Update JobApplications SET 
                                          FeedbackFromEmployer   = @FeedbackFromEmployer
                WHERE                           JobApplicationId = @JobApplicationId;
                Select * From JobApplications 
                WHERE                           JobApplicationId = @JobApplicationId;
                COMMIT TRAN   
                

";
                result       = con.ExecuteGetOneItemQuery <JobApplicationEntity>(query);

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
                result.Success = false;
                result.Message = ex.Message;
            }

            return(result);
        }
Esempio n. 7
0
        public async Task <JobApplication> AddNewApplication(JobApplication jobApplication)
        {
            JobApplicationUser user = await _userResolver.GetCurrentUser().ConfigureAwait(false);

            JobApplicationEntity jobApplicationEntity =
                _mapper.Map <JobApplication, JobApplicationEntity>(jobApplication, opt => opt.AfterMap((src, dest) => dest.Owner = user));
            await _repository.Create(jobApplicationEntity).ConfigureAwait(false);

            return(_mapper.Map <JobApplication>(jobApplicationEntity));
        }
        public void GetOne_ApplicationwithCompanyNameDoesNotExist_ReturnsNull()
        {
            // Arrange

            // Act
            JobApplicationEntity jobApplication = _jobApplicationRepository.GetOne(x => x.CompanyName.Equals(_jobApplicationEntities[0].CompanyName));

            // Assert
            Assert.Null(jobApplication);
        }
Esempio n. 9
0
        public JobApplication GetApplication(string companyName)
        {
            JobApplicationUser   user           = _userResolver.GetCurrentUser().Result;
            JobApplicationEntity jobApplication =
                _repository.GetOne(f => f.Owner.Equals(user) && f.CompanyName.Equals(companyName, StringComparison.Ordinal));

            if (jobApplication != null)
            {
                return(_mapper.Map <JobApplication>(jobApplication));
            }

            return(null);
        }
        public void GetOne_SingleApplicationExists_Application()
        {
            // Arrange
            foreach (JobApplicationEntity jobApplication in _jobApplicationEntities)
            {
                _jobApplicationDbContext.JobApplications.Add(jobApplication);
            }

            _jobApplicationDbContext.SaveChanges();

            // Act
            JobApplicationEntity result = _jobApplicationRepository.GetOne(x => x.CompanyName.Equals(_jobApplicationEntities[0].CompanyName));

            // Assert
            Assert.Equal(_jobApplicationEntities[0], result);
        }
        public Result UpdateJobApplication(JobApplicationEntity jobApplication)
        {
            Result result = new Result();

            try
            {
                var con   = new DapperConnectionManager();
                var query = new QueryEntity();
                query.Entity = jobApplication;
                query.Query  = @"
                BEGIN TRAN
                IF EXISTS (SELECT * FROM JobApplications WHERE JobListingId = @JobListingId and UserId = @UserId )
                BEGIN
                    UPDATE JobApplications SET  Summary = @Summary , 
                                                IsDraft = @IsDraft, 
                                                ApplicationStatus = @ApplicationStatus , 
                                                LastModifiedDate= @LastModifiedDate
                    WHERE JobListingId = @JobListingId and UserId = @UserId
                END 
                ELSE
                BEGIN 
                    INSERT INTO JobApplications  (JobListingId, UserId, Summary, IsDraft, ApplicationStatus, LastModifiedDate)
                                            VALUES  (@JobListingId, 
                                                        @UserId, 
                                                        @Summary, 
                                                        @IsDraft, 
                                                        @ApplicationStatus,
                                                        @LastModifiedDate
)
                END 
                COMMIT TRAN
                ";
                result       = con.ExecuteQuery(query);

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
                result.Success = false;
                result.Message = ex.Message;
            }

            return(result);
        }
        public async void Update_ApplicationDoesNotExist_ThrowException()
        {
            var jobApplication = new JobApplicationEntity
            {
                Id              = _jobApplicationEntities[0].Id,
                CompanyName     = "New company",
                ApplicationDate = new DateTime(2017, 12, 20),
                CurrentStatus   = Status.Offer
            };

            // Act
            Exception ex = await Record.ExceptionAsync(async() => await _jobApplicationRepository.Update(jobApplication).ConfigureAwait(false))
                           .ConfigureAwait(false);

            // Assert
            Assert.IsType <DbUpdateConcurrencyException>(ex);
            Assert.NotNull(ex);
        }
Esempio n. 13
0
        public async Task <JobApplication> UpdateApplication(string companyName, JobApplication newApplication)
        {
            JobApplicationUser user = await _userResolver.GetCurrentUser().ConfigureAwait(false);

            JobApplicationEntity oldJobApplication =
                _repository.GetOne(f => f.Owner.Equals(user) && f.CompanyName.Equals(companyName, StringComparison.Ordinal));

            if (oldJobApplication == null)
            {
                return(null);
            }

            _mapper.Map(newApplication, oldJobApplication);

            await _repository.Update(oldJobApplication).ConfigureAwait(false);

            return(_mapper.Map <JobApplication>(oldJobApplication));
        }
        public async void Create_ApplicationDoesNotExist_InsertJobApplication()
        {
            // Arrange
            var jobApplication = new JobApplicationEntity
            {
                CompanyName     = "Company 1",
                ApplicationDate = new DateTime(2017, 11, 13),
                CurrentStatus   = Status.Interview
            };

            // Act
            await _jobApplicationRepository.Create(jobApplication).ConfigureAwait(false);

            // Assert
            Assert.Equal(1, _jobApplicationDbContext.JobApplications.Count());

            JobApplicationEntity entity = _jobApplicationDbContext.JobApplications.FirstOrDefault();

            Assert.Equal(jobApplication, entity);
        }
Esempio n. 15
0
        public async Task AddNewApplication_ApplicationExists_ThrowException()
        {
            // Arrange
            var jobApplicationEntity = new JobApplicationEntity
            {
                CompanyName     = _jobApplications[0].CompanyName,
                ApplicationDate = _jobApplications[0].ApplicationDate,
                CurrentStatus   = _jobApplications[0].Status
            };

            _jobApplicationRepository.Create(jobApplicationEntity).Returns(x => throw new ArgumentException("Could not create a new application"));
            _mapper.Map <JobApplication, JobApplicationEntity>(Arg.Any <JobApplication>(), opt => { }).ReturnsForAnyArgs(jobApplicationEntity);

            // Act
            Task <Exception> ex = Record.ExceptionAsync(() => _jobApplicationService.AddNewApplication(_jobApplications[0]));

            // Assert
            await _jobApplicationRepository.Received().Create(jobApplicationEntity).ConfigureAwait(false);

            Assert.NotNull(ex.Result);
        }
Esempio n. 16
0
        public async void AddNewApplication_ApplicationDoesNotExist_InsertJobApplication()
        {
            // Arrange
            _userResolver.GetCurrentUser().Returns(_user);
            var jobApplicationEntity = new JobApplicationEntity
            {
                Owner           = _user,
                CompanyName     = _jobApplications[0].CompanyName,
                ApplicationDate = _jobApplications[0].ApplicationDate,
                CurrentStatus   = _jobApplications[0].Status
            };

            _mapper.Map(_jobApplications[0], Arg.Any <Action <IMappingOperationOptions <JobApplication, JobApplicationEntity> > >())
            .Returns(jobApplicationEntity);

            // Act
            await _jobApplicationService.AddNewApplication(_jobApplications[0]).ConfigureAwait(false);

            // Assert
            await _jobApplicationRepository.Received().Create(jobApplicationEntity).ConfigureAwait(false);
        }
        public HttpResponseMessage UpdateFeedbackFromNurse([FromBody] JobApplicationEntity applicationEntity)
        {
            Result result = new Result();

            // Authentication verify block
            object objuser = null;

            Request.Properties.TryGetValue("user", out objuser);
            if (objuser == null)
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, new Result(false)));
            }
            var user = objuser as UserEntity;

            if (applicationEntity.UserId != user.UserId)
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, new Result(false)));
            }
            if (String.IsNullOrEmpty(applicationEntity.FeedbackFromNurse) || String.IsNullOrWhiteSpace(applicationEntity.FeedbackFromNurse))
            {
                result.Message = "Feedback cannot be empty";
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            result = _jobApplicationManager.UpdateFeedbackFromNurse(applicationEntity);

            //If failed
            if (!result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }
            //If if not found
            if (result.Entity == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound, result));
            }

            //If it is good
            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
Esempio n. 18
0
        public JobApplicationServiceTest()
        {
            _jobApplicationRepository = Substitute.For <IRepository <JobApplicationEntity> >();
            _mapper       = Substitute.For <IMapper>();
            _userResolver = Substitute.For <IUserResolverService>();
            _user         = new JobApplicationUser("*****@*****.**");

            _jobApplicationService = new JobApplicationService(_jobApplicationRepository, _mapper, _userResolver);

            _jobApplications = new[]
            {
                new JobApplication {
                    CompanyName = "Company 1", ApplicationDate = new DateTime(2017, 11, 13), Status = Status.Rejected
                },
                new JobApplication {
                    CompanyName = "Company 2", ApplicationDate = new DateTime(2017, 11, 14), Status = Status.Applied
                },
                new JobApplication {
                    CompanyName = "Company 3", ApplicationDate = new DateTime(2017, 11, 14), Status = Status.Interview
                },
                new JobApplication {
                    CompanyName = "Company 4", ApplicationDate = new DateTime(2017, 10, 9), Status = Status.Offer
                }
            };

            _jobApplicationEntities = new List <JobApplicationEntity>();
            foreach (var jobApplication in _jobApplications)
            {
                var jobApplicationEntity = new JobApplicationEntity
                {
                    Owner           = _user,
                    CompanyName     = jobApplication.CompanyName,
                    ApplicationDate = jobApplication.ApplicationDate,
                    CurrentStatus   = jobApplication.Status
                };
                _jobApplicationEntities.Add(jobApplicationEntity);
            }
        }
        public HttpResponseMessage Post([FromBody] JobApplicationEntity jobApplication)
        {
            Result result = new Result();

            // Authentication verify block
            object objuser = null;

            Request.Properties.TryGetValue("user", out objuser);
            if (objuser == null)
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized, result));
            }
            var user = objuser as UserEntity;

            // check if listing is valid
            var jobListingEntity_Result = _jobListingManager.GetListingById(jobApplication.JobListingId);

            if (!jobListingEntity_Result.Success || jobListingEntity_Result.Entity == null)
            {
                result.Entity  = null;
                result.Message = "Job Listing not exists";
                result.Success = false;
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }
            var jobListingEntity = (JobListingEntity)jobListingEntity_Result.Entity;

            // check if listing expired
            if (DateTime.Compare(jobListingEntity.ApplicationDeadline, DateTime.Now) < 0)
            {
                result.Entity  = null;
                result.Message = "Job Listing expired";
                result.Success = false;
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            if (jobApplication.IsDraft)
            {
                jobApplication.ApplicationStatus = ApplicationStatus.Draft.ToString();
            }
            else
            {
                jobApplication.ApplicationStatus = ApplicationStatus.Submitted.ToString();
            }

            jobApplication.EmployerId       = jobListingEntity.EmployerId;
            jobApplication.UserId           = user.UserId;
            jobApplication.AppliedDate      = DateTime.Now;
            jobApplication.LastModifiedDate = jobApplication.AppliedDate;
            jobApplication.IsShortlisted    = false;
            jobApplication.IsDeclined       = false;
            result = _jobApplicationManager.CreateJobApplication(jobApplication);



            // return failed
            if (!result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
            }

            // if success
            var response = new ApplicationWithInfo();

            response.jobApplicationEntity = (JobApplicationEntity)result.Entity;


            result.Entity = response;
            return(Request.CreateResponse(HttpStatusCode.Created, result));
        }