Ejemplo n.º 1
0
def test_path_related_funciton(client):

    helpers.create_page_in_database("TEST_TITLE", "BLAHBLAH")
    assert helpers.get_links() != []

    assert helpers.check_duplicate("TEST TITLE")
    assert not helpers.check_duplicate("doesnt exist")

    links = helpers.get_links()
    titles = [title for title, _ in links.items()]
    assert "TEST_TITLE" in ' '.join(titles)
    with app.test_request_context():
        flask.session['username'] = '******'
        helpers.change_lock_status("TEST TITLE", True)
        assert helpers.is_locked("TEST TITLE")

        helpers.change_lock_status("TEST TITLE", False)
        assert not helpers.is_locked("TEST TITLE")
    client.get(flask.url_for('uploads.display',
                             url="TEST_TITLE")).status_code == 200
    helpers.rename_title('TEST_TITLE', 'ANOTHER_Title')

    links = helpers.get_links()
    titles = [title for title, _ in links.items()]
    assert "TEST_TITLE" not in ' '.join(titles)
    assert "ANOTHER_Title" in ' '.join(titles)

    client.get(flask.url_for('uploads.display',
                             url="ANOTHER Title")).status_code == 200
    assert "BLAHBLAH" == helpers.read_markdown('ANOTHER_Title')
    helpers.remove_file_from_db("ANOTHER_Title")
Ejemplo n.º 2
0
def test_plain_editor_page(client):
    assert client.get(flask.url_for('editor.editor')).status_code == 403
    assert client.get(flask.url_for('editor.page_list')).status_code == 200
    # Since dude has admin privileges, he should be able to access the editor
    # page.
    with client.session_transaction() as sess:
        sess['username'] = '******'
    assert client.get(flask.url_for('editor.editor')).status_code == 200
Ejemplo n.º 3
0
def test_marketplace_category(client):
    rv = client.get(flask.url_for('marketplace.query'),
                    query_string={'cat': 1})
    assert rv.status_code == 200

    rv = client.get(flask.url_for('marketplace.query'),
                    query_string={'cat': 'all'})
    assert rv.status_code == 200
Ejemplo n.º 4
0
def test_marketplace_query(client):
    rv = client.get(flask.url_for('marketplace.query'),
                    query_string={
                        'cat': 2,
                        'q': 'great'
                    })
    assert rv.status_code == 200

    rv = client.get(flask.url_for('marketplace.query'))
    assert rv.status_code == 404

    rv = client.get(flask.url_for('marketplace.query'),
                    query_string={'cat': 'abc'})
    assert rv.status_code == 404
Ejemplo n.º 5
0
def test_marketplace_edit(client):
    with client.session_transaction() as sess:
        sess['username'] = '******'

    rv = client.get(flask.url_for('marketplace.sell', state='edit'),
                    follow_redirects=True)
    assert rv.status_code == 200
    assert b'Invalid item' in rv.data

    rv = client.get(flask.url_for('marketplace.sell',
                                  state='edit',
                                  item_id=100),
                    follow_redirects=True)
    assert rv.status_code == 200
    assert b'Invalid item' in rv.data

    rv = client.get(flask.url_for('marketplace.sell', state='edit', item_id=1),
                    follow_redirects=True)
    assert rv.status_code == 200
    assert b'You do not have permission to edit this item' in rv.data

    rv = client.get(flask.url_for('marketplace.sell', state='edit', item_id=4))
    assert rv.status_code == 200
    assert b'Couch' in rv.data
    assert b'12.34' in rv.data

    new_item = {
        'cat': 1,
        'item_title': 'Slouch',
        'item_condition': 'Poor',
        'item_price': '.77',
        'item_details': 'Possibly cursed'
    }
    rv = client.post(flask.url_for('marketplace.sell', state='edit',
                                   item_id=4),
                     data=new_item,
                     follow_redirects=True)
    assert rv.status_code == 200
    assert b'Updated!' in rv.data

    rv = client.get(flask.url_for('marketplace.view_item', item_id=4))
    assert rv.status_code == 200
    assert b'Furniture' in rv.data
    assert b'Slouch' in rv.data
    assert b'Poor' in rv.data
    assert b'$0.77' in rv.data
    assert b'https://i.imgur.com/abcdef123.png' not in rv.data
    assert b'csander' in rv.data
Ejemplo n.º 6
0
def test_my_page(client):
    with client.session_transaction() as sess:
        sess['username'] = '******'
    res = client.get(flask.url_for('core.my_directory_page'))
    assert res.status_code == 302
    assert res.headers['location'] == flask.url_for(
        'directory_search.view_user', user_id=3)
