示例#1
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])
示例#2
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)
示例#3
0
    def setup_reporting_periods(self):
        self.reporting_period1 = ReportingPeriod(
            title="test 1",
            form_xpath="jan_2015feb_2015",
            start_date=datetime.date(2015, 1, 1),
            end_date=datetime.date(2015, 2, 1))
        self.reporting_period2 = ReportingPeriod(
            title="test 2",
            form_xpath="feb_2015mar_2015",
            start_date=datetime.date(2015, 2, 1),
            end_date=datetime.date(2015, 3, 1))
        self.reporting_period3 = ReportingPeriod(
            title="test 3",
            form_xpath="apr_2015may_2015",
            start_date=datetime.date(2015, 4, 1),
            end_date=datetime.date(2015, 5, 1))
        self.reporting_period_v3 = ReportingPeriod(
            title="test 4",
            form_xpath="2017",
            start_date=datetime.date(2017, 1, 1),
            end_date=datetime.date(2017, 12, 31))

        DBSession.add_all([self.reporting_period1,
                           self.reporting_period2,
                           self.reporting_period3,
                           self.reporting_period_v3])
示例#4
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)
示例#5
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)
示例#6
0
def get_period_from_request(request):
    try:
        period = ReportingPeriod.get(
            ReportingPeriod.id == request.GET.get('period', 0))
    except NoResultFound:
        period = ReportingPeriod.get_current_period()

    return period
示例#7
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)
示例#8
0
    def show(self):
        period = self.request.context
        clinic = period.__parent__

        # if clinic is not assigned, throw a bad request
        # if not clinic.is_assigned:
        #     raise HTTPBadRequest("The clinic is not yet assigned")

        scores = clinic.get_scores(period.form_xpath)

        return {
            'period':
            period,
            'periods':
            ReportingPeriod.get_active_periods(),
            'clinic':
            clinic,
            'characteristics':
            tuple_to_dict_list(("id", "description", "number"),
                               constants.CHARACTERISTICS),
            'client_tools':
            tuple_to_dict_list(("id", "name"), constants.CLIENT_TOOLS),
            'recommended_sample_frame':
            constants.RECOMMENDED_SAMPLE_FRAMES,
            'key_indicators':
            constants.KEY_INDICATORS,
            'scores':
            scores
        }
示例#9
0
    def assess_clinics(self):
        user = self.request.user
        clinics = []

        if user.location:
            clinics = user.location.clinics

        period = get_period_from_request(self.request)

        sample_frames = {}

        client_tools = {}

        _dict = {
            '2017':
            (constants.RECOMMENDED_SAMPLE_FRAMES, constants.CLIENT_TOOLS)
        }

        sample_frames, client_tools_cont = _dict.get(
            period.form_xpath, (constants.RECOMMENDED_SAMPLE_FRAMES_V2,
                                constants.CLIENT_TOOLS_V2))

        client_tools = tuple_to_dict_list(("id", "name"), client_tools_cont)

        return {
            'clinics': clinics,
            'period': period,
            'periods': ReportingPeriod.get_active_periods(),
            'client_tools': client_tools,
            'recommended_sample_frame': sample_frames,
        }
示例#10
0
    def test_clinic_report_is_generated_if_none_existent_v3(self):
        count = ClinicReport.count()
        clinic = Clinic.get(Clinic.id == 4)
        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 2017')

        ClinicReport.get_or_generate(clinic, period)

        self.assertEqual(ClinicReport.count(), count + 1)
示例#11
0
 def test_clinic_show_allows_owner(self):
     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_user('manager_a')
     response = self.testapp.get(url, headers=headers)
     self.assertEqual(response.status_code, 200)
示例#12
0
    def test_get_period_submissions(self):
        self.setup_test_data()
        self.create_submissions()
        clinic = Clinic.get(Clinic.name == 'Clinic A')
        period = ReportingPeriod.get(ReportingPeriod.title == "Period 1")

        submissions = clinic.get_period_clinic_submissions(period.form_xpath)
        self.assertEqual(len(submissions), 50)
示例#13
0
 def test_characteristics_returns_200(self):
     clinic = Clinic.get(Clinic.name == "Clinic A")
     period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
     url = self.request.route_path('clinics',
                                   traverse=(clinic.id, period.id,
                                             'characteristics'))
     headers = self._login_user('super')
     response = self.testapp.get(url, headers=headers)
     self.assertEqual(response.status_code, 200)
示例#14
0
def push_report_periods(request):
    header = ['reporting_period']
    rows = []

    reporting_periods = ReportingPeriod.get_active_periods()

    [rows.append([period.form_xpath]) for period in reporting_periods]

    return {'header': header, 'rows': rows}
示例#15
0
 def test_render_unauthorized_when_forbidden_and_authenticated(self):
     # TODO: move setup_test_data call to setUp
     self.setup_test_data()
     self._create_user('john')
     clinic = Clinic.get(Clinic.name == "Clinic A")
     period = ReportingPeriod.get(ReportingPeriod.title == "Period 1")
     url = self.request.route_url('clinics',
                                  traverse=(clinic.id, period.id))
     headers = self._login_user('john')
     response = self.testapp.get(url, headers=headers, status=403)
     self.assertEqual(response.status_code, 403)
示例#16
0
 def __getitem__(self, item):
     # retrieve the reporting period
     try:
         period_id = int(item)
         period = ReportingPeriod.get(ReportingPeriod.id == period_id)
     except (ValueError, NoResultFound):
         raise KeyError
     else:
         period.__parent__ = self
         period.__name__ = item
         return period
