示例#1
0
 def test_newest_returns_newest_record_by_id_desc(self):
     user1 = User(id=1)
     user2 = User(id=2)
     with transaction.manager:
         DBSession.add_all([user1, user2])
     user = User.newest()
     self.assertEqual(user.id, 2)
示例#2
0
    def register(self):
        form = Form(RegistrationForm().bind(request=self.request),
                    buttons=('Save', ))

        if self.request.method == 'POST':
            data = self.request.POST.items()

            try:
                values = form.validate(data)

            except ValidationFailure:
                self.request.session.flash(
                    _(u"Please fix the highlighted errors below"), "error")

            else:
                try:
                    new_user = User()
                    new_user.update(values)

                    self.request.session.flash(
                        _(u"Success! {} user created".format(
                            new_user.profile.username)), 'success')

                    return HTTPFound(
                        self.request.route_url('admin',
                                               traverse=(new_user.id, 'edit')))

                except IntegrityError:
                    transaction.abort()
                    self.request.session.flash(_("Username already in use"),
                                               "error")

        return {'form': form, 'period': get_period_from_request(self.request)}
示例#3
0
def main(argv=sys.argv):
    if len(argv) != 5:
        usage(argv)
    config_uri = argv[1]
    setup_logging(config_uri)
    pwd_context.load_path(config_uri)
    settings = get_appsettings(config_uri)
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    username = argv[2]
    password = argv[3]
    group = argv[4]
    with transaction.manager:
        group_criteria = Group.name == group
        group_params = {'name': group}
        group = Group.get_or_create(
            group_criteria,
            **group_params)

        user = User()
        user.group = group
        profile = UserProfile(
            user=user, username=username, password=password)
        ona_user_params = {
            'user': user,
            'username': username,
            'refresh_token': 'test'}
        ona_user = OnaUser.get_or_create(
            OnaUser.username == username,
            **ona_user_params)
        DBSession.add_all([user, profile, ona_user])
示例#4
0
    def setUp(self):
        super(TestStateViewsFunctional, self).setUp()

        with transaction.manager:
            state = State(name="Sao Paolo")
            municipality1 = Municipality(name="Brasillia", parent=state)
            municipality2 = Municipality(name="Brasil", parent=state)

            user_group = Group(name="state_official")
            user = User()
            user.group = user_group
            user.location = state

            ona_user = OnaUser(username="******",
                               user=user,
                               refresh_token="1239khyackas")

            ona_user.save()

            reporting_period = ReportingPeriod(
                title='Period 1',
                start_date=datetime.datetime(2015, 5, 1),
                end_date=datetime.datetime(2015, 7, 31))

            reporting_period.save()
            DBSession.add_all([state, municipality1, municipality2])
示例#5
0
def setup_users():
    group_criteria = Group.name == groups.SUPER_USER
    group_params = {'name': groups.SUPER_USER}
    su_group = Group.get_or_create(
        group_criteria,
        **group_params)

    su = User()
    user_profile_criteria = UserProfile.username == 'admin'
    user_profile_params = {
        'user': su,
        'username': '******',
        'password': '******'}

    profile = UserProfile.get_or_create(
        user_profile_criteria,
        **user_profile_params)

    ona_user_params = {
        'user': su,
        'username': '******',
        'refresh_token': '123456'}
    ona_user = OnaUser.get_or_create(
        OnaUser.username == "admin",
        **ona_user_params)

    su.group = su_group
    profile.save()
    ona_user.save()
示例#6
0
    def test_get_item_returns_user_if_id_exists(self):
        self.setup_test_data()
        user = User.newest()

        request = testing.DummyRequest()
        user = UserFactory(request).__getitem__(user.id)
        self.assertIsInstance(user, User)
示例#7
0
 def test_password_login_with_bad_password(self):
     profile = UserProfile(user=User(), username="******", password="******")
     DBSession.add(profile)
     payload = MultiDict([('username', 'admin'), ('password', 'adminn0t')])
     request = testing.DummyRequest(post=payload)
     response = password_login(None, request)
     self.assertIsInstance(response, dict)
     self.assertTrue(len(request.session.peek_flash('error')) > 0)
