コード例 #1
0
    def test_add_same_menu_item(self, *args):
        """
        User try to add already existed menu item but edit already existed
        """
        menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                               business_location=self.location)

        self.client.force_login(self.user)
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)

        menu.refresh_from_db()
        self.assertEqual(menu.price_gram, self.data['price_gram'])
        self.assertEqual(menu.price_eighth, self.data['price_eighth'])
        self.assertEqual(menu.price_half, self.data['price_half'])
        self.assertEqual(menu.price_quarter, self.data['price_quarter'])
        self.assertEqual(menu.business_location_id, self.location.pk)
        self.assertEqual(menu.strain_id, self.strain.pk)
        self.assertTrue(menu.in_stock)

        self.assertEqual(
            response.json(), {
                'id': menu.id,
                'strain_id': menu.strain.id,
                'strain_name': menu.strain.name,
                'strain_variety': menu.strain.variety,
                'price_gram': menu.price_gram,
                'price_eighth': menu.price_eighth,
                'price_quarter': menu.price_quarter,
                'price_half': menu.price_half,
                'in_stock': menu.in_stock,
                'url': menu.strain.get_absolute_url(),
            })
コード例 #2
0
    def test_delete_then_add_same_menu_item_after_second_out_of_stock_report(
            self, *args):
        """
        User successfully delete and then add same menu item as "out of stock"
        next 10 days after second "out of stock" report
        """
        self.client.force_login(self.user)
        menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                               business_location=self.location)
        ReportOutOfStock.objects.create(menu_item=menu,
                                        user=self.user,
                                        count=2,
                                        start_timer=timezone.now() -
                                        timezone.timedelta(days=8))
        data = {'menu_item_id': menu.pk}
        # Delete menu
        response = self.client.delete(self.url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)

        # Add menu
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
        menu.refresh_from_db()
        self.assertIsNone(menu.removed_date)
        self.assertFalse(menu.in_stock)
コード例 #3
0
 def test_delete(self, *args):
     """
     User successfully delete item
     """
     self.client.force_login(self.user)
     menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                            business_location=self.location)
     data = {'menu_item_id': menu.pk}
     response = self.client.delete(self.url, data, format='json')
     self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
     self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
     menu.refresh_from_db()
     self.assertEqual(menu.removed_date.date(), timezone.now().date())
コード例 #4
0
 def test_delete_wrong_item(self, *args):
     """
     User try to delete not existing item and receive error
     """
     self.client.force_login(self.user)
     data = {'menu_item_id': BusinessLocationMenuItemFactory().pk}
     response = self.client.delete(self.url, data, format='json')
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
     self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
コード例 #5
0
    def test_delete_then_add_same_menu_item(self, *args):
        """
        User successfully delete and then add same menu item
        """
        self.client.force_login(self.user)
        menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                               business_location=self.location)
        data = {'menu_item_id': menu.pk}
        # Delete menu
        response = self.client.delete(self.url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)

        # Add menu
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
        menu.refresh_from_db()
        self.assertIsNone(menu.removed_date)
