Пример #1
0
def test_archive_only_expired_scholarships():
    Scholarship.create({
        'id': 'foo',
        'name': 'foo',
        'createdAt': '2020-01-01',
        'state': State.PUBLISHED.value,
        'deadline': YESTERDAY,
    })

    Scholarship.create({
        'id': 'bar',
        'name': 'bar',
        'createdAt': '2020-01-01',
        'state': State.PUBLISHED.value,
        'deadline': YESTERDAY,
    })

    Scholarship.create({
        'id': 'available',
        'name': 'bar',
        'createdAt': '2020-01-01',
        'state': State.PUBLISHED.value,
        'deadline': TOMORROW,
    })

    run_archive_scholarships()

    expired_scholarship = Scholarship.get('foo')
    expired_scholarship2 = Scholarship.get('bar')
    available_scholarship = Scholarship.get('available')

    assert expired_scholarship.state == State.ARCHIVED.value
    assert expired_scholarship2.state == State.ARCHIVED.value
    assert available_scholarship.state == State.PUBLISHED.value
Пример #2
0
def pending_detail(scholarship_id):
    scholarship = Scholarship.get(
        id=scholarship_id,
        ignore=NotFound.code,
        _source=[
            'name',
            'description',
            'deadline',
            'fundingType',
            'state',
            'academicLevel',
            'entity.name',
            'entity.code',
            'country.name',
            'country.code',
            'sourceDetails.url',
            'sourceDetails.id',
            'sourceDetails.steps',
            'fillStatus',
            'language',
            'approval.approvedAt',
            'denial.deniedAt',
            'denial.reason',
            'archive.archivedAt',
        ],
    )

    if not scholarship:
        raise NotFound

    return scholarship.serialize()
Пример #3
0
def show(scholarship_id):
    scholarship = Scholarship.get(
        id=scholarship_id,
        ignore=NotFound.code,
        _source=[
            'name',
            'description',
            'deadline',
            'fundingType',
            'state',
            'academicLevel',
            'entity.code',
            'entity.name',
            'country.name',
            'country.code',
            'sourceDetails.url',
            'sourceDetails.steps',
        ],
    )

    if not scholarship:
        raise NotFound

    if scholarship['state'] != State.PUBLISHED.value:
        raise Forbidden
    else:
        del scholarship['state']

    return scholarship.serialize()
Пример #4
0
def test_entity_cant_be_edited(api):
    edited_entity = {
        'name': 'newfoo',
        'website': 'http://new_foo.com',
    }

    foo_scholarship = Scholarship.get('foo')
    assert foo_scholarship.entity.name == 'Foo'

    response = api.put('/api/entities/foo/', json=edited_entity)
    assert response.status_code == 200

    assert Scholarship.get('foo').entity.name == 'newfoo'

    # Other entities should not change
    assert Scholarship.get('bar').entity.name == 'Bar'
Пример #5
0
    def handle(event: ScholarshipApproved):
        scholarship = Scholarship.get(event.scholarship_id)

        scholarship.update(
            refresh=True,
            state=State.PUBLISHED.value,
            approval={'approvedAt': event.timestamp},
        )
Пример #6
0
    def handle(event: ScholarshipArchived):
        scholarship = Scholarship.get(event.scholarship_id)

        scholarship.update(
            refresh=True,
            state=State.ARCHIVED.value,
            archive={'archivedAt': event.timestamp},
        )
Пример #7
0
    def handle(event: ScholarshipDenied):
        scholarship = Scholarship.get(event.scholarship_id)

        scholarship.update(
            refresh=True,
            state=State.DENIED.value,
            denial={
                'reason': event.reason,
                'deniedAt': event.timestamp,
            },
        )
Пример #8
0
    def handle(event: ScholarshipRestored):
        scholarship = Scholarship.get(event.scholarship_id)

        scholarship.update(
            refresh=True,
            state=State.PENDING.value,
            archive={'archivedAt': None},
            denial={
                'reason': None,
                'deniedAt': None,
            },
        )
Пример #9
0
def test_archive_scholarship():
    Scholarship.create({
        'id': 'foo',
        'name': 'foo',
        'createdAt': '2020-01-01',
        'state': State.PUBLISHED.value,
        'deadline': YESTERDAY,
    })

    run_archive_scholarships()
    scholarship = Scholarship.get('foo')

    assert scholarship.state == State.ARCHIVED.value
Пример #10
0
def test_today_scholarship_deadline_is_available():
    Scholarship.create({
        'id': 'foo',
        'name': 'foo',
        'createdAt': '2020-01-01',
        'state': State.PUBLISHED.value,
        'deadline': TODAY,
    })

    run_archive_scholarships()

    scholarship = Scholarship.get('foo')

    assert scholarship.state == State.PUBLISHED.value
Пример #11
0
    def handle(event: PendingEdited):
        scholarship = Scholarship.get(event.scholarship_id)

        fields = event.fields.copy()
        fields['fillStatus'] = UpdateDraft._fill_status(event.is_complete)
        fields['country'] = UpdateDraft._country(fields.pop('country'))

        if 'steps' in fields:
            if 'sourceDetails' in fields:
                fields['sourceDetails']['steps'] = fields.pop('steps')
            else:
                fields['sourceDetails'] = {'steps': fields.pop('steps')}

        if 'entity' in fields:
            fields['entity'] = UpdateDraft._entity(fields.pop('entity'))

        scholarship.update(refresh=True, **fields)