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")
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
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
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
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
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)
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
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')
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
def test_scheduler(client): rv = client.get(flask.url_for('courses.scheduler')) assert rv.status_code == 200
def test_planner(client): rv = client.get(flask.url_for('courses.planner')) assert rv.status_code == 200
def test_search_page(client): assert client.get( flask.url_for('directory_search.directory_search')).status_code == 200
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
def test_marketplace_home(client): rv = client.get(flask.url_for('marketplace.marketplace')) assert rv.status_code == 200
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': [] }
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}]
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
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
def test_name_search(client): assert client.get( flask.url_for('directory_search.search_by_name', name_query='sander')).status_code == 200
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))
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
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] } ]
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
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] }]
def test_home(client): rv = client.get(flask.url_for('home')) assert rv.status_code == 200