text: from datetime import date
  import os
  
  import anosql
  import psycopg2
  import psycopg2.extras
  import pytest
  
  
  @pytest.fixture()
  def queries():
      dir_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "blogdb", "sql")
      return anosql.from_path(dir_path, "psycopg2")
  
  
  def test_record_query(pg_conn, queries):
      dsn = pg_conn.get_dsn_parameters()
      with psycopg2.connect(cursor_factory=psycopg2.extras.RealDictCursor, **dsn) as conn:
          actual = queries.users.get_all(conn)
  
      assert len(actual) == 3
      assert actual[0] == {
          "userid": 1,
          "username": "bobsmith",
          "firstname": "Bob",
          "lastname": "Smith",
      }
  
  
  def test_parameterized_query(pg_conn, queries):
      actual = queries.blogs.get_user_blogs(pg_conn, userid=1)
      expected = [
          ("How to make a pie.", date(2018, 11, 23)),
          ("What I did Today", date(2017, 7, 28)),
      ]
      assert actual == expected
  
  
  def test_parameterized_record_query(pg_conn, queries):
      dsn = pg_conn.get_dsn_parameters()
      with psycopg2.connect(cursor_factory=psycopg2.extras.RealDictCursor, **dsn) as conn:
          actual = queries.blogs.pg_get_blogs_published_after(
              conn, published=date(2018, 1, 1)
          )
  
      expected = [
          {
              "title": "How to make a pie.",
              "username": "bobsmith",
              "published": "2018-11-23 00:00",
          },
          {"title": "Testing", "username": "janedoe", "published": "2018-01-01 00:00"},
      ]
  
      assert actual == expected
  
  
  def test_select_cursor_context_manager(pg_conn, queries):
      with queries.blogs.get_user_blogs_cursor(pg_conn, userid=1) as cursor:
          actual = cursor.fetchall()
          expected = [
              ("How to make a pie.", date(2018, 11, 23)),
              ("What I did Today", date(2017, 7, 28)),
          ]
          assert actual == expected
  
  
  def test_insert_returning(pg_conn, queries):
      with pg_conn:
          blogid, title = queries.blogs.pg_publish_blog(
              pg_conn,
              userid=2,
              title="My first blog",
              content="Hello, World!",
              published=date(2018, 12, 4),
          )
          with pg_conn.cursor() as cur:
              cur.execute(
                  """\
                  select blogid,
                         title
                    from blogs
                   where blogid = %s;
                  """,
                  (blogid,),
              )
              expected = cur.fetchone()
  
      assert (blogid, title) == expected
  
  
  def test_delete(pg_conn, queries):
      # Removing the "janedoe" blog titled "Testing"
      actual = queries.blogs.remove_blog(pg_conn, blogid=2)
      assert actual is None
  
      janes_blogs = queries.blogs.get_user_blogs(pg_conn, userid=3)
      assert len(janes_blogs) == 0
  
  
  def test_insert_many(pg_conn, queries):
      blogs = [
          {
              "userid": 2,
              "title": "Blog Part 1",
              "content": "content - 1",
              "published": date(2018, 12, 4),
          },
          {
              "userid": 2,
              "title": "Blog Part 2",
              "content": "content - 2",
              "published": date(2018, 12, 5),
          },
          {
              "userid": 2,
              "title": "Blog Part 3",
              "content": "content - 3",
              "published": date(2018, 12, 6),
          },
      ]
  
      with pg_conn:
          actual = queries.blogs.pg_bulk_publish(pg_conn, blogs)
          assert actual is None
  
          johns_blogs = queries.blogs.get_user_blogs(pg_conn, userid=2)
          assert johns_blogs == [
              ("Blog Part 3", date(2018, 12, 6)),
              ("Blog Part 2", date(2018, 12, 5)),
              ("Blog Part 1", date(2018, 12, 4)),
          ]
  