Exemplo n.º 1
0
    def it_does_not_show_users_if_not_admin(self, client, mocker):
        session_dict = {
            'user': {
                'access_area': 'email,'
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [{
            'access_area': 'admin'
        }, {
            'id': 'test id',
            'email': '*****@*****.**',
            'access_area': 'email,event,'
        }, {
            'id': 'test2 id',
            'email': '*****@*****.**',
            'access_area': 'email,magazine,'
        }]

        mocker.patch('app.api_client.get_users', return_value=users)

        mock_sessions(mocker, session_dict)
        response = client.get(url_for('main.admin_users'),
                              follow_redirects=True)

        assert response.status_code == 200

        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')

        user_col = page.select('.row .col-2')
        assert not user_col
Exemplo n.º 2
0
    def it_does_not_log_in_email_in_wrong_domain(self, client, mocker):
        mock_oauth2session(mocker, url_for('main.callback'), 'test@invalid_domain.com')

        session_dict = {
            'oauth_state': 'state'
        }
        mock_sessions(mocker, session_dict)

        class MockResponse:
            status_code = 400

            def json(self):
                return {'message': 'test@invalid_domain.com not in correct domain'}

        class MockException:
            response = MockResponse()

        e = HTTPError.create(MockException())

        mocker.patch('app.main.views.os.environ', {})
        mocker.patch('app.main.views.api_client.get_user', return_value=None)
        mocker.patch('app.main.views.api_client.create_user', side_effect=e)

        response = client.get(url_for(
            'main.callback'
        ))

        assert response.status_code == 200
        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
        err_message = page.select_one('.col-sm')
        assert err_message.text.strip() == 'test@invalid_domain.com not in correct domain, '\
            'please contact the website administrators to get an email in correct domain'
Exemplo n.º 3
0
    def it_restricts_areas_for_non_admin(self, client, mocker, areas):
        session_dict = {
            'user': {
                'access_area': areas
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [
            {
                'access_area': areas
            }
        ]
        mock_sessions(mocker, session_dict)
        mocker.patch('app.api_client.get_users', return_value=users)

        response = client.get(url_for(
            'main.admin'
        ), follow_redirects=True)

        assert response.status_code == 200

        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')

        _areas = page.select('#content .row div')
        areas = [
            "{}".format("Events / Attendance" if a == 'event' else a.capitalize() + 's')
            for a in areas.split(',') if a
        ]
        assert len(_areas) == len(areas)

        area_strs = [a.text.strip() for a in _areas]
        assert set(area_strs) == set(areas)
Exemplo n.º 4
0
    def it_shows_all_areas_for_admin(self, client, mocker, access_areas):
        session_dict = {
            'user': {
                'access_area': 'admin'
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [
            {
                'access_area': 'admin'
            }
        ]
        mock_sessions(mocker, session_dict)
        mocker.patch('app.api_client.get_users', return_value=users)

        response = client.get(url_for(
            'main.admin'
        ), follow_redirects=True)

        assert response.status_code == 200

        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')

        areas = page.select('#content .row div')
        assert len(areas) == 8

        area_strs = [a.text.strip() for a in areas]
        assert set(access_areas) == set(area_strs)
    def it_redirects_to_google_auth(self, client, mocker):
        mock_oauth2session(mocker, 'http://auth_url')

        mock_sessions(mocker)

        response = client.get(url_for('main.admin'))
        assert response.status_code == 302
        assert response.location == 'http://auth_url'
Exemplo n.º 6
0
    def it_updates_user_access_areas(self, client, mocker):

        form_users = [{
            'user_id': {
                'data': 'test id'
            },
            'email': {
                'data': 'y'
            },
            'order': {
                'data': 'y'
            },
            'event': {
                'data': 'y'
            },
            'admin': {},
            'magazine': {
                'data': 'y'
            },
            'cache': {},
            'announcement': {},
            'article': {},
        }, {
            'user_id': {
                'data': 'test2 id'
            },
            'email': {
                'data': 'y'
            },
            'order': {},
            'admin': {},
            'event': {},
            'magazine': {
                'data': 'y'
            },
            'cache': {},
            'announcement': {},
            'article': {},
        }]

        mock_form = MockForm(form_users)

        mocker.patch('app.api_client.get_users', return_value=users)
        mock_api_client = mocker.patch(
            'app.api_client.update_user_access_area')
        mocker.patch('app.main.views.admin.admin.UserListForm',
                     return_value=mock_form)

        mock_sessions(mocker, session_dict)
        client.post(url_for('main.admin_users'))

        mock_api_client.assert_called_once_with(users[1]['id'],
                                                'event,email,order,magazine,')
Exemplo n.º 7
0
    def it_shows_some_checked_fields(self, client, mocker):
        session_dict = {
            'user': {
                'access_area': 'admin'
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [
            {
                'access_area': 'admin'
            },
            {
                'id': 'test id',
                'email': '*****@*****.**',
                'access_area': 'email,event,'
            }
        ]

        mocker.patch('app.api_client.get_users', return_value=users)

        mock_sessions(mocker, session_dict)
        response = client.get(url_for(
            'main.admin_users'
        ), follow_redirects=True)

        assert response.status_code == 200

        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')

        rows = page.select('.row')

        row = BeautifulSoup("<html>{}</html>".format(rows[1]), 'html.parser')

        email = row.select_one('.col-2')
        assert email.text.strip() == users[1]['email']

        user_id = row.select_one('.col-2 input')
        assert user_id.get('value') == users[1]['id']

        areas = row.select('.col input')

        checked_areas = [a for a in areas if a.has_attr('checked')]

        assert len(checked_areas) == 2
        assert checked_areas[0].get('name') == 'users-0-event'
        assert checked_areas[1].get('name') == 'users-0-email'
    def it_stores_the_profile_in_session(self, client, mocker):
        mock_oauth2session(mocker, url_for('main.callback'))

        session_dict = {'oauth_state': 'state'}
        mock_sessions(mocker, session_dict)

        mocker.patch('app.main.views.os.environ', {})
        mocker.patch('app.main.views.api_client.get_user', return_value=Mock())

        response = client.get(url_for('main.callback'))
        assert response.status_code == 302
        assert session_dict['user_profile'] == {
            'name': 'test user',
            'email': '*****@*****.**'
        }
Exemplo n.º 9
0
    def it_shows_multiple_users_to_manage(self, client, mocker):
        session_dict = {
            'user': {
                'access_area': 'admin'
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [
            {
                'access_area': 'admin'
            },
            {
                'id': 'test id',
                'email': '*****@*****.**',
                'access_area': 'email,event,'
            },
            {
                'id': 'test2 id',
                'email': '*****@*****.**',
                'access_area': 'email,report,'
            }
        ]

        mocker.patch('app.api_client.get_users', return_value=users)

        mock_sessions(mocker, session_dict)
        response = client.get(url_for(
            'main.admin_users'
        ), follow_redirects=True)

        assert response.status_code == 200

        page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')

        rows = page.select('.row')

        row = BeautifulSoup("<html>{}{}</html>".format(rows[1], rows[2]), 'html.parser')

        emails = row.select('.col-2')
        assert emails[0].text.strip() == users[1]['email']
        assert emails[1].text.strip() == users[2]['email']

        user_ids = row.select('.col-2 input')
        assert user_ids[0].get('value') == users[1]['id']
        assert user_ids[1].get('value') == users[2]['id']
Exemplo n.º 10
0
    def it_does_not_update_if_unchanged(self, client, mocker):
        session_dict = {
            'user': {
                'access_area': 'email,'
            },
            'user_profile': {
                'name': 'test name',
                'email': '*****@*****.**'
            }
        }
        users = [{
            'access_area': 'admin'
        }, {
            'id': 'test id',
            'email': '*****@*****.**',
            'access_area': 'event,email,'
        }, {
            'id': 'test2 id',
            'email': '*****@*****.**',
            'access_area': 'email,magazine,'
        }]

        form_users = [{
            'user_id': {
                'data': 'test id'
            },
            'email': {
                'data': 'y'
            },
            'event': {
                'data': 'y'
            },
            'admin': {},
            'magazine': {},
            'shop': {},
            'announcement': {},
            'article': {},
        }, {
            'user_id': {
                'data': 'test2 id'
            },
            'email': {
                'data': 'y'
            },
            'admin': {},
            'event': {},
            'magazine': {
                'data': 'y'
            },
            'shop': {},
            'announcement': {},
            'article': {},
        }]

        mock_form = MockForm(form_users)

        mocker.patch('app.api_client.get_users', return_value=users)
        mock_api_client = mocker.patch(
            'app.api_client.update_user_access_area')
        mocker.patch('app.main.views.admin.admin.UserListForm',
                     return_value=mock_form)

        mock_sessions(mocker, session_dict)
        client.post(url_for('main.admin_users'))

        mock_api_client.assert_not_called()