Advertisement
Guest User

restTest

a guest
Mar 21st, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.05 KB | None | 0 0
  1. import unittest
  2. import psycopg2
  3. import psycopg2.extras
  4. # from decimal import Decimal
  5.  
  6.  
  7. class RestaurantDataTestCase(unittest.TestCase):
  8.     connection_string = "host='localhost' dbname='restaurant' user='restaurant' password='restaurant'"
  9.     homework_file = "homework-4.sql"
  10.  
  11.     conn = psycopg2.connect(connection_string, cursor_factory=psycopg2.extras.DictCursor)
  12.  
  13.     def setUp(self):
  14.         with self.conn.cursor() as cursor:
  15.             with open('restaurant-data.sql', 'r') as restaurant_data:
  16.                 setup_queries = restaurant_data.read()
  17.                 cursor.execute(setup_queries)
  18.  
  19.             with open(self.homework_file, 'r') as hw_file:
  20.                 homework = hw_file.read()
  21.                 cursor.execute(homework)
  22.  
  23.             self.conn.commit()
  24.  
  25.     def tearDown(self):
  26.         print('done')
  27.  
  28.     def query(self, query, parameters=()):
  29.         cursor = self.conn.cursor()
  30.         cursor.execute(query, parameters)
  31.         return cursor.fetchall()
  32.  
  33.     def execute(self, query, parameters=()):
  34.         cursor = self.conn.cursor()
  35.         cursor.execute(query, parameters)
  36.         self.conn.commit()
  37.         return cursor.rowcount
  38.  
  39.     def executeAndReturnKey(self, query, parameters=()):
  40.         cursor = self.conn.cursor()
  41.         cursor.execute(query, parameters)
  42.         key = cursor.fetchone()[0]
  43.         self.conn.commit()
  44.         return key
  45.  
  46.     """This can be uncommented as a very basic test to check if the database is properly set up"""
  47.     # def test_connectivity(self):
  48.     #     tuples = self.query("SELECT * FROM recipe")
  49.     #     self.assertTrue(True, tuples)
  50.  
  51.     def test_inventory_check(self):
  52.         updated = self.execute("INSERT INTO orders(recipe, quantity) VALUES('Pumpkin Pie', 11)")
  53.         self.assertEqual(updated, 0, "The database allowed insertion of an order for which there "
  54.                                      "wasn't sufficient inventory")
  55.  
  56.     def test_inventory_check_permissive(self):
  57.         updated = self.execute("INSERT INTO orders(recipe, quantity) VALUES('Pumpkin Pie', 1)")
  58.         self.assertEqual(updated, 1, "A valid order was not allowed to be inserted")
  59.  
  60.         orders = self.query("SELECT * FROM orders")
  61.         self.assertEqual(len(orders), 1, "The wrong number of orders were inserted")
  62.  
  63.     def test_no_filled_insert(self):
  64.         updated = self.execute("INSERT INTO orders(recipe, quantity, filled) "
  65.                                "VALUES ('Pumpkin Pie', 1, now())")
  66.         self.assertEqual(updated, 0, "An order was inserted with a value in 'filled'")
  67.  
  68.     def insert_pies(self):
  69.         return self.execute("INSERT INTO orders(recipe, quantity)"
  70.                             "VALUES('Pumpkin Pie', 2) RETURNING order_number")
  71.  
  72.     def test_inventory_update_null(self):
  73.         new_key = self.insert_pies()
  74.         self.assertGreater(new_key, -1, "Invalid key")
  75.  
  76.         crusts = self.query("SELECT * FROM inventory WHERE ingredient='11111122'")
  77.         self.assertEqual(crusts[0]['amount'], 10, "Inventory was improperly updated")
  78.  
  79.     def test_inventory_update(self):
  80.         new_key = self.insert_pies()
  81.         updated = self.execute("UPDATE orders SET filled=now() "
  82.                                "WHERE order_number=%(num)s", {'num': new_key})
  83.         self.assertEqual(updated, 1, "Order wasn't updated")
  84.         updated_crusts = self.query("SELECT * FROM inventory WHERE ingredient='11111122'")
  85.         self.assertEqual(updated_crusts[0]['amount'], 8,
  86.                          "Inventory wasn't properly updated after order filled")
  87.  
  88.     def test_order_timestamp_check(self):
  89.         new_key = self.insert_pies()
  90.         updated = self.execute("UPDATE orders SET filled=now() "
  91.                                "WHERE order_number=%(num)s", {'num': new_key})
  92.  
  93.         updated_order = self.execute("UPDATE orders SET filled=now()"
  94.                                      "WHERE order_number=%(num)s", {'num': new_key})
  95.         self.assertEqual(updated_order, 0, "Filled timestamp was improperly updated")
  96.  
  97.  
  98. if __name__ == '__main__':
  99.     unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement