def test_show_hunt_on_nonexistent_hunt_id_404s(self, login_disabled, current_user): current_user.admin_id = 1 login_disabled = True with app.test_client() as c: response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(response.status_code, 404)
def test_show_hunt_on_nonexistent_hunt_id_404s( self, login_disabled, current_user): current_user.admin_id = 1 login_disabled = True with app.test_client() as c: response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(response.status_code, 404)
def test_show_hunt_works(self, Hunt): name = identifier() participants = [ MagicMock(email=example_email(), registered=True) for _ in xrange(2) ] items = [{'name': identifier()} for _ in xrange(2)] Hunt.find_by_id.return_value = MagicMock( name=name, participants=participants, items=items, participant_rule='by_whitelist') with app.test_client() as c: with c.session_transaction() as sess: sess['user_id'] = 1 show_hunt_response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(show_hunt_response.status_code, 200) self.assertIn(name, show_hunt_response.data) for participant in participants: self.assertIn(participant.email, show_hunt_response.data) for item in items: self.assertIn(item['name'], show_hunt_response.data)
def test_visiting_new_hunt_works(self, current_user, login_disabled, get_db): login_disabled = True current_user.admin_id = 1 with app.test_client() as c: response = c.get('/new_hunt') self.assertEqual(response.status_code, 200)
def test_visiting_new_hunt_works( self, current_user, login_disabled, get_db): login_disabled = True current_user.admin_id = 1 with app.test_client() as c: response = c.get('/new_hunt') self.assertEqual(response.status_code, 200)
def test_delete_other_admin_hunt_404s( self, login_disabled, current_user, Hunt): Hunt.find_by_id().admin_id = 1 current_user.admin_id = 2 login_disabled = True with app.test_client() as c: response = c.get('hunts/1/delete') self.assertEqual(response.status_code, 404)
def setUp(self): self.request = MagicMock() self.app = app.test_client() self.admin = {'email': example_email(), 'password': identifier()} self.registration_data = { 'email': example_email(), 'name': identifier() }
def test_delete_other_admin_hunt_404s(self, login_disabled, current_user, Hunt): Hunt.find_by_id().admin_id = 1 current_user.admin_id = 2 login_disabled = True with app.test_client() as c: response = c.get('hunts/1/delete') self.assertEqual(response.status_code, 404)
def test_valid_participant_can_register_for_hunt(self, LRS, get_db): with app.test_client() as c: response = c.post( '/register_participant?hunt_id=1', data=self.registration_data, follow_redirects=True ) self.assertEqual(response.status_code, 200)
def test_login_valid_credentials_allows_user_to_enter_site( self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: self.create_admin(c, self.admin['email'], self.admin['password']) self.logout(c) response = self.login(c, self.admin['email'], self.admin['password']) self.assertEqual(response.status_code, 200)
def test_valid_unsaved_participant_saved_on_registration( self, get_db, get_participant, LRS, create_new_participant): with app.test_client() as c: get_participant.return_value = False c.post( '/register_participant?hunt_id=1', data=self.registration_data) assert create_new_participant.called, "Expected a valid but unsaved" \ " participant to be saved to the database after registering for" \ " the hunt, but this did not happen."
def test_create_settings_with_invalid_wax_site_fails( self, get_db, login_disabled, current_user): current_user.admin_id = 1 with app.test_client() as c: response = self.create_settings( c, 'not all alphanumeric site name!', current_user.admin_id, identifier(), identifier()) self.assertFalse(get_db.session.add.called)
def test_create_settings(self, get_db, login_disabled, current_user): current_user.admin_id = 1 with app.test_client() as c: response = self.create_settings(c, identifier(), 1, identifier(), identifier()) self.assertEqual(response.status_code, 200) # successfully saving settings redirects to hunts page self.assertIn("Your Scavenger Hunts", response.data)
def test_login_valid_credentials_allows_user_to_enter_site( self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: self.create_admin(c, self.admin['email'], self.admin['password']) self.logout(c) response = self.login( c, self.admin['email'], self.admin['password']) self.assertEqual(response.status_code, 200)
def test_create_hunt_works(self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: participants = [{'email': example_email()} for _ in xrange(2)] items = [{'name': identifier()} for _ in xrange(2)] create_hunt_response = self.create_hunt( name=identifier(), participants=participants, items=items) self.assertEqual(create_hunt_response.status_code, 200)
def test_valid_unsaved_participant_saved_on_registration( self, get_db, get_participant, LRS, create_new_participant): with app.test_client() as c: get_participant.return_value = False c.post('/register_participant?hunt_id=1', data=self.registration_data) assert create_new_participant.called, "Expected a valid but unsaved" \ " participant to be saved to the database after registering for" \ " the hunt, but this did not happen."
def test_create_settings_with_invalid_wax_site_fails( self, get_db, login_disabled, current_user): current_user.admin_id = 1 with app.test_client() as c: response = self.create_settings(c, 'not all alphanumeric site name!', current_user.admin_id, identifier(), identifier()) self.assertFalse(get_db.session.add.called)
def test_create_admin_works(self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db) with app.test_client() as c: password = identifier() admin_email = example_email() response = self.create_admin( app=c, email=admin_email, password=password) self.assertEqual(response.status_code, 200) self.assertIn('Welcome to xAPI Scavenger Hunt', response.data)
def test_create_hunt_works(self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: participants = [{'email': example_email()} for _ in xrange(2)] items = [{'name': identifier()} for _ in xrange(2)] create_hunt_response = self.create_hunt(name=identifier(), participants=participants, items=items) self.assertEqual(create_hunt_response.status_code, 200)
def test_create_settings( self, get_db, login_disabled, current_user): current_user.admin_id = 1 with app.test_client() as c: response = self.create_settings( c, identifier(), 1, identifier(), identifier()) self.assertEqual(response.status_code, 200) # successfully saving settings redirects to hunts page self.assertIn("Your Scavenger Hunts", response.data)
def test_login_invalid_credentials_prevents_user_from_entering_site( self, get_admin): get_admin.return_value = None with app.test_client() as c: admin_email = example_email() password = identifier() response = self.login(c, admin_email, password) self.assertEqual(response.status_code, 200) self.assertIn('Invalid email and password combination', response.data)
def test_refinding_item_sends_refound_item_statement( self, get_db, LRS, Hunt): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() Hunt.find_by_id.return_value = MagicMock(name='some name') LRS().get_state.return_value = {'1': True} c.get('/hunts/1/items/1') LRS().send_found_item_statement.assert_called_with( found_again=True)
def test_login_invalid_credentials_prevents_user_from_entering_site( self, get_admin): get_admin.return_value = None with app.test_client() as c: admin_email = example_email() password = identifier() response = self.login(c, admin_email, password) self.assertEqual(response.status_code, 200) self.assertIn( 'Invalid email and password combination', response.data)
def test_finding_item_sends_found_item_statement( self, get_db, LRS, Hunt): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() Hunt.find_by_id.return_value = MagicMock(name='name') c.get('/hunts/1/items/1') assert LRS().send_found_item_statement.called, "Expected" \ " finding an item to send a statement but a statement was" \ " not sent"
def test_create_admin_works(self, get_db, get_admin): get_admin.return_value = self.create_mock_admin(get_db) with app.test_client() as c: password = identifier() admin_email = example_email() response = self.create_admin(app=c, email=admin_email, password=password) self.assertEqual(response.status_code, 200) self.assertIn('Welcome to xAPI Scavenger Hunt', response.data)
def test_registered_participant_congratulated_on_hunt_finish( self, get_db, get_item, hunt_requirements_completed, LRS): LRS().get_state.return_value = {'1': True} get_item.return_value = MagicMock(item_id='1') hunt_requirements_completed.return_value = True with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() response = c.get('/hunts/1/items/1') self.assertEqual(response.status_code, 200) self.assertIn('congrats-message', response.data)
def test_register_participant_sends_xapi_statement( self, send_statement, get_db, valid_participant): with app.test_client() as c: valid_participant.return_value = MagicMock(), 'Error message' c.post( '/register_participant?hunt_id=1', data=self.registration_data) lrs = xapi.WaxCommunicator( MagicMock(), MagicMock(), MagicMock(), MagicMock(), MagicMock() ) assert send_statement.called, "Expected a" \ "began hunt statement to be sent but it wasn't"
def test_finding_item_updates_state( self, get_db, send_statement, get_state, post_state, Hunt): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() Hunt.find_by_id.return_value = MagicMock(name='some name') c.get('/hunts/1/items/1') assert post_state.called, "Expected a state document to be" \ " updated by a call to post_state, but post_state was not" \ " called"
def test_delete_hunt_works( self, get_db, login_disabled, current_user, Hunt, get_admin): current_user.admin_id = 1 login_disabled = True get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: Hunt.find_by_id.return_value = MagicMock(admin_id=1) response = c.get('/hunts/1/delete', follow_redirects=True) self.assertEqual(response.status_code, 200) Hunt.find_by_id.return_value = None response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(response.status_code, 404)
def test_completing_hunt_sends_completed_hunt_statement( self, get_db, req_completed, LRS, Hunt): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() Hunt.find_by_id.return_value = MagicMock(name='name') LRS().get_state.return_value = {'1': True} c.get('/hunts/1/items/1') assert LRS().send_completed_hunt_statement.called, "Expected" \ " scavenger meeting all of the hunt requirements to send a" \ " completed hunt statement"
def test_delete_hunt_works(self, get_db, login_disabled, current_user, Hunt, get_admin): current_user.admin_id = 1 login_disabled = True get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: Hunt.find_by_id.return_value = MagicMock(admin_id=1) response = c.get('/hunts/1/delete', follow_redirects=True) self.assertEqual(response.status_code, 200) Hunt.find_by_id.return_value = None response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(response.status_code, 404)
def test_show_one_hunt_item_code_works(self, get_db, login_disabled, current_user, Hunt, get_admin): current_user.admin_id = 1 login_disabled = True get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: item1 = MagicMock(item_id=1) item1.name = identifier() Hunt.find_by_id.return_value = MagicMock(items=[item1]) response = c.get('/hunts/1/items/1/qrcode') self.assertEqual(response.status_code, 200) self.assertIn(item1.name, response.data)
def test_show_one_hunt_item_code_works( self, get_db, login_disabled, current_user, Hunt, get_admin): current_user.admin_id = 1 login_disabled = True get_admin.return_value = self.create_mock_admin(get_db, valid=True) with app.test_client() as c: item1 = MagicMock(item_id=1) item1.name = identifier() Hunt.find_by_id.return_value = MagicMock(items=[item1]) response = c.get('/hunts/1/items/1/qrcode') self.assertEqual(response.status_code, 200) self.assertIn(item1.name, response.data)
def test_registered_participant_can_resume_hunt( self, get_db, hunt_completed, LRS): LRS().get_state.return_value = {'2': True} hunt_completed.return_value = False with app.test_client() as c: name = identifier() # necessary to access item routes with c.session_transaction() as sess: sess['email'] = example_email() sess['name'] = name response = c.get('/hunts/1/items/1', follow_redirects=True) self.assertEqual(response.status_code, 200) self.assertIn(name, response.data)
def test_registered_participant_can_resume_hunt(self, get_db, hunt_completed, LRS): LRS().get_state.return_value = {'2': True} hunt_completed.return_value = False with app.test_client() as c: name = identifier() # necessary to access item routes with c.session_transaction() as sess: sess['email'] = example_email() sess['name'] = name response = c.get('/hunts/1/items/1', follow_redirects=True) self.assertEqual(response.status_code, 200) self.assertIn(name, response.data)
def test_previously_saved_settings_appear_when_visiting_settings( self, get_admin, get_db, login_disabled, current_user, get_settings): login_disabled = True get_admin.return_value = self.create_mock_admin(get_db) current_user.admin_id = 1 wax_site = identifier() login = identifier() password = identifier() get_settings.return_value = MagicMock( wax_site=wax_site, login=login, password=password) with app.test_client() as c: response = c.get('/settings') self.assertEqual(response.status_code, 200) for text in [wax_site, login, password]: self.assertIn(text, response.data)
def test_previously_saved_settings_appear_when_visiting_settings( self, get_admin, get_db, login_disabled, current_user, get_settings): login_disabled = True get_admin.return_value = self.create_mock_admin(get_db) current_user.admin_id = 1 wax_site = identifier() login = identifier() password = identifier() get_settings.return_value = MagicMock(wax_site=wax_site, login=login, password=password) with app.test_client() as c: response = c.get('/settings') self.assertEqual(response.status_code, 200) for text in [wax_site, login, password]: self.assertIn(text, response.data)
def test_index_items_displays_all_items(self, LRS, find_by_id, _get_db): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() item1 = MagicMock() item1.name = identifier() item2 = MagicMock() item2.name = identifier() items = [item1, item2] find_by_id.return_value = MagicMock(items=items) response = c.get('hunts/1/items') self.assertEqual(response.status_code, 200) for item in items: self.assertIn(item.name, response.data)
def test_index_items_displays_all_items( self, LRS, find_by_id, _get_db): with app.test_client() as c: with c.session_transaction() as sess: sess['email'] = example_email() item1 = MagicMock() item1.name = identifier() item2 = MagicMock() item2.name = identifier() items = [item1, item2] find_by_id.return_value = MagicMock(items=items) response = c.get('hunts/1/items') self.assertEqual(response.status_code, 200) for item in items: self.assertIn(item.name, response.data)
def test_show_hunt_works(self, Hunt): name = identifier() participants = [ MagicMock(email=example_email(), registered=True) for _ in xrange(2) ] items = [{'name': identifier()} for _ in xrange(2)] Hunt.find_by_id.return_value = MagicMock( name=name, participants=participants, items=items, participant_rule='by_whitelist' ) with app.test_client() as c: with c.session_transaction() as sess: sess['user_id'] = 1 show_hunt_response = c.get('/hunts/1', follow_redirects=True) self.assertEqual(show_hunt_response.status_code, 200) self.assertIn(name, show_hunt_response.data) for participant in participants: self.assertIn(participant.email, show_hunt_response.data) for item in items: self.assertIn(item['name'], show_hunt_response.data)
def before_feature(context, feature): app.config['TESTING'] = True context.app = app.test_client() context.root = 'localhost:5000'
def test_show_item_for_nonexistent_item_404s(self, get_db, get_item): get_item.return_value = None with app.test_client() as c: response = c.get('/hunts/1/items/1') self.assertEqual(response.status_code, 404)
def test_index_items_on_nonexistent_hunt_404s(self, login_disabled): login_disabled = True with app.test_client() as c: response = c.get('hunts/1/items') self.assertEqual(response.status_code, 404)
def test_show_item_on_nonexistent_hunt_404s(self): with app.test_client() as c: response = c.get('/hunts/1/items/1', follow_redirects=True) self.assertEqual(response.status_code, 404)
def test_delete_nonexistent_hunt_404s(self, login_disabled, current_user): current_user.admin_id = 1 login_disabled = True with app.test_client() as c: response = c.get('hunts/1/delete') self.assertEqual(response.status_code, 404)
def test_valid_participant_can_register_for_hunt(self, LRS, get_db): with app.test_client() as c: response = c.post('/register_participant?hunt_id=1', data=self.registration_data, follow_redirects=True) self.assertEqual(response.status_code, 200)