示例#17
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)
示例#18
0
def setup_default_reporting_period():
    title = 'Dev Period'
    params = {
        "title": title,
        "start_date": datetime.datetime(2014, 11, 5),
        "end_date": datetime.datetime(2014, 11, 30)
    }
    reporting_period = ReportingPeriod.get_or_create(
        ReportingPeriod.title == title,
        **params)

    reporting_period.save()
示例#19
0
 def test_show(self):
     period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
     clinic = Clinic.get(Clinic.id == 1)
     period.__parent__ = clinic
     self.request.context = period
     response = self.clinic_views.show()
     self.assertIsInstance(response['clinic'], Clinic)
     self.assertEqual(response['clinic'].id, clinic.id)
     self.assertIn('client_tools', response)
     self.assertEqual(
         response['characteristics'],
         tuple_to_dict_list(("id", "description", "number"),
                            constants.CHARACTERISTICS))
示例#20
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)
示例#21
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()}
示例#22
0
    def test_select_characteristics(self):
        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic = Clinic.get(Clinic.id == 1)
        period.__parent__ = clinic

        self.request.context = period
        params = MultiDict([('characteristic_id', 'one'),
                            ('characteristic_id', 'two'),
                            ('characteristic_id', 'three')])

        self.request.POST = params
        response = self.clinic_views.select_characteristics()
        self.assertIsInstance(response, HTTPFound)
        self.assertEqual(
            response.location,
            self.request.route_url('clinics', traverse=(clinic.id, period.id)))
示例#23
0
    def test_characteristics_list_with_characteristic_type_filter(self):
        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic = Clinic.get(Clinic.id == 1)
        period.__parent__ = clinic
        self.request.context = period
        params = MultiDict({'char_type': 'equitable'})
        self.request.GET = params

        response = self.clinic_views.characteristics_list()

        self.assertIsInstance(response['period'], ReportingPeriod)
        self.assertIsInstance(response['clinic'], Clinic)
        self.assertEqual(response['clinic'].id, clinic.id)
        self.assertEqual(len(response['characteristics']), 3),
        self.assertEqual(response['indicator_labels'],
                         dict(constants.INDICATOR_LABELS)),
        self.assertEqual(response['characteristic_indicator_mapping'],
                         constants.CHARACTERISTIC_INDICATOR_MAPPING)
示例#24
0
    def test_characteristics_list(self):
        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic = Clinic.get(Clinic.id == 1)
        period.__parent__ = clinic

        self.request.context = period
        response = self.clinic_views.characteristics_list()

        self.assertIsInstance(response['period'], ReportingPeriod)
        self.assertIsInstance(response['clinic'], Clinic)
        self.assertEqual(response['clinic'].id, clinic.id)
        self.assertEqual(
            response['characteristics'],
            tuple_to_dict_list(("id", "description", "number"),
                               constants.CHARACTERISTICS)),
        self.assertEqual(response['indicator_labels'],
                         dict(constants.INDICATOR_LABELS)),
        self.assertEqual(response['characteristic_indicator_mapping'],
                         constants.CHARACTERISTIC_INDICATOR_MAPPING)
示例#25
0
 def __init__(self, request):
     self.request = request
     self.period = get_period_from_request(request)
     self.periods = ReportingPeriod.get_active_periods()
     self.key_indicators_key_labels = constants.INDICATOR_LABELS
示例#26
0
 def test_get_active_period_when_month_is_jan(self):
     with patch('whoahqa.models.reporting_period.get_current_date') as mock:
         mock.return_value = datetime.date(2017, 7, 10)
         active_periods = ReportingPeriod.get_active_periods()
         self.assertEqual(len(active_periods), 4)
         self.assertIn(self.reporting_period_v3, active_periods)
示例#27
0
    def test_push_report_periods_with_data(self):
        reporting_period1 = ReportingPeriod(
            title='Period 1',
            form_xpath='2017',
            start_date=datetime.datetime(2017, 1, 1),
            end_date=datetime.datetime(2017, 12, 31))
        reporting_period2 = ReportingPeriod(
            title='Period 2',
            form_xpath='2018',
            start_date=datetime.datetime(2018, 1, 1),
            end_date=datetime.datetime(2018, 12, 31))

        reporting_period3 = ReportingPeriod(
            title='Period 3',
            form_xpath='2019',
            start_date=datetime.datetime(2019, 1, 1),
            end_date=datetime.datetime(2019, 12, 31))

        reporting_period1.save()
        reporting_period2.save()
        reporting_period3.save()

        response = push_report_periods(self.request)
        self.assertEqual(3, len(response['rows']))
        self.assertEqual(['2017'], response['rows'][0])
        self.assertEqual(['2018'], response['rows'][1])
        self.assertEqual(['2019'], response['rows'][2])
示例#28
0
 def select_reporting_period(self):
     user = self.request.context
     periods = ReportingPeriod.all()
     url_target = self.request.GET.get('came_from')
     return {'periods': periods, 'user': user, 'url_target': url_target}
示例#29
0
 def list(self):
     # This lists all periods including those in the future
     periods = ReportingPeriod.all()
     return {'periods': periods, 'period': self.period}
示例#30
0
    def create_clinic_report_v3(self):
        clinic = Clinic.get(Clinic.id == 4)
        period = ReportingPeriod.get(ReportingPeriod.title == 'Period 2017')

        with transaction.manager:
            ClinicReport.get_or_generate(clinic, period)