Esempio n. 1
0
    def test_get_active_characteristics_filters_by_period(self):
        self.setup_test_data()
        period_1 = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic_a = Clinic.get(Clinic.name == 'Clinic A')
        period2 = ReportingPeriod(
            title='Period 2',
            start_date=datetime.datetime(2014, 1, 1),
            end_date=datetime.datetime(2014, 1, 1))

        DBSession.add(period2)
        DBSession.flush()
        clinic_char1 = ClinicCharacteristics(
            clinic_id=clinic_a.id,
            characteristic_id='one',
            period_id=period_1.id)

        clinic_char2 = ClinicCharacteristics(
            clinic_id=clinic_a.id,
            characteristic_id='one',
            period_id=period2.id)

        DBSession.add_all([clinic_char1, clinic_char2])

        characteristics = clinic_a.get_active_characteristics(period_1)

        self.assertEqual(len(characteristics), 1)
Esempio n. 2
0
    def setUp(self):
        super(TestMunicipalityViews, self).setUp()
        self.request = testing.DummyRequest()
        self._create_user('municipality-manager')

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

            reporting_period.save()

            municipality = Municipality(name="Brasillia")
            DBSession.add(municipality)
            for i in range(5):
                clinic = Clinic(name="Clinic {}".format(i),
                                code="{}BCDE".format(i),
                                municipality=municipality)
                DBSession.add(clinic)

        self.request.user = OnaUser.get(
            OnaUser.username == 'municipality-manager').user

        self.view = MunicipalityViews(self.request)
Esempio n. 3
0
    def setUp(self):
        super(TestStateViews, self).setUp()
        self.request = testing.DummyRequest()
        self._create_user('state-official')

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

            reporting_period.save()
            state = State(name="Sao Paolo")
            municipality1 = Municipality(name="Brasillia", parent=state)
            municipality2 = Municipality(name="Brasil", parent=state)
            DBSession.add_all([state, municipality1, municipality2])
            for i in range(5):
                clinic = Clinic(name="Clinic {}".format(i),
                                code="{}BCDE".format(i),
                                municipality=municipality1)
                DBSession.add(clinic)

        self.request.user = OnaUser.get(
            OnaUser.username == 'state-official').user

        self.view = StateViews(self.request)
Esempio n. 4
0
    def test_json_post_with_valid_clinic_id(self):
        clinic = Clinic(code='1A2B', name="Clinic A")
        DBSession.add(clinic)
        response = self.post_json(self.submissions[0])

        # should return a 201 response code
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.body, 'Saved')
Esempio n. 5
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)
Esempio n. 6
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'))
Esempio n. 7
0
    def test_json_post_with_invalid_clinic_id(self):
        clinic = Clinic(code='1A2B', name="Clinic A")
        DBSession.add(clinic)
        response = self.post_json(self.submissions[5])

        # should return a 202 response code
        self.assertEqual(response.status_code, 202)
        self.assertEqual(response.body,
                         'Accepted pending manual matching process')
Esempio n. 8
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)
Esempio n. 9
0
    def test_save_submission_with_valid_clinic_id(self):
        # create clinic with matching id
        clinic_code = "1A2B"
        clinic = Clinic(code=clinic_code, name="Clinic A")
        DBSession.add(clinic)

        payload = self.submissions[0]
        submission = Submission(raw_data=json.loads(payload))
        count = ClinicSubmission.count()
        ClinicReportHandler(submission).handle_submission()

        # check that a clinic_submission record was created
        self.assertEqual(ClinicSubmission.count(), count + 17)
Esempio n. 10
0
    def test_get_item_retrieves_by_id(self):
        period = ReportingPeriod(title="2014/2015",
                                 start_date=datetime.date(2014, 2, 1),
                                 end_date=datetime.date(2015, 2, 1))
        DBSession.add(period)
        DBSession.flush()
        id = period.id

        factory = ReportingPeriodFactory(testing.DummyRequest())
        period = factory.__getitem__(id)
        self.assertEqual(period.id, id)
        self.assertEqual(period.__parent__, factory)
        self.assertEqual(period.__name__, id)
Esempio n. 11
0
    def test_save_submission_with_multiple_characteristics(self):
        # create clinic with matching id
        clinic_code = "1A2B"
        clinic = Clinic(code=clinic_code, name="Clinic A")
        DBSession.add(clinic)

        # check current counts
        count = ClinicSubmission.count()
        payload = self.submissions[2]
        submission = Submission(raw_data=json.loads(payload))
        ClinicReportHandler(submission).handle_submission()

        # check that 17 clinic_submission record was created
        self.assertEqual(ClinicSubmission.count(), count + 17)
Esempio n. 12
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')
Esempio n. 13
0
    def test_create_submission_from_json(self):
        # create clinic with matching id
        clinic_code = "1A2B"
        clinic = Clinic(code=clinic_code, name="Clinic A")
        DBSession.add(clinic)

        # check current counts
        count = Submission.count()
        clinic_submission_count = ClinicSubmission.count()
        payload = self.submissions[0]
        Submission.create_from_json(payload)
        submission = Submission.newest()
        self.assertEqual(Submission.count(), count + 1)
        self.assertEqual(submission.raw_data, json.loads(payload))

        # check that a clinic_submission record was created
        self.assertEqual(ClinicSubmission.count(),
                         clinic_submission_count + 17)