Ejemplo n.º 7
0
def test_plain_calendar_page(client):
    assert client.get(flask.url_for('calendar.add_events')).status_code == 302
    assert client.get(flask.url_for('calendar.calendar')).status_code == 200
    assert client.get(flask.url_for('calendar.sync')).status_code == 200
    assert client.post(
        flask.url_for('calendar.get_all_events')).status_code == 200
    assert client.post(
        flask.url_for('calendar.get_all_events_backup')).status_code == 200
    assert client.post(flask.url_for('calendar.get_events_backup'),
                       data=dict(year=2019)).status_code == 200
    assert client.post(flask.url_for('calendar.get_events'),
                       data=dict(year=2019)).status_code == 200
    assert client.post(
        flask.url_for('calendar.calendar_share_cal')).status_code == 302
    assert client.post(flask.url_for('calendar.calendar_add_events',
                                     update=0)).status_code == 302
Ejemplo n.º 8
0
def test_marketplace_manage(client):
    rv = client.get(flask.url_for('marketplace.manage'))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('auth.login')

    with client.session_transaction() as sess:
        sess['username'] = '******'
    rv = client.get(flask.url_for('marketplace.manage'))
    assert rv.status_code == 200
    assert b'Your listings' in rv.data

    rv = client.get(flask.url_for('marketplace.archive', item_id=3))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('marketplace.manage')
    assert not helpers.table_fetch('marketplace_items',
                                   one=True,
                                   fields=['item_active'],
                                   attrs={'item_id': 3})

    rv = client.get(flask.url_for('marketplace.view_item', item_id=3))
    assert rv.status_code == 200
    assert b'This item has been archived!' in rv.data

    rv = client.get(flask.url_for('marketplace.unarchive', item_id=3))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('marketplace.manage')
    assert helpers.table_fetch('marketplace_items',
                               one=True,
                               fields=['item_active'],
                               attrs={'item_id': 3})

    rv = client.get(flask.url_for('marketplace.view_item', item_id=3))
    assert rv.status_code == 200
    assert b'This item has been archived!' not in rv.data

    # Manage should fail if permissions are missing
    with client.session_transaction() as sess:
        sess['username'] = '******'
    rv = client.get(flask.url_for('marketplace.archive', item_id=3))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('marketplace.marketplace')
    assert helpers.table_fetch('marketplace_items',
                               one=True,
                               fields=['item_active'],
                               attrs={'item_id': 3})
    rv = client.get(flask.url_for('marketplace.unarchive', item_id=3))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('marketplace.marketplace')
Ejemplo n.º 9
0
def test_text_editor_page(client):
    with client.session_transaction() as sess:
        sess['username'] = '******'
    with app.test_request_context():
        flask.session['username'] = '******'
        helpers.create_page_in_database(
            "Some really really really interesting title",
            "nothing to see here")
        helpers.change_lock_status(
            "Some really really really interesting title", False)
        assert not helpers.is_locked(
            "Some really really really interesting title")
        helpers.create_page_in_database("Some less interesting title",
                                        "or is there")
        helpers.change_lock_status("Some less interesting title", True)
        assert helpers.is_locked("Some less interesting title")
        helpers.change_lock_status("default", True, default=True)
        assert not helpers.is_locked("default")

    rv = client.get(
        flask.url_for('editor.editor',
                      title="Some really really really interesting title"))
    assert rv.status_code == 200
    assert b'Some really really really interesting title' in rv.data
Ejemplo n.º 10
0
def test_scheduler(client):
    rv = client.get(flask.url_for('courses.scheduler'))
    assert rv.status_code == 200
Ejemplo n.º 11
0
def test_planner(client):
    rv = client.get(flask.url_for('courses.planner'))
    assert rv.status_code == 200
Ejemplo n.º 12
0
def test_search_page(client):
    assert client.get(
        flask.url_for('directory_search.directory_search')).status_code == 200
