Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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'])
Exemplo n.º 4
0
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}
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
    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'])
Exemplo n.º 7
0
 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'))
Exemplo n.º 8
0
    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'])
Exemplo n.º 9
0
    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'])
Exemplo n.º 10
0
    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'])
Exemplo n.º 11
0
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}
Exemplo n.º 12
0
    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'])
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
    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']
                   }
               })
Exemplo n.º 16
0
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
Exemplo n.º 17
0
 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'])
Exemplo n.º 18
0
def api_get_job(job_id):
    return get_job(job_id=job_id)
Exemplo n.º 19
0
 def _get_stored_adverts(self, job_id):
     stored_job = get_job(job_id=job_id)
     return stored_job['adverts']
Exemplo n.º 20
0
    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)