Пример #1
0
    def test_latest_query(self):
        """ Test the latest query"""
        db_util.insert_cases(self.db_session, "latest_test")
        start_date = datetime(2017, 1, 1)
        end_date = datetime(2017, 1, 12)
        result = data_query.latest_query(self.db, "test_2", "test_1", start_date,
                                         end_date, 1)

        self.assertEqual(result["total"], 7)
        self.assertEqual(result["clinic"][7], 7)
        self.assertEqual(result["clinic"][8], 0)
        self.assertEqual(result["district"][4], 7)
        self.assertEqual(result["region"][2], 7)
        start_date = datetime(2017, 1, 1)
        end_date = datetime(2017, 1, 8) # Exclude the last record
        result = data_query.latest_query(self.db, "test_2", "test_1", start_date,
                                         end_date, 1)
        self.assertEqual(result["total"], 12)
        self.assertEqual(result["clinic"][7], 7)
        self.assertEqual(result["clinic"][8], 5)
        self.assertEqual(result["district"][4], 12)
        self.assertEqual(result["region"][2], 12)
        start_date = datetime(2017, 1, 1)
        end_date = datetime(2017, 1, 12)
        result = data_query.latest_query(self.db, "test_2", "test_1", start_date,
                                         end_date, 1, weeks=True)

        self.assertEqual(result["total"], 12)
        self.assertEqual(result["weeks"][1], 12)
        self.assertEqual(result["weeks"][2], 0)
        self.assertEqual(result["clinic"][7]["weeks"][1], 7)
        self.assertEqual(result["clinic"][8]["weeks"][1], 5)
        self.assertEqual(result["clinic"][8]["weeks"][2], 0)
        self.assertEqual(result["district"][4]["total"], 12)
        self.assertEqual(result["region"][2]["total"], 12)
Пример #2
0
 def setUp(self):
     """Setup for testing"""
     self._mock_epi_week_abacus_logic()
     db_util.insert_codes(self.db_session)
     db_util.insert_locations(self.db_session)
     db_util.insert_cases(self.db_session, "public_health_report")
     pseudo_db = namedtuple("pseudo_db", ["session", "engine"])
     self.db = pseudo_db(session=self.db_session, engine=db_util.engine)
Пример #3
0
 def setUp(self):
     """Setup for testing"""
     meerkat_api.app.config['TESTING'] = True
     meerkat_api.app.config['API_KEY'] = ""
     self.app = meerkat_api.app.test_client()
     self.db = db_util.session
     db_util.insert_codes(self.db)
     db_util.insert_locations(self.db)
     db_util.insert_cases(self.db, "alerts")
Пример #4
0
 def setUp(self):
     """Setup for testing"""
     meerkat_api.app.config['TESTING'] = True
     meerkat_api.app.config['API_KEY'] = "should-work-even-with-api-key"
     self.app = meerkat_api.app.test_client()
     session = db_util.session
     db_util.insert_codes(session)
     db_util.insert_locations(session)
     db_util.insert_cases(session, "frontpage", "2016-07-02")
     self.session = session
Пример #5
0
    def setUp(self):
        """Setup for testing"""
        meerkat_api.app.config['TESTING'] = True
        meerkat_api.app.config['API_KEY'] = ""
        self.app = meerkat_api.app.test_client()
        session = db_util.session

        db_util.insert_codes(session)
        db_util.insert_locations(session)
        db_util.insert_cases(session, "map_test", date="2016-07-02")
Пример #6
0
    def test_non_reporting(self):
        """Check non_reporting"""
        db_util.insert_cases(self.db_session, "completeness", "2016-07-02")
        rv = self.app.get('/non_reporting/reg_1/1', headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [10, 11])
        rv = self.app.get('/non_reporting/reg_2/1', headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [7, 8, 10, 11])
        rv = self.app.get('/non_reporting/reg_1/2', headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [10])
        rv = self.app.get('/non_reporting/reg_1/4', headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [])
        rv = self.app.get('/non_reporting/reg_1/6', headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [11])

        # Test with include/exclude
        rv = self.app.get('/non_reporting/reg_1/1/0/foreigner',
                          headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [11])

        rv = self.app.get('/non_reporting/reg_1/1/0/foreigner,mh',
                          headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [])
        rv = self.app.get('/non_reporting/reg_1/1/0/0/foreigner',
                          headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [10])

        rv = self.app.get('/non_reporting/reg_1/1/0/0/foreigner,mh',
                          headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [10, 11])

        rv = self.app.get('/non_reporting/reg_2/1/0/0/0/Refugee/0',
                          headers=settings.header)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(rv.status_code, 200)
        self.assertEqual(sorted(data["clinics"]), [7, 11])
