示例#1
0
    def test_urgent_stockout_alert(self):
        urgent_stockout_alert = UrgentStockoutAlert(TEST_DOMAIN)
        urgent_stockout_alert.send()
        self.assertEqual(SMS.objects.count(), 0)

        create_stock_report(self.loc1, {'tp2': 0})
        create_stock_report(self.loc2, {'tp2': 0})
        create_stock_report(self.loc3, {'tp2': 0})

        urgent_stockout_alert.send()
        self.assertEqual(SMS.objects.count(), 1)
        self.assertEqual(
            SMS.objects.all().first().text, URGENT_STOCKOUT % {
                'location': self.district.name,
                'products': "Test Product2",
            })

        create_stock_report(self.loc1, {'tp': 0})
        create_stock_report(self.loc2, {'tp': 0})
        create_stock_report(self.loc3, {'tp': 0})

        now = datetime.utcnow()
        urgent_stockout_alert.send()
        smses = SMS.objects.filter(date__gte=now)
        self.assertEqual(smses.count(), 1)
        self.assertEqual(
            smses.first().text, URGENT_STOCKOUT % {
                'location': self.district.name,
                'products': "Test Product, Test Product2",
            })
示例#2
0
    def test_product_type_filter(self):
        """
        Notifications will not be sent if the stockout is a product type does
        not interest the user.
        """

        self.user.get_domain_membership(self.TEST_DOMAIN).program_id = self.program.get_id
        self.user.save()

        program = Program(domain=self.TEST_DOMAIN, name='Test Program 2')
        program.save()

        bootstrap_web_user(
            username='******', domain=self.TEST_DOMAIN, phone_number='+44445', location=self.district,
            password='******', email='*****@*****.**', user_data={}, program_id=program.get_id
        )

        assign_products_to_location(self.facility, [self.product])
        assign_products_to_location(self.other_facility, [self.product])
        assign_products_to_location(self.last_facility, [self.product])

        create_stock_report(self.facility, {'tp': 0})
        create_stock_report(self.other_facility, {'tp': 0})
        create_stock_report(self.last_facility, {'tp': 0})

        generated = list(UrgentStockoutAlert(self.TEST_DOMAIN).get_notifications())
        self.assertEqual(len(generated), 1)
        self.assertEqual(generated[0].user.get_id, self.user.get_id)
示例#3
0
    def test_urgent_stockout_alert(self):
        urgent_stockout_alert = UrgentStockoutAlert(TEST_DOMAIN)
        urgent_stockout_alert.send()
        self.assertEqual(SMS.objects.count(), 0)

        create_stock_report(self.loc1, {'tp2': 0})
        create_stock_report(self.loc2, {'tp2': 0})
        create_stock_report(self.loc3, {'tp2': 0})

        urgent_stockout_alert.send()
        self.assertEqual(SMS.objects.count(), 1)
        self.assertEqual(SMS.objects.all().first().text, URGENT_STOCKOUT % {
            'location': self.district.name,
            'products': "Test Product2",
        })

        create_stock_report(self.loc1, {'tp': 0})
        create_stock_report(self.loc2, {'tp': 0})
        create_stock_report(self.loc3, {'tp': 0})

        now = datetime.utcnow()
        urgent_stockout_alert.send()
        smses = SMS.objects.filter(date__gte=now)
        self.assertEqual(smses.count(), 1)
        self.assertEqual(smses.first().text, URGENT_STOCKOUT % {
            'location': self.district.name,
            'products': "Test Product, Test Product2",
        })
示例#4
0
    def test_get_products_function(self):
        urgent_stockout_alert = UrgentStockoutAlert(TEST_DOMAIN)
        self.assertEqual(
            len(
                urgent_stockout_alert.get_sql_products_list(
                    self.district.sql_location)), 0)
        create_stock_report(self.loc1, {'tp': 0})
        self.assertEqual(
            len(
                urgent_stockout_alert.get_sql_products_list(
                    self.district.sql_location)), 0)
        create_stock_report(self.loc2, {'tp': 0})
        self.assertEqual(
            len(
                urgent_stockout_alert.get_sql_products_list(
                    self.district.sql_location)), 0)
        create_stock_report(self.loc3, {'tp': 0})
        self.assertEqual(
            len(
                urgent_stockout_alert.get_sql_products_list(
                    self.district.sql_location)), 1)

        create_stock_report(self.loc1, {'tp2': 0})
        create_stock_report(self.loc2, {'tp2': 0})
        create_stock_report(self.loc3, {'tp2': 0})
        self.assertEqual(
            len(
                urgent_stockout_alert.get_sql_products_list(
                    self.district.sql_location)), 2)
