def test_query_2(self):
        '''test query by available on'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize(
            {'start_date': '2017-01-01 00:00:00', 'end_date': '2019-01-01 00:00:00'})
        promo2.deserialize(
            {'start_date': '2018-01-01 00:00:00', 'end_date': '2020-01-01 00:00:00'})
        promo1.save()
        promo2.save()
        test = Promotion.find_by_conditions(
            {'available_on': '2016-01-01 00:00:00'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 0)

        test2 = Promotion.find_by_conditions(
            {'available_on': '2017-06-01 00:00:00'})
        self.assertIsInstance(test2, list)
        self.assertEqual(len(test2), 1)
        self.assertEqual(test2[0].id, 1)

        test3 = Promotion.find_by_conditions(
            {'available_on': '2018-06-01 00:00:00'})
        self.assertIsInstance(test3, list)
        self.assertEqual(len(test3), 2)

        test4 = Promotion.find_by_conditions(
            {'available_on': '2019-06-01 00:00:00'})
        self.assertIsInstance(test4, list)
        self.assertEqual(len(test4), 1)
        self.assertEqual(test4[0].id, 2)
    def test_query(self):
        '''test query by promo type'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize({'promo_type': '%'})
        promo2.deserialize({'promo_type': '$'})
        promo1.save()
        promo2.save()
        test = Promotion.find_by_conditions({'promo_type': '$'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 1)
        self.assertEqual(test[0].id, 2)

        test2 = Promotion.find_by_conditions({'promo_type': '%'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 1)
        self.assertEqual(test2[0].id, 1)
    def test_query_3(self):
        '''test query by multiple conditions'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize(
            {'promo_type': '%', 'start_date': '2017-01-01 00:00:00', 'end_date': '2019-01-01 00:00:00'})
        promo2.deserialize(
            {'promo_type': '$', 'start_date': '2018-01-01 00:00:00', 'end_date': '2020-01-01 00:00:00'})
        promo1.save()
        promo2.save()

        test = Promotion.find_by_conditions(
            {'promo_type': '$', 'available_on': '2017-06-01 00:00:00'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 0)

        test2 = Promotion.find_by_conditions(
            {'promo_type': '%', 'available_on': '2018-06-01 00:00:00'})
        self.assertIsInstance(test2, list)
        self.assertEqual(len(test2), 1)
        self.assertEqual(test2[0].id, 1)
    def get(self):
        """ Returns all of the Promotions """
        conditions = request.values.to_dict()
        payload = Promotion.all()

        if conditions:
            payload = Promotion.find_by_conditions(conditions)

        payload = [promo.serialize() for promo in payload]

        flask_app.logger.info("GET promotions success")

        return payload, 200