input: Write a class for an online store item that includes fields for ID, name, price, and description. Implement methods to return the item as a formatted string and as a dictionary. Provide assert statements to test the class. If the given item is empty then return an empty dictionary.
  
  class StoreItem:
      def __init__(self, item_id, name, price, description):
          self.item_id = item_id
          self.name = name
          self.price = price
          self.description = description
  
      def __str__(self):
          return f'{self.name}, ${self.price}'
  
      def to_dict(self):
          return {
              'item_id': self.item_id,
              'name': self.name,
              'price': self.price,
              'description': self.description
          }
  
  assert StoreItem('123', 'Laptop', 999, 'High-end laptop').__str__() == 'Laptop, $999'
  assert StoreItem('456', 'Phone', 799, 'Latest smartphone').__str__() == 'Phone, $799'
  assert StoreItem('123', 'Laptop', 999, 'High-end laptop').to_dict() == {'item_id': '123', 'name': 'Laptop', 'price': 999, 'description': 'High-end laptop'}
  assert StoreItem('456', 'Phone', 799, 'Latest smartphone').to_dict() == {'item_id': '456', 'name': 'Phone', 'price': 799, 'description': 'Latest smartphone'}
  assert StoreItem('', '', 0, '').to_dict() == {'item_id': '', 'name': '', 'price': 0, 'description': ''}
output: class StoreItem:
      def __init__(self, item_id, name, price, description):
          self.item_id = item_id
          self.name = name
          self.price = price
          self.description = description
  
      def __str__(self):
          return f'{self.name}, ${self.price}'
  
      def to_dict(self):
          return {
              'item_id': self.item_id,
              'name': self.name,
              'price': self.price,
              'description': self.description
          }