示例#5
0
    def test_minority_facility_stockout(self):
        """No notification because < 50% of the facilities don't send report."""
        assign_products_to_location(self.facility, [self.product])
        assign_products_to_location(self.other_facility, [self.product])
        assign_products_to_location(self.last_facility, [self.product])

        create_stock_report(self.other_facility, {'tp': 10})
        create_stock_report(self.last_facility, {'tp': 10})

        generated = list(UrgentStockoutAlert(self.TEST_DOMAIN).get_notifications())
        self.assertEqual(len(generated), 0)
示例#6
0
    def test_partial_stock_coverage(self):
        """
        Handle the case when not all facilities are expected to have stocked a
        given product. i.e. if only one facility is expected to have a certain
        product and it is stocked out then that is an urgent stockout.
        """
        assign_products_to_location(self.facility, [self.product])

        create_stock_report(self.facility, {'tp': 0})

        generated = list(UrgentStockoutAlert(self.TEST_DOMAIN).get_notifications())
        self.assertEqual(len(generated), 1)
        self.assertEqual(generated[0].user.get_id, self.user.get_id)
示例#7
0
    def test_majority_facility_stockout(self):
        """Send a notification because > 50% of the facilities are stocked out of a product."""
        assign_products_to_location(self.facility, [self.product])
        assign_products_to_location(self.other_facility, [self.product])
        assign_products_to_location(self.last_facility, [self.product])

        create_stock_report(self.facility, {'tp': 0})
        create_stock_report(self.other_facility, {'tp': 0})
        create_stock_report(self.last_facility, {'tp': 10})

        generated = list(UrgentStockoutAlert(self.TEST_DOMAIN).get_notifications())
        self.assertEqual(len(generated), 1)
        self.assertEqual(generated[0].user.get_id, self.user.get_id)
示例#8
0
    def test_country_user(self):
        """Country as well as region users should get notifications."""
        other_user = bootstrap_web_user(
            username='******', domain=self.TEST_DOMAIN, phone_number='+44445', location=self.country,
            password='******', email='*****@*****.**', user_data={}
        )
        assign_products_to_location(self.facility, [self.product])
        assign_products_to_location(self.other_facility, [self.product])
        assign_products_to_location(self.last_facility, [self.product])

        create_stock_report(self.facility, {'tp': 0})
        create_stock_report(self.other_facility, {'tp': 0})
        create_stock_report(self.last_facility, {'tp': 0})
        generated = list(UrgentStockoutAlert(self.TEST_DOMAIN).get_notifications())
        self.assertEqual(len(generated), 2)
        self.assertEqual({generated[0].user.get_id, generated[1].user.get_id},
                         {self.user.get_id, other_user.get_id})
示例#9
0
    def test_get_products_function(self):
        urgent_stockout_alert = UrgentStockoutAlert(TEST_DOMAIN)
        self.assertEqual(len(urgent_stockout_alert.get_sql_products_list(self.district.sql_location)), 0)
        create_stock_report(self.loc1, {'tp': 0})
        self.assertEqual(len(urgent_stockout_alert.get_sql_products_list(self.district.sql_location)), 0)
        create_stock_report(self.loc2, {'tp': 0})
        self.assertEqual(len(urgent_stockout_alert.get_sql_products_list(self.district.sql_location)), 0)
        create_stock_report(self.loc3, {'tp': 0})
        self.assertEqual(len(urgent_stockout_alert.get_sql_products_list(self.district.sql_location)), 1)

        create_stock_report(self.loc1, {'tp2': 0})
        create_stock_report(self.loc2, {'tp2': 0})
        create_stock_report(self.loc3, {'tp2': 0})
        self.assertEqual(len(urgent_stockout_alert.get_sql_products_list(self.district.sql_location)), 2)
示例#10
0
def urgent_stockout():
    domains = EWSGhanaConfig.get_all_enabled_domains()
    for domain in domains:
        UrgentStockoutAlert(domain).send()