Ejemplo n.º 13
0
def test_marketplace_sell(client):
    rv = client.get(flask.url_for('marketplace.sell'))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('auth.login')

    with client.session_transaction() as sess:
        sess['username'] = '******'
    rv = client.get(flask.url_for('marketplace.sell', state='abc'))
    assert rv.status_code == 302
    assert rv.location == flask.url_for('marketplace.sell')

    rv = client.get(flask.url_for('marketplace.sell'))
    assert rv.status_code == 200
    assert b'Please select a category for your item' in rv.data

    item = {}
    for cat in (None, 'abc', '10'):
        item['cat'] = cat
        rv = client.post(flask.url_for('marketplace.sell'), data=item)
        assert rv.status_code == 200
        assert b'Invalid category' in rv.data

    item['cat'] = '1'  # Furniture
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Invalid category' not in rv.data
    assert b'Missing item title' in rv.data

    item['item_title'] = 'Couch'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Missing item title' not in rv.data
    assert b'Missing condition' in rv.data

    item['item_condition'] = 'Saggy'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Missing condition' not in rv.data
    assert b'Invalid price' in rv.data

    for price in ('cash $$$', '1.3'):
        item['item_price'] = price
        rv = client.post(flask.url_for('marketplace.sell'), data=item)
        assert rv.status_code == 200
        assert b'Invalid price' in rv.data

    item['item_price'] = '12.34'
    item['images'] = ['not_an_image']
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Invalid price' not in rv.data
    assert b'Invalid image' in rv.data

    item['images'] = ['http://imgur.com/abcdef123']
    rv = client.post(flask.url_for('marketplace.sell'),
                     data=item,
                     follow_redirects=True)
    assert rv.status_code == 200
    assert b'Invalid image' not in rv.data
    assert b'Posted!' in rv.data

    rv = client.get(flask.url_for('marketplace.view_item', item_id=4))
    assert rv.status_code == 200
    assert b'Furniture' in rv.data
    assert b'Couch' in rv.data
    assert b'Saggy' in rv.data
    assert b'$12.34' in rv.data
    assert b'https://i.imgur.com/abcdef123.png' in rv.data
    assert b'csander' in rv.data

    item = {'cat': '2'}
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Missing textbook title' in rv.data

    item['textbook_title'] = 'Algebra'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Missing textbook title' not in rv.data
    assert b'Missing textbook author' in rv.data

    item['textbook_author'] = 'Serge Lang'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Missing textbook author' not in rv.data

    item['textbook_id'] = '10'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Invalid textbook' in rv.data
    del item['textbook_id']

    item['textbook_edition'] = 'not_an_edition'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Invalid textbook edition' in rv.data

    item['textbook_edition'] = '3'
    item['textbook_isbn'] = 'not_an_isbn'
    rv = client.post(flask.url_for('marketplace.sell'), data=item)
    assert rv.status_code == 200
    assert b'Invalid textbook edition' not in rv.data
    assert b'Invalid textbook ISBN' in rv.data

    item['textbook_isbn'] = '0-387-95385-X'
    item['item_condition'] = 'New'
    item['item_price'] = '69'
    item['item_details'] = 'Caused much pain and suffering'
    rv = client.post(flask.url_for('marketplace.sell'),
                     data=item,
                     follow_redirects=True)
    assert rv.status_code == 200
    assert b'Invalid textbook ISBN' not in rv.data
    assert b'Posted!' in rv.data

    rv = client.get(flask.url_for('marketplace.view_item', item_id=5))
    assert rv.status_code == 200
    assert b'Textbooks' in rv.data
    assert b'Algebra' in rv.data
    assert b'Serge Lang' in rv.data
    assert b'New' in rv.data
    assert b'038795385X' in rv.data
    assert b'$69.00' in rv.data
    assert b'Caused much pain and suffering' in rv.data
    assert b'csander' in rv.data
Ejemplo n.º 14
0
def test_marketplace_home(client):
    rv = client.get(flask.url_for('marketplace.marketplace'))
    assert rv.status_code == 200