示例#8
0
    def test_create_clinic_from_submission(self):
        # create user with matching id
        DBSession.add(User())
        user = User.newest()

        payload = self.clinic_registrations[0]
        raw_data = json.loads(payload)
        raw_data[constants.USER_ID] = user.id
        submission = Submission(raw_data=raw_data)
        count = Clinic.count()
        ClinicRegistrationHandler(submission).handle_submission()

        # check that a clinic_submission record was created
        self.assertEqual(Clinic.count(), count + 1)

        clinic = Clinic.newest()
        self.assertEqual(clinic.code, '1A2B')
示例#9
0
 def test_password_login(self):
     # create the user profile
     profile = UserProfile(user=User(), username="******", password="******")
     DBSession.add(profile)
     payload = MultiDict([('username', 'admin'), ('password', 'admin')])
     request = testing.DummyRequest(post=payload)
     response = password_login(None, request)
     self.assertEqual(response.status_code, 302)
     self.assertEqual(response.location, request.route_url('default'))
示例#10
0
    def test_can_register_new_clinic_users(self):
        ona_user = OnaUser.get(OnaUser.username == 'manager_a')
        user = ona_user.user
        old_user_count = User.count()
        self.request.context = user

        self.request.method = 'POST'
        params = MultiDict({'email': "*****@*****.**",
                            'username': "******",
                            'password': {'password': '******',
                                         'password-confirm': 'password'},
                            'group': groups.CLINIC_MANAGER,
                            'clinics': ['1']})
        self.request.POST = params

        response = self.view.register()
        self.assertEqual(User.count(), old_user_count + 1)
        self.assertEqual(response.status_code, 302)
示例#11
0
 def test_dashboard_user_logout(self):
     dashboard_user = UserProfile(user=User(),
                                  username="******",
                                  password="******")
     request = testing.DummyRequest()
     request.context = dashboard_user.user
     request.user = dashboard_user.user
     response = logout(request)
     self.assertIsInstance(response, HTTPFound)
     self.assertEqual(response.location,
                      request.route_url('auth', action='sign-in'))
示例#12
0
    def test_can_register_new_state_users(self):
        self._create_state()
        ona_user = OnaUser.get(OnaUser.username == 'manager_a')
        user = ona_user.user
        old_user_count = User.count()
        state = State.newest()
        self.request.context = user

        self.request.method = 'POST'
        params = MultiDict({'email': "*****@*****.**",
                            'username': "******",
                            'password': {'password': '******',
                                         'password-confirm': 'password'},
                            'group': groups.STATE_OFFICIAL,
                            'state': "{}".format(state.id)})
        self.request.POST = params

        response = self.view.register()
        self.assertEqual(User.count(), old_user_count + 1)
        self.assertEqual(response.status_code, 302)
示例#13
0
    def test_can_register_new_municipality_users(self):
        self._create_municipality()
        ona_user = OnaUser.get(OnaUser.username == 'manager_a')
        user = ona_user.user
        old_user_count = User.count()
        municipality = Municipality.newest()
        self.request.context = user

        self.request.method = 'POST'
        params = MultiDict({'email': "*****@*****.**",
                            'username': "******",
                            'password': {'password': '******',
                                         'password-confirm': 'password'},
                            'group': groups.MUNICIPALITY_MANAGER,
                            'municipality': "{}".format(municipality.id)})
        self.request.POST = params

        response = self.view.register()
        self.assertEqual(User.count(), old_user_count + 1)
        self.assertEqual(response.status_code, 302)
示例#14
0
    def test_national_official_can_view_clinics(self):
        self._create_dash_user("national", "national", "*****@*****.**",
                               groups.NATIONAL_OFFICIAL)
        user = User.newest()

        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic = Clinic.get(Clinic.name == "Clinic A")
        url = self.request.route_path('clinics',
                                      traverse=(clinic.id, period.id))
        headers = self._login_dashboard_user(user)
        response = self.testapp.get(url, headers=headers)
        self.assertEqual(response.status_code, 200)
示例#15
0
 def test_get_item_returns_reporting_period(self):
     self.setup_test_data()
     period = ReportingPeriod(title="2013/2014",
                              start_date=datetime.datetime(2013, 3, 13),
                              end_date=datetime.datetime(2014, 3, 13))
     DBSession.add(period)
     DBSession.flush()
     period = ReportingPeriod.newest()
     user = User.newest()
     selected_period = user.__getitem__(period.id)
     self.assertIsInstance(selected_period, ReportingPeriod)
     self.assertEqual(selected_period, period)
示例#16
0
def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)
    config_uri = argv[1]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.create_all(engine)
    with transaction.manager:
        user = User()
        DBSession.add_all([user])
