code: def test_parse_table_schemas(self):
      parser = SQLParser()
      db_info = DatabaseInfo(scheme="myscheme")
  
      hook = MagicMock()
  
      def rows(name):
          return [
              (DB_SCHEMA_NAME, name, "ID", 1, "int4"),
              (DB_SCHEMA_NAME, name, "AMOUNT_OFF", 2, "int4"),
              (DB_SCHEMA_NAME, name, "CUSTOMER_EMAIL", 3, "varchar"),
              (DB_SCHEMA_NAME, name, "STARTS_ON", 4, "timestamp"),
              (DB_SCHEMA_NAME, name, "ENDS_ON", 5, "timestamp"),
          ]
  
      hook.get_conn.return_value.cursor.return_value.fetchall.side_effect = [
          rows("top_delivery_times"),
          rows("popular_orders_day_of_week"),
      ]
  
      expected_schema_facet = SchemaDatasetFacet(
          fields=[
              SchemaField(name="ID", type="int4"),
              SchemaField(name="AMOUNT_OFF", type="int4"),
              SchemaField(name="CUSTOMER_EMAIL", type="varchar"),
              SchemaField(name="STARTS_ON", type="timestamp"),
              SchemaField(name="ENDS_ON", type="timestamp"),
          ]
      )
  
      expected = (
          [
              Dataset(
                  namespace=NAMESPACE,
                  name="PUBLIC.top_delivery_times",
                  facets={"schema": expected_schema_facet},
              )
          ],
          [
              Dataset(
                  namespace=NAMESPACE,
                  name="PUBLIC.popular_orders_day_of_week",
                  facets={"schema": expected_schema_facet},
              )
          ],
      )
  
      assert expected == parser.parse_table_schemas(
          hook=hook,
          namespace=NAMESPACE,
          inputs=[DbTableMeta("top_delivery_times")],
          outputs=[DbTableMeta("popular_orders_day_of_week")],
          database_info=db_info,
      )
  
file_path: airflow/tests/providers/openlineage/utils/test_sqlparser.py
imports: from __future__ import annotations
  from unittest import mock
  from unittest.mock import MagicMock
  import pytest
  from openlineage.client.facet import ColumnLineageDatasetFacet, ColumnLineageDatasetFacetFieldsAdditional, ColumnLineageDatasetFacetFieldsAdditionalInputFields, SchemaDatasetFacet, SchemaField, SqlJobFacet
  from openlineage.client.run import Dataset
  from openlineage.common.sql import DbTableMeta
  from airflow.providers.openlineage.extractors import OperatorLineage
  from airflow.providers.openlineage.sqlparser import DatabaseInfo, SQLParser
label_desc: Use image node_id 4 for calling the TestSQLParser obj's underlying member method code with example usage: obj.test_parse_table_schemas() and returns: list