Пример #7
0
 def test_get_variable_count_for_device_id(self):
     db_util.insert_cases(self.db_session, "public_health_report")
     device_id = "1"
     variable_id = "gen_1"
     actual = DeviceResourceBase._get_variable_count_for_deivce_id(
         device_id, variable_id, [])
     expected = {
         'deviceId': device_id,
         'variable': variable_id,
         'submissionsCount': 3
     }
     self.assertEqual(expected, actual)
Пример #8
0
    def test_refugee_page(self):
        """ test the refugee page """
        db_util.insert_cases(self.session, "refugee_data")
        rv = self.app.get('/refugee_page')
        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))

        data = sorted(data, key=lambda k: k["location_id"])

        self.assertEqual(data[0]["location_id"], 7)
        self.assertEqual(data[0]["value"], 12)

        self.assertEqual(data[1]["location_id"], 11)
        self.assertEqual(data[1]["value"], 77)
Пример #9
0
    def _prepare_week_level(self, mock_authenticate, mock_request):
        self.session.query(model.Data).delete()
        self.session.commit()
        db_util.insert_cases(self.session, "completeness")
        mock_authenticate.return_value = 'meerkatjwt'

        date = datetime.datetime.today()
        start_date = datetime.datetime(date.year, 1, 1)
        end_date = datetime.datetime(date.year, 12, 31)

        rv = self.app.get(
            '/completeness/reg_1/1/4/1/5,6/reg_1/{}?sublevel=clinic'.format(
                end_date.isoformat()),
            headers={**settings.header})
        result_mock = MagicMock()
        result_mock.json = MagicMock(
            return_value=json.loads(rv.data.decode("utf-8")))
        mock_request.return_value = result_mock

        return date, start_date, end_date
Пример #10
0
    def setUp(self):
        """Setup for testing"""
        meerkat_api.app.config['TESTING'] = True
        meerkat_api.app.config['API_KEY'] = ""
        celery_app.conf.CELERY_ALWAYS_EAGER = True
        self.app = meerkat_api.app.test_client()
        self.session = db_util.session
        for table in model.form_tables():
            self.session.query(model.form_tables()[table]).delete()
        self.session.query(model.Locations).delete()

        self.session.commit()

        db_util.insert_codes(self.session)
        db_util.insert_locations(self.session)
        db_util.insert_cases(self.session, "public_health_report")
        current_directory = os.path.dirname(__file__)
        form_data = []
        for d in util.read_csv(current_directory + "/test_data/" +
                               "demo_case.csv"):
            form_data.append(d)

        data_import.add_rows_to_db(
            "demo_case",
            form_data,
            db_util.session,
            db_util.engine,
            deviceids=["1", "2", "3", "4", "5", "6"],
        )

        dr_name = config.country_config["tables"][1]
        form_data = []
        for d in util.read_csv(current_directory + "/test_data/" +
                               "demo_alert.csv"):
            form_data.append(d)
        data_import.add_rows_to_db("demo_alert",
                                   form_data,
                                   db_util.session,
                                   db_util.engine,
                                   deviceids=["1", "2", "3", "4", "5", "6"])
Пример #11
0
    def test_completness(self):
        """Test completeness"""
        db_util.insert_cases(self.db_session, "completeness", "2016-07-02")
        rv = self.app.get('completeness/reg_1/1/5', headers=settings.header)
        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(sorted(data.keys()), [
            "clinic_score", "clinic_yearly_score", "dates_not_reported",
            "score", "timeline", "yearly_score"
        ])
        self.assertEqual(data["score"]["1"], 4 / 10 * 100)
        self.assertAlmostEqual(data["score"]["2"], 4 / 10 * 100)
        self.assertEqual(data["clinic_score"]["7"], 60)
        self.assertEqual(data["clinic_score"]["8"], 20)
        today = date.today()
        today = datetime(today.year, today.month, today.day)
        freq = "W-FRI"
        epi_year_weekday = 4
        start = datetime(today.year, 1, 1)

        offset = today.weekday() - epi_year_weekday
        if offset < 0:
            offset = 7 + offset
        end = today - timedelta(days=offset + 1)
        dates = pd.date_range(start, end, freq=freq)
        dates_iso = [d.isoformat() for d in dates.to_pydatetime()]

        self.assertEqual(data["timeline"]["1"]["weeks"], dates_iso)

        self.assertEqual(data["timeline"]["1"]["values"][-1], 2)
        self.assertEqual(data["timeline"]["1"]["values"][-2], 0.5)
        self.assertAlmostEqual(data["timeline"]["2"]["values"][-1], 4 / 2)
        self.assertAlmostEqual(data["timeline"]["2"]["values"][-2], 1 / 2)

        rv = self.app.get('completeness/reg_1/4/5', headers=settings.header)
        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(data["score"]["4"], 4 / 10 * 100)
        self.assertAlmostEqual(data["score"]["7"], 60)
        self.assertEqual(data["score"]["8"], 20)

        self.assertEqual(data["timeline"]["4"]["values"][-1], 2)
        self.assertEqual(data["timeline"]["4"]["values"][-2], 0.5)
        self.assertAlmostEqual(data["timeline"]["7"]["values"][-1], 3)
        self.assertAlmostEqual(data["timeline"]["7"]["values"][-2], 1)
        self.assertAlmostEqual(data["timeline"]["8"]["values"][-1], 1)
        self.assertAlmostEqual(data["timeline"]["8"]["values"][-2], 0)
        start2 = datetime(today.year, 2, 1)
        dates2 = pd.date_range(start2, end, freq=freq)
        dates_iso2 = [d.isoformat() for d in dates2.to_pydatetime()]
        self.assertEqual(data["timeline"]["7"]["weeks"], dates_iso2)

        rv = self.app.get('completeness/reg_1/7/5', headers=settings.header)
        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(data["clinic_score"], {})
        self.assertAlmostEqual(data["score"]["7"], 60)
        self.assertAlmostEqual(data["timeline"]["7"]["values"][-1], 3)
        self.assertAlmostEqual(data["timeline"]["7"]["values"][-2], 1)

        offset = today.weekday() - start.weekday()
        if offset < 0:
            offset = 7 + offset
        record_dates = []
        for i in [1, 2, 3, 8]:
            record_dates.append(today - timedelta(days=i + offset))
        dates_to_check = pd.date_range(start2, end, freq="D")
        for d in dates_to_check.to_pydatetime():
            if d.weekday() not in [5, 6] and d not in record_dates:
                self.assertIn(d.isoformat(), data["dates_not_reported"])
        rv = self.app.get('completeness/reg_1/7/5/1/uff/4,5',
                          headers=settings.header)
        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        for d in dates_to_check.to_pydatetime():
            if d.weekday() not in [4, 5] and d not in record_dates:
                self.assertIn(d.isoformat(), data["dates_not_reported"])

        # Test with exclude and include_case_types

        rv = self.app.get('completeness/reg_1/1/5?inc_case_types=["mh"]',
                          headers=settings.header)

        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(data["score"]["1"], 3 / 5 * 100)

        self.assertNotIn("8", data["clinic_score"])
        self.assertIn("7", data["clinic_score"])
        self.assertEqual(data["clinic_score"]["7"], 60)

        rv = self.app.get('completeness/reg_1/1/5?exc_case_types=["mh"]',
                          headers=settings.header)

        self.assertEqual(rv.status_code, 200)
        data = json.loads(rv.data.decode("utf-8"))
        self.assertEqual(data["score"]["1"], 1 / 5 * 100)

        self.assertNotIn("7", data["clinic_score"])
        self.assertIn("8", data["clinic_score"])
        self.assertEqual(data["clinic_score"]["8"], 20)
Пример #12
0
 def setUp(self):
     """Setup for testing"""
     self._mock_epi_week_abacus_logic()
     db_util.insert_codes(self.db_session)
     db_util.insert_locations(self.db_session)
     db_util.insert_cases(self.db_session, "public_health_report")
Пример #13
0
    def setUp(self):
        """Setup for testing"""
        celery_app.conf.CELERY_ALWAYS_EAGER = True

        db_util.insert_calculation_parameters(self.db_session)
        db_util.insert_codes(self.db_session)
        db_util.insert_locations(self.db_session)
        db_util.insert_cases(self.db_session, "public_health_report",
                             delete=True)
        db_util.insert_cases(self.db_session,
                             "ncd_public_health_report", delete=False)
        db_util.insert_cases(self.db_session, "ncd_report",
                             delete=False)
        db_util.insert_cases(self.db_session, "pip_report",
                             delete=False)
        db_util.insert_cases(self.db_session, "refugee_data",
                             delete=False)
        db_util.insert_cases(self.db_session, "frontpage", delete=False)
        db_util.insert_cases(self.db_session, "map_test", delete=False)
        db_util.insert_cases(self.db_session, "epi_monitoring",
                             delete=False)
        db_util.insert_cases(self.db_session, "malaria", delete=False)
        db_util.insert_cases(self.db_session, "alerts", delete=False)
        db_util.insert_cases(self.db_session, "cd_report", delete=False)
        db_util.insert_cases(self.db_session, "vaccination_report",
                             delete=False)
        db_util.insert_cases(self.db_session, "completeness",
                             delete=False)
        db_util.insert_cases(self.db_session, "oms_report",
                             delete=False)
        db_util.insert_cases(self.db_session, "mental_health",
                             delete=False)
        self.locations = {1: {"name": "Demo"}}
        self.variables = {1: {"name": "Total"}}
Пример #14
0
 def setUp(self):
     db_util.insert_cases(self.db_session, "public_health_report")