示例#17
0
    def test_national_official_can_list_states(self):
        self._create_dash_user("national", "national", "*****@*****.**",
                               groups.NATIONAL_OFFICIAL)
        user = User.newest()

        url = self.request.route_path('states', traverse=())
        headers = self._login_dashboard_user(user)

        with patch('whoahqa.models.reporting_period.get_current_date') as mock:
            mock.return_value = datetime.date(2015, 6, 1)
            response = self.testapp.get(url, headers=headers)
            self.assertEqual(response.status_code, 200)
示例#18
0
    def test_add_clinics_to_user(self):
        self.setup_test_data()
        user = User()
        ona_user = OnaUser(
            user=user, username='******', refresh_token="c563e9")

        values = {'group': groups.CLINIC_MANAGER,
                  'clinics': ["1", "2", "3"]}

        ona_user.update(values)

        self.assertEqual(len(ona_user.user.clinics), 3)
示例#19
0
    def test_update_new_user_group(self):
        user = User()
        ona_user = OnaUser(
            user=user, username='******', refresh_token="c563e9")

        self._create_municipality('Brazlandia')
        municipality = Municipality.get(Municipality.name == 'Brazlandia')

        values = {'group': groups.MUNICIPALITY_MANAGER,
                  'municipality': municipality.id}

        ona_user.update(values)

        self.assertEqual(ona_user.user.group.name, groups.MUNICIPALITY_MANAGER)
        self.assertEqual(ona_user.user.location, municipality)
示例#20
0
def group_finder(userid, request):
    from whoahqa.models import User

    principals = []
    principals.append("u:{}".format(userid))
    try:
        user = User.get(User.id == userid)
    except NoResultFound:
        return None
    else:
        if user.group:
            principals.append(user.group.name)
            principals.extend(GROUP_PERMISSIONS.get(user.group.name, []))

        return principals
示例#21
0
    def test_redirects_to_states_for_national_official(self):
        self.setup_test_data()
        self._create_dash_user("national", "national", "*****@*****.**",
                               groups.NATIONAL_OFFICIAL)
        user = User.newest()

        url = self.request.route_url('default')
        headers = self._login_dashboard_user(user)
        response = self.testapp.get(url, headers=headers)

        period = get_period_from_request(self.request)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(
            self.request.route_url('states',
                                   traverse=(),
                                   _query={'period': period.id}),
            response.location)
示例#22
0
    def handle_submission(self):
        from whoahqa.models import User

        map_data = ClinicRegistrationHandler.parse_data(
            self.submission.raw_data)
        clinic = Clinic(name=map_data['clinic_name'],
                        code=map_data['clinic_code'])

        # check is user exists
        user = None
        try:
            user = User.get(User.id == map_data['user_id'])
        except NoResultFound:
            pass
        else:
            clinic.user = user
        finally:
            clinic.save()

        # if no user, raise UserNotFound
        if user is None:
            raise UserNotFound("User with id {} was not found".format(
                map_data['user_id']))
示例#23
0
 def test_password_property_returns_raw_password(self):
     profile = UserProfile(user=User(), username="******", password="******")
     self.assertEqual(profile.password, profile.pwd)
示例#24
0
 def test_check_password_returns_false_if_len_greater_than_255(self):
     profile = UserProfile(user=User(), username="******", password="******")
     self.assertFalse(profile.check_password('a' * 256))
示例#25
0
 def test_check_password(self):
     profile = UserProfile(user=User(), username="******", password="******")
     self.assertTrue(profile.check_password('admin'))
示例#26
0
 def test_set_password(self):
     profile = UserProfile(user=User(), username="******", password="******")
     self.assertTrue(pwd_context.verify('admin', profile.pwd))
示例#27
0
    def list(self):
        users = User.all()
        period = get_period_from_request(self.request)

        return {'users': users, 'period': period}
示例#28
0
 def test_get_returns_record_filtered_by_criterion(self):
     user = User(id=1)
     with transaction.manager:
         DBSession.add(user)
     user = User.get(User.id == 1)
     self.assertIsInstance(user, User)
示例#29
0
def get_request_user(request):
    user_id = request.authenticated_userid
    try:
        return User.get(User.id == user_id)
    except NoResultFound:
        return None
示例#30
0
 def test_raise_key_error_when_invalid_period_id(self):
     self.setup_test_data()
     user = User.newest()
     self.assertRaises(KeyError, user.__getitem__, "abc")