def test_it_edits_reviewer(client):
    python_id = create_technology_and_return_id(client, 'Python')
    elixir_id = create_technology_and_return_id(client, 'Elixir')
    new_reviewer_data = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'description': 'Experienced programmer.',
        'technologies': [python_id],
    }
    reviewer_href = client.post(
        '/reviewers',
        json=new_reviewer_data,
        headers=auth_header_with_all_permissions
    ).get_json()['href']

    edited_reviewer_data = {
        'description': 'Very experienced programmer.',
        'technologies': [python_id, elixir_id],
    }

    resp = client.patch(
        reviewer_href,
        json=edited_reviewer_data,
        headers=auth_header_with_all_permissions
    )
    reviewers = Reviewer.query.filter(
        Reviewer.description == 'Very experienced programmer.'
    ).all()

    assert '204' in resp.status
    assert len(reviewers) == 1
    assert len(reviewers[0].technologies) == 2
def test_it_indexes_reviewers(client):
    technology_id = create_technology_and_return_id(client, 'Python')
    first_reviewer = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'technologies': [technology_id],
    }
    second_reviewer = {
        'name': 'Gal',
        'surname': 'Anonim',
        'email': '*****@*****.**',
        'technologies': [technology_id],
    }
    client.post(
        '/reviewers',
        json=first_reviewer,
        headers=auth_header_with_all_permissions
    )
    client.post(
        '/reviewers',
        json=second_reviewer,
        headers=auth_header_with_all_permissions
    )
    resp = client.get('/reviewers')
    resp_data = resp.get_json()['data']
    assert '200' in resp.status
    assert len(resp_data) == 2
def test_it_creates_reviewer(client):
    technology_id = create_technology_and_return_id(client, 'Python')
    reviewer_data = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'technologies': [technology_id],
    }
    resp = client.post(
        '/reviewers',
        json=reviewer_data,
        headers=auth_header_with_all_permissions
    )
    reviewer_href = resp.get_json()['href']
    reviewers = Reviewer.query.filter(Reviewer.surname == 'Niesiołowski').all()

    assert '201' in resp.status
    assert len(reviewers) == 1
    assert reviewer_href == f'/reviewers/{reviewers[0].id}'
def test_it_returns_422_if_reviewer_does_not_have_any_technology(client):
    technology_id = create_technology_and_return_id(client, 'Python')
    reviewer_data = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'technologies': '',
    }
    resp = client.post(
        '/reviewers',
        json=reviewer_data,
        headers=auth_header_with_all_permissions
    )
    resp_data = resp.get_json()
    reviewers = Reviewer.query.filter(Reviewer.surname == 'Niesiołowski').all()

    assert '422' in resp.status
    assert len(reviewers) == 0
    assert resp_data['error'] == 422
    assert 'Validation error' in resp_data['message']
def test_it_deletes_author(client):
    technology_id = create_technology_and_return_id(client, 'Python')
    data = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'technologies': [technology_id],
    }
    created_author_data = client.post(
        '/authors',
        json=data,
        headers=auth_header_with_all_permissions
    ).get_json()
    authors_before_delete = Author.query.all()
    resp = client.delete(
        created_author_data['href'],
        headers=auth_header_with_all_permissions
    )
    authors_after_delete = Author.query.all()
    assert '204' in resp.status
    assert len(authors_before_delete) == 1
    assert len(authors_after_delete) == 0
def test_it_gets_reviewer(client):
    technology_id = create_technology_and_return_id(client, 'Python')
    reviewer_data = {
        'name': 'Paweł',
        'surname': 'Niesiołowski',
        'email': '*****@*****.**',
        'technologies': [technology_id],
    }
    reviewer_href = client.post(
        '/reviewers',
        json=reviewer_data,
        headers=auth_header_with_all_permissions
    ).get_json()['href']

    resp = client.get(reviewer_href)
    resp_data = resp.get_json()['data']

    assert '200' in resp.status
    assert resp_data['name'] == 'Paweł'
    assert resp_data['surname'] == 'Niesiołowski'
    assert resp_data['email'] == '*****@*****.**'
    assert len(resp_data['technologies']) == 1
    assert resp_data['technologies'][0]['name'] == 'Python'