code: def t_single_join(self, client_con, mock_executor):
      # ==== test join ===
  
      res = client_con.mindsdb.fish_model1.find(
          {
              "collection": "mongo.fish",
              "query": {"Species": "Pike"},
          }
      )
      res = list(res)
  
      ast = mock_executor.call_args[0][0]
  
      expected_sql = """
            SELECT * FROM 
               (SELECT * FROM mongo.fish WHERE Species = 'Pike') as fish
               JOIN mindsdb.fish_model1
          """
      assert (
          parse_sql(expected_sql, "mindsdb").to_string()
          == ast.to_string()
      )
  
imports: import datetime
  import json
  import threading
  import inspect
  from unittest.mock import patch
  import tempfile
  import os
  from pymongo import MongoClient
  from mindsdb_sql import parse_sql
  from mindsdb.api.executor.data_types.answer import ExecuteAnswer, ANSWER_TYPE
  from mindsdb.api.executor import Column
  from .executor_test_base import BaseUnitTest
label_desc: Use image node_id 3 for calling the TestMongoDBServer obj's underlying member method code with example usage: obj.t_single_join(client_con, mock_executor) without return types