Ejemplo n.º 15
0
def test_planner_mine(client):
    # Test when not logged in
    rv = client.get(flask.url_for('courses.planner_mine'))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'courses': [], 'placeholders': []}
    rv = client.get(
        flask.url_for('courses.planner_add_course', course_id=1, year=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'success': False,
        'message': 'Must be logged in to save'
    }
    rv = client.get(
        flask.url_for('courses.planner_drop_course', course_id=1, year=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'success': False,
        'message': 'Must be logged in to save'
    }
    # Test courses list when no courses have been added
    with client.session_transaction() as sess:
        sess['username'] = '******'
    rv = client.get(flask.url_for('courses.planner_mine'))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'courses': [], 'placeholders': []}
    # Test adding some courses
    rv = client.get(
        flask.url_for('courses.planner_add_course', course_id=1, year=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(
        flask.url_for('courses.planner_add_course', course_id=5, year=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(
        flask.url_for('courses.planner_add_course', course_id=6, year=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    # Test adding a duplicate course (should fail)
    rv = client.get(
        flask.url_for('courses.planner_add_course', course_id=1, year=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'success': False,
        'message': 'Cannot add a class twice in the same term'
    }
    # Test courses list now that courses have been added; verify order
    rv = client.get(flask.url_for('courses.planner_mine'))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'courses': [{
            'ids': [1],
            'number': 'CS 124',
            'terms': [1],
            'units': 12,
            'year': 2
        }, {
            'ids': [6],
            'number': 'Bi 1',
            'terms': [3],
            'units': 9,
            'year': 1
        }, {
            'ids': [5],
            'number': 'CS 38',
            'terms': [3],
            'units': 9,
            'year': 1
        }],
        'placeholders': []
    }
    # Test dropping a course
    rv = client.get(
        flask.url_for('courses.planner_drop_course', course_id=5, year=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(flask.url_for('courses.planner_mine'))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'courses': [{
            'ids': [1],
            'number': 'CS 124',
            'terms': [1],
            'units': 12,
            'year': 2
        }, {
            'ids': [6],
            'number': 'Bi 1',
            'terms': [3],
            'units': 9,
            'year': 1
        }],
        'placeholders': []
    }
Ejemplo n.º 16
0
def test_scheduler_mine(client):
    # Test when not logged in
    rv = client.get(flask.url_for('courses.scheduler_mine', year=2018, term=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == []
    rv = client.get(
        flask.url_for('courses.scheduler_add_section', course=1, section=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'success': False,
        'message': 'Must be logged in to save'
    }
    rv = client.get(
        flask.url_for('courses.scheduler_drop_section', course=1, section=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {
        'success': False,
        'message': 'Must be logged in to save'
    }
    # Test sections list when no sections have been added
    with client.session_transaction() as sess:
        sess['username'] = '******'
    rv = client.get(flask.url_for('courses.scheduler_mine', year=2018, term=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == []
    # Test adding some sections
    rv = client.get(
        flask.url_for('courses.scheduler_add_section', course=1, section=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(
        flask.url_for('courses.scheduler_add_section', course=6, section=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(
        flask.url_for('courses.scheduler_add_section', course=2, section=3))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    # Test sections list now that sections have been added
    rv = client.get(flask.url_for('courses.scheduler_mine', year=2018, term=1))
    assert rv.status_code == 200
    assert sorted(json.loads(rv.data), key=lambda course: course['id']) == [{
        'id':
        1,
        'section':
        1
    }, {
        'id':
        2,
        'section':
        3
    }]
    rv = client.get(flask.url_for('courses.scheduler_mine', year=2018, term=3))
    assert rv.status_code == 200
    assert json.loads(rv.data) == [{'id': 6, 'section': 2}]
    # Test dropping a section
    rv = client.get(
        flask.url_for('courses.scheduler_drop_section', course=1, section=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == {'success': True}
    rv = client.get(flask.url_for('courses.scheduler_mine', year=2018, term=1))
    assert rv.status_code == 200
    assert json.loads(rv.data) == [{'id': 2, 'section': 3}]
Ejemplo n.º 17
0
def test_view_user(client):
    assert client.get(flask.url_for('directory_search.view_user',
                                    user_id=3)).status_code == 200
    assert client.get(flask.url_for('directory_search.view_user',
                                    user_id=100)).status_code == 200
Ejemplo n.º 18
0
def test_routes(client):
    assert client.get(flask.url_for('uploads.uploads')).status_code == 403
    assert client.get(
        flask.url_for('uploads.uploaded_list')).status_code == 200
Ejemplo n.º 19
0
def test_name_search(client):
    assert client.get(
        flask.url_for('directory_search.search_by_name',
                      name_query='sander')).status_code == 200
Ejemplo n.º 20
0
def test_get_image(client):
    assert client.get(flask.url_for('directory_search.get_image',
                                    user_id=3)).status_code == 200
    with pytest.raises(Exception):
        client.get(flask.url_for('directory_search.get_image', user_id=1))
Ejemplo n.º 21
0
def test_edit_page(client):
    with client.session_transaction() as sess:
        sess['username'] = '******'
    assert client.get(flask.url_for('core.edit_user')).status_code == 200
Ejemplo n.º 22
0
def test_planner_courses(client):
    rv = client.get(flask.url_for('courses.planner_courses'))
    assert rv.status_code == 200
    data = json.loads(rv.data)
    for course in data:  # sort term-id pairs
        id_terms = sorted(zip(course['ids'], course['terms']))
        course['ids'] = [course_id for course_id, _ in id_terms]
        course['terms'] = [term for _, term in id_terms]
    assert data == [
        {
            'ids': [6],
            'instructor': 'Meyerowitz, E / Zinn, K',
            'name': 'Principles of Biology',
            'number': 'Bi 1',
            'terms': [3],
            'units': [4, 0, 5]
        },
        {
            'ids': [7, 8, 9],
            'instructor':
            None,  # 2 are with 'Mendez, J', and 1 with 'Jendez, M'
            'name': 'Experimental Methods in Solar Energy Conversion',
            'number': 'Ch 3x',
            'terms': [1, 2, 3],
            'units': [1, 3, 2]
        },
        {
            'ids': [1],
            'instructor': 'Pinkston, D',
            'name': 'Operating Systems',
            'number': 'CS 124',
            'terms': [1],
            'units': [3, 6, 3]
        },
        {
            'ids': [3],
            'instructor': 'Umans, C',
            'name': 'Decidability and Tractability',
            'number': 'CS 21',
            'terms': [2],
            'units': [3, 0, 6]
        },
        {
            'ids': [5],
            'instructor': 'Vidick, T',
            'name': 'Algorithms',
            'number': 'CS 38',
            'terms': [3],
            'units': [3, 0, 6]
        },
        {
            'ids': [4],
            'instructor': None,
            'name': 'Calculus of One and Several Variables and Linear Algebra',
            'number': 'Ma 1b',
            'terms': [2],
            'units': [4, 0, 5]
        },
        {
            'ids': [2],
            'instructor': 'Cheung, C',
            'name': 'Classical Mechanics and Electromagnetism',
            'number': 'Ph 1a',
            'terms': [1],
            'units': [4, 0, 5]
        }
    ]
Ejemplo n.º 23
0
def test_marketplace_view_item(client):
    rv = client.get(flask.url_for('marketplace.view_item', item_id=1))
    assert rv.status_code == 200

    rv = client.get(flask.url_for('marketplace.view_item', item_id=1000))
    assert rv.status_code == 404
Ejemplo n.º 24
0
def test_scheduler_courses(client):
    # Test nonexistant term
    rv = client.get(
        flask.url_for('courses.scheduler_courses', year=2018, term=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == []
    # Test actual term
    rv = client.get(
        flask.url_for('courses.scheduler_courses', year=2019, term=2))
    assert rv.status_code == 200
    assert json.loads(rv.data) == [{
        'id':
        8,
        'name':
        'Experimental Methods in Solar Energy Conversion',
        'number':
        'Ch 3x',
        'sections': [{
            'grades': 'PASS-FAIL',
            'instructor': 'Mendez, J',
            'number': 1,
            'times': 'F 09:00 - 09:55\nW 13:00 - 15:55',
            'locations': '147 NYS\n107 MEAD'
        }],
        'units': [1, 3, 2]
    }, {
        'id':
        3,
        'name':
        'Decidability and Tractability',
        'number':
        'CS 21',
        'sections': [{
            'grades': 'LETTER',
            'instructor': 'Umans, C',
            'number': 1,
            'times': 'MWF 13:00 - 13:55',
            'locations': '105 ANB'
        }],
        'units': [3, 0, 6]
    }, {
        'id':
        4,
        'name':
        'Calculus of One and Several Variables and Linear Algebra',
        'number':
        'Ma 1b',
        'sections': [{
            'grades': 'PASS-FAIL',
            'instructor': 'Kechris, A',
            'number': 1,
            'times': 'MWF 10:00 - 10:55\nR 09:00 - 09:55',
            'locations': '119 KRK\n103 DWN'
        }, {
            'grades': 'PASS-FAIL',
            'instructor': 'Kechris, A',
            'number': 2,
            'times': 'MWF 10:00 - 10:55\nR 09:00 - 09:55',
            'locations': '119 KRK\n119 DWN'
        }, {
            'grades': 'PASS-FAIL',
            'instructor': 'Rains, E',
            'number': 7,
            'times': 'MWF 10:00 - 10:55\nR 09:00 - 09:55',
            'locations': '310 LINDE\nB111 DWN'
        }, {
            'grades': 'PASS-FAIL',
            'instructor': 'Rains, E',
            'number': 8,
            'times': 'R 10:00 - 10:55\nMWF 10:00 - 10:55',
            'locations': '142 KCK\n310 LINDE'
        }],
        'units': [4, 0, 5]
    }]
Ejemplo n.º 25
0
def test_home(client):
    rv = client.get(flask.url_for('home'))

    assert rv.status_code == 200