コード例 #6
0
    def test_update_out_of_stock_after_second_out_of_stock_report(self, *args):
        """
        User can't change out of stock attr next 10 days
        after second report that item is out of stock
        """
        menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                               business_location=self.location,
                                               in_stock=False)
        ReportOutOfStock.objects.create(menu_item=menu,
                                        user=self.user,
                                        count=2,
                                        start_timer=timezone.now() -
                                        timezone.timedelta(days=8))
        data = {'menu_item': {'id': menu.pk, 'in_stock': True}}

        self.client.force_login(self.user)
        response = self.client.put(self.url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
        menu.refresh_from_db()
        self.assertFalse(menu.in_stock)
コード例 #7
0
    def test_update_out_of_stock(self, *args):
        """
        User update out of stock attr
        """
        menu = BusinessLocationMenuItemFactory(strain=self.strain,
                                               business_location=self.location)
        data = {'menu_item': {'id': menu.pk, 'in_stock': False}}

        self.client.force_login(self.user)
        response = self.client.put(self.url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(BusinessLocationMenuItem.objects.count(), 1)
コード例 #8
0
    def test_list(self, *args):
        """
        User get menu list
        """
        menu1 = BusinessLocationMenuItemFactory(
            strain=self.strain,
            business_location=self.location,
            in_stock=False)
        menu2 = BusinessLocationMenuItemFactory(
            strain=self.strain, business_location=self.location)

        response = self.client.get(self.url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(),
                         [{
                             'id': menu1.id,
                             'strain_id': menu1.strain.id,
                             'strain_name': menu1.strain.name,
                             'strain_variety': menu1.strain.variety,
                             'price_gram': menu1.price_gram,
                             'price_eighth': menu1.price_eighth,
                             'price_quarter': menu1.price_quarter,
                             'price_half': menu1.price_half,
                             'in_stock': menu1.in_stock,
                             'url': menu1.strain.get_absolute_url(),
                             'report_count': 0
                         }, {
                             'id': menu2.id,
                             'strain_id': menu2.strain.id,
                             'strain_name': menu2.strain.name,
                             'strain_variety': menu2.strain.variety,
                             'price_gram': menu2.price_gram,
                             'price_eighth': menu2.price_eighth,
                             'price_quarter': menu2.price_quarter,
                             'price_half': menu2.price_half,
                             'in_stock': menu2.in_stock,
                             'url': menu2.strain.get_absolute_url(),
                             'report_count': 0
                         }])
コード例 #9
0
 def test_update_wrong_item(self, *args):
     """
     User try to update not his own menu item and get error
     """
     self.client.force_login(self.user)
     data = {
         'menu_item': {
             'id': BusinessLocationMenuItemFactory().pk,
             'in_stock': False
         }
     }
     response = self.client.put(self.url, data, format='json')
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
コード例 #10
0
ファイル: test_out_of_stock.py プロジェクト: keizir/strainrx
 def setUp(self, *args):
     self.user = UserFactory()
     self.menu = BusinessLocationMenuItemFactory()
     self.url = reverse(
         'businesses_api:business_location_report_out_of_stock',
         args=(self.menu.business_location.business_id, self.menu.pk))
コード例 #11
0
ファイル: test_out_of_stock.py プロジェクト: keizir/strainrx
class OutOfStockTestCase(TestCase):
    @patch.object(EmailService, 'send_report_out_of_stock', return_value=None)
    @patch.object(BusinessLocationESService,
                  'save_menu_item',
                  return_value=None)
    @patch.object(StrainESService, 'save_strain', return_value=None)
    @patch.object(BusinessLocationMenuUpdate,
                  'record_business_location_menu_update',
                  return_value=None)
    def setUp(self, *args):
        self.user = UserFactory()
        self.menu = BusinessLocationMenuItemFactory()
        self.url = reverse(
            'businesses_api:business_location_report_out_of_stock',
            args=(self.menu.business_location.business_id, self.menu.pk))

    def test_user_not_authorized(self):
        """
        Anonymous user does not have access to the analytics page
        """
        response = self.client.post(self.url)
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

    @patch.object(EmailService, 'send_report_out_of_stock', return_value=None)
    @patch.object(BusinessLocationESService,
                  'save_menu_item',
                  return_value=None)
    @patch.object(StrainESService, 'save_strain', return_value=None)
    @patch.object(BusinessLocationMenuUpdate,
                  'record_business_location_menu_update',
                  return_value=None)
    @patch.object(BusinessLocationESService,
                  'save_business_location',
                  return_value=None)
    def test_report_out_of_stock(self, *args):
        """
        User report out of stock
        """
        self.client.force_login(self.user)
        response = self.client.post(self.url)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(ReportOutOfStock.objects.count(), 1)
        report = ReportOutOfStock.objects.first()
        self.assertEqual(report.user, self.user)
        self.assertEqual(report.menu_item, self.menu)

    @patch.object(EmailService, 'send_report_out_of_stock', return_value=None)
    @patch.object(BusinessLocationESService,
                  'save_menu_item',
                  return_value=None)
    @patch.object(StrainESService, 'save_strain', return_value=None)
    @patch.object(BusinessLocationMenuUpdate,
                  'record_business_location_menu_update',
                  return_value=None)
    def test_report_out_of_stock_second_time(self, *args):
        """
        User report out of stock second time in 7 days after first report
        """
        report1 = ReportOutOfStock.objects.create(menu_item=self.menu,
                                                  user=self.user,
                                                  created=timezone.now() -
                                                  timezone.timedelta(days=5))
        self.client.force_login(self.user)
        response = self.client.post(self.url)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(ReportOutOfStock.objects.count(), 2)

        report = ReportOutOfStock.objects.first()
        self.assertEqual(report.user, self.user)
        self.assertEqual(report.menu_item, self.menu)
        self.assertEqual(report.count, 2)
        self.assertTrue(report1.is_active)

        report1.refresh_from_db()
        self.assertFalse(report1.is_active)
        self.menu.refresh_from_db()
        self.assertFalse(self.menu.in_stock)

    @patch.object(EmailService, 'send_report_out_of_stock', return_value=None)
    @patch.object(BusinessLocationESService,
                  'save_menu_item',
                  return_value=None)
    @patch.object(StrainESService, 'save_strain', return_value=None)
    @patch.object(BusinessLocationMenuUpdate,
                  'record_business_location_menu_update',
                  return_value=None)
    def test_report_out_of_stock_second_time_more_then_7_days(self, *args):
        """
        User report out of stock second time more the 7 days after first report
        """
        ReportOutOfStock.objects.create(menu_item=self.menu,
                                        user=self.user,
                                        start_timer=timezone.now() -
                                        timezone.timedelta(days=8))
        self.client.force_login(self.user)
        response = self.client.post(self.url)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(ReportOutOfStock.objects.count(), 2)

        report = ReportOutOfStock.objects.last()
        self.assertEqual(report.user, self.user)
        self.assertEqual(report.menu_item, self.menu)

        self.menu.refresh_from_db()
        self.assertTrue(self.menu.in_stock)