def test_get_job(self): expected_job = self.create_from_factory(JobFactory) job_id = expected_job['_id'] job = get_job(job_id) self.assertEqual(expected_job, job)
def edit_job(_id: str, location=None, **new_values): if 'company_id' in new_values: raise ValueError("Job's company cannot be modified") if not get_job(_id): raise ValueError( 'Job id "{job_id}" does not exists'.format(job_id=_id)) if location: new_values['location'] = _input_location_to_location(location) exploded_values = dict_to_datapath(new_values) jobs.update({"_id": _id}, {"$set": exploded_values}) return get_job(_id)
def test_delete_jobs(self): job = self.create_from_factory(JobFactory) job_id = job['_id'] delete_jobs([job_id]) stored_job = get_job(job_id) self.assertTrue(stored_job['deleted'])
def get_advert_applications_by_job_id(job_id): job = get_job(job_id=job_id) adverts_ids = [ad['_id'] for ad in job['adverts']] candidates = [] for advert_id in adverts_ids: ad_applic = get_advert_applications(advert_id) candidates += ad_applic['candidates'] if ad_applic else [] return {'candidates': candidates}
def api_edit_job(job_id): data = request.json identity = get_jwt_identity() job = get_job(job_id) if identity['role'] != UserType.ADMIN and \ any(adv['status'] != AdvertStatus.DRAFT for adv in job['adverts']): raise ActionNotAllowed("User not allowed to edit an approved advert") validate('edit_job', data) return edit_job(_id=job_id, **data)
def test_update_job(self): job_id = self.job['_id'] new_title = "New title" new_description = "New Description" edit_job(_id=job_id, title=new_title, description=new_description) updated_job = get_job(job_id) self.assertEqual(new_title, updated_job['title']) self.assertEqual(new_description, updated_job['description'])
def _assert_job_status(self, expected_status, expected_expires_date=None): default_status = AdvertStatus.DRAFT stored_job = get_job(job_id=self.job_id) first_advert = stored_job['adverts'][0] last_advert = stored_job['adverts'][-1] modified_advert = stored_job['adverts'][1] self.assertEquals(default_status, first_advert['status']) self.assertEquals(expected_status, modified_advert['status']) self.assertEquals(default_status, last_advert['status']) self.assertEquals(self.days, modified_advert['duration']) self.assertEquals(expected_expires_date, modified_advert['date'].get('expires'))
def test_add_job_advert(self): days = 15 add_advert_to_job(job_id=self.job_id, advert_duration_days=days) stored_job = get_job(job_id=self.job_id) stored_adverts = stored_job['adverts'] self.assertEquals(1, len(stored_adverts)) stored_advert = stored_adverts[0] self.assertEquals(AdvertStatus.DRAFT, stored_advert['status']) self.assertEquals(days, stored_advert['duration'])
def test_edit_job(self): data = {"title": "new title"} job_id = self.job['_id'] url = self.url_for_admin(JOB_URL, job_id=job_id) response = self.post_json(url, data) self.assertEqual(200, response.status_code) result_job = get_job(job_id) self.assertEqual(data['title'], result_job['title']) self.assertEqual(self.job['description'], result_job['description'])
def test_api_add_advert_to_job(self): expected_duration = 10 url = self.url_for_admin(ADVERTS_URL, job_id=self.job_id) data = {'duration': expected_duration} response = self.post_json(url, data) self.assertEqual(200, response.status_code) stored_job = get_job(job_id=self.job_id) self.assertEquals(AdvertStatus.DRAFT, stored_job['adverts'][0]['status'])
def charge_payment(): data = request.json job_id = data.get('job_id', "") advert_id = data.get('advert_id', "") token = data.get('token', "") identity = get_jwt_identity() pay_job_advert(advert_id=advert_id, job_id=job_id, stripe_token=token, user_id=identity['username']) job = get_job(job_id=job_id) return {'job': job}
def test_create_job(self): job_input = self.load_example_model('create_job_input') job_input['company_id'] = self.company['_id'] url = self.url_for_admin(JOBS_URL) response = self.post_json(url, job_input) self.assertEqual(200, response.status_code) created_job = loads(response.data) stored_job = get_job(created_job['_id']) self.assertEqual(created_job, stored_job) self.assertEqual(job_input['title'], stored_job['title']) self.assertEqual(self.company['_id'], stored_job['company_id'])
def set_advert_status(job_id: str, advert_id: str, action: str): map_advert_action = { 'requestapproval': request_approval_job_advert, 'approve': approve_job_advert, 'publish': publish_job_advert, 'archive': archive_job_advert } advert_action = map_advert_action.get(action.lower()) if not advert_action: raise ValueError('Invalid action "{action}"'.format(action=action)) advert_action(job_id=job_id, advert_id=advert_id) return get_job(job_id=job_id)
def test_get_job_invalid_id(self): self.create_from_factory(JobFactory) with self.assertRaises(ValueError): get_job(None) with self.assertRaises(ValueError): get_job("") with self.assertRaises(ValueError): get_job("valid id")
def send_email_advert_approved(job_id): sendgrid_settings = SendgridConfig() job = get_job(job_id=job_id) company = get_company(company_id=job['company_id']) send_email(from_email=sendgrid_settings.admin_email_address, to_emails=company['contacts']['email'], template_id=sendgrid_settings.advert_approved_template, api_key=sendgrid_settings.api_key, template_data={ 'company': company, 'job': { 'title': job['title'], 'description': job['description'] } })
def _update_advert_status(advert_id, job_id, allowed_statuses, new_status): updated_date = datetime.utcnow() new_values = { 'adverts.$.status': new_status, 'adverts.$.date.updated': updated_date, 'adverts.$.date.' + new_status.lower(): updated_date, } if new_status == AdvertStatus.PUBLISHED: job = get_job(job_id) if job and 'adverts' in job and job.get('adverts'): duration = job['adverts'][0]['duration'] expire_date = datetime.now() + timedelta(days=duration) new_values['adverts.$.date.expires'] = expire_date job = jobs.update_one( { '_id': job_id, 'adverts': { '$elemMatch': { 'status': { "$in": allowed_statuses }, '_id': advert_id, } } }, { '$set': new_values, '$addToSet': { 'adverts.$.status_log': { 'status': new_status, 'date': updated_date } } }) if job.matched_count == 0: raise ValueError( 'Impossible to update the advert status to {status}'.format( status=new_status)) return job
def _assert_set_status(self, action, expected_action): response = self._make_set_status_call(action) self.assertEqual(200, response.status_code) stored_job = get_job(job_id=self.job_id) self.assertEquals(expected_action, stored_job['adverts'][0]['status'])
def api_get_job(job_id): return get_job(job_id=job_id)
def _get_stored_adverts(self, job_id): stored_job = get_job(job_id=job_id) return stored_job['adverts']
def test_create_job(self): input_job = self._get_test_create_job_input() created_job = create_job(**input_job) stored_job = get_job(created_job['_id']) self.assert_validate_json_schema('job', stored_job)