Esempio n. 14
0
    def test_check_if_submission_exists(self):
        # create a clinic with matching id
        clinic_code = "1A2B"
        clinic = Clinic(code=clinic_code, name="Clinic A")
        DBSession.add(clinic)

        # check current counts
        count = Submission.count()
        clinic_submission_count = ClinicSubmission.count()
        _submission = self.submissions[1]

        if type(_submission) is not dict:
            payload = json.loads(_submission)

        if Submission.exists(payload):
            submission = Submission.newest()
            self.assertEqual(Submission.count(), count)
            self.assertEqual(ClinicSubmission.count(), clinic_submission_count)
            self.assertIsInstance(submission, Submission)
Esempio n. 15
0
    def get_or_create_from_api_data(cls, user_data, refresh_token):
        username = user_data.get('username', "")
        if username is None or (not username.strip()):
            raise ValueError("Invalid user profile data")

        username = user_data['username']
        try:
            ona_user = OnaUser.get(OnaUser.username == username)
            ona_user.refresh_token = refresh_token
        except NoResultFound:
            # By Default, all new users are in the user group
            group_criteria = Group.name == groups.USER
            group_params = {'name': groups.USER}
            user_group = Group.get_or_create(group_criteria, **group_params)

            user = User()
            user.group = user_group
            ona_user = OnaUser(username=username, refresh_token=refresh_token)
            ona_user.user = user
        DBSession.add(ona_user)
        return ona_user
Esempio n. 16
0
    def create_from_json(cls, payload):
        # TODO: check for and handle json.loads parse errors
        if type(payload) is not dict:
            payload = json.loads(payload)

        submission = None

        if payload.get(constants.DEPRECATED_ID, None):
            # add or update existing submission
            try:
                submission = Submission.get(
                    Submission.raw_data[constants.INSTANCE_ID].astext ==
                    payload[constants.DEPRECATED_ID])

                submission.raw_data = payload
                DBSession.add(submission)
            except NoResultFound:
                submission = Submission(raw_data=payload)
                DBSession.add(submission)

        elif not Submission.exists(payload):
            submission = Submission(raw_data=payload)
            DBSession.add(submission)

        handler_class = determine_handler_class(
            submission, cls.HANDLER_TO_XFORMS_MAPPING)
        handler_class(submission).handle_submission()

        return submission
Esempio n. 17
0
    def create(self):
        form = Form(ReportingPeriodForm().bind(),
                    buttons=('Save', ),
                    css_class='form-horizontal')
        if self.request.method == "POST":
            post = self.request.POST.items()
            try:
                payload = form.validate(post)
            except ValidationFailure:
                pass
            else:
                if payload['form_xpath'] not in ALLOWED_XPATHS and \
                   valid_year(payload['form_xpath']) is None:
                    self.request.session.flash(
                        _(u"Only numeric values 1-5 and calendar "
                          "years (YYYY) allowed For Form Xpath"), 'error')

                elif DBSession.query(ReportingPeriod).filter_by(
                        form_xpath=payload['form_xpath']).first():
                    self.request.session.flash(_(u"Form Xpath Exists"),
                                               'error')

                else:
                    period = ReportingPeriod(title=payload['title'],
                                             form_xpath=payload['form_xpath'],
                                             start_date=payload['start_date'],
                                             end_date=payload['end_date'])
                    DBSession.add(period)
                    DBSession.flush()
                    self.request.session.flash(_(u"Reporting period created"),
                                               'success')
                    return HTTPFound(
                        self.request.route_url('periods', traverse=('list')))

        # render form
        return {'form': form, 'period': ReportingPeriod.get_current_period()}
Esempio n. 18
0
def import_health_data():
    file_name = os.path.relpath('whoahqa/data/clinics.csv')
    with open(file_name, 'rU') as source:
        rdr = UnicodeDictReader(source)
        existing_states = [
            normalizeString(state.name) for state in State.all()
        ]
        existing_municipalities = [
            normalizeString(municipality.name)
            for municipality in Municipality.all()
        ]
        existing_clinics = [clinic.code for clinic in Clinic.all()]

        with transaction.manager:
            for row in rdr:
                state = None
                municipality = None
                normalized_state = normalizeString(row['state'])
                normalized_municipality = normalizeString(row['municipality'])

                if normalized_state not in existing_states:
                    existing_states.append(normalized_state)
                    state = State(name=normalized_state)
                    DBSession.add(state)

                if normalized_municipality not in existing_municipalities:
                    existing_municipalities.append(normalized_municipality)

                    if state is None:
                        state = State.get(State.name == normalized_state)

                    municipality = Municipality(name=normalized_municipality,
                                                parent=state)
                    DBSession.add(municipality)

                if row['CNES'] not in existing_clinics:
                    # import ipdb; ipdb.set_trace()
                    existing_clinics.append(row['CNES'])

                    if municipality is None:
                        municipality = Municipality.get(
                            Municipality.name == normalized_municipality)

                    clinic = Clinic(name=row['facility_name'],
                                    code=row['CNES'],
                                    municipality=municipality)
                    DBSession.add(clinic)
Esempio n. 19
0
 def assign_to(self, user):
     self.user = user
     DBSession.add(self)
Esempio n. 20
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)
Esempio n. 21
0
 def activate_characteristic(self, characteristic_id, period_id):
     clinic_characteristic = ClinicCharacteristics(
         clinic_id=self.id,
         characteristic_id=characteristic_id,
         period_id=period_id)
     DBSession.add(clinic_characteristic)