예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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()
     }
예제 #8
0
 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()
     }
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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."
예제 #13
0
    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)
예제 #14
0
    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)
예제 #15
0
 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)
예제 #16
0
    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)
예제 #17
0
 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."
예제 #18
0
    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)
예제 #19
0
    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)
예제 #20
0
    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)
예제 #21
0
    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)
예제 #22
0
    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)
예제 #23
0
    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)
예제 #24
0
    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)
예제 #25
0
    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"
예제 #26
0
    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)
예제 #27
0
    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)
예제 #28
0
    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"
예제 #29
0
    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"
예제 #30
0
    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)
예제 #31
0
    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)
예제 #32
0
    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"
예제 #33
0
    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)
예제 #34
0
    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)
예제 #35
0
    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)
예제 #36
0
    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)
예제 #37
0
    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)
예제 #38
0
    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)
예제 #39
0
    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)
예제 #40
0
    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)
예제 #41
0
    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)
예제 #42
0
    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)
예제 #43
0
def before_feature(context, feature):
    app.config['TESTING'] = True
    context.app = app.test_client()
    context.root = 'localhost:5000'
예제 #44
0
def before_feature(context, feature):
    app.config['TESTING'] = True
    context.app = app.test_client()
    context.root = 'localhost:5000'
예제 #45
0
 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)
예제 #46
0
 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)
예제 #47
0
 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)
예제 #48
0
 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)
예제 #49
0
 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)
예제 #50
0
 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)
예제 #51
0
 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)
예제 #52
0
 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)
예제 #53
0
 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)