code: def test_algo_fetch_csv(self):
      self.responses.add(
          self.responses.GET,
          "https://fake.urls.com/aapl_csv_data.csv",
          body=AAPL_CSV_DATA,
          content_type="text/csv",
      )
  
      results = self.run_algo(
          """
  from zipline.api import fetch_csv, record, sid
  
  def normalize(df):
      df['scaled'] = df['signal'] * 10
      return df
  
  def initialize(context):
      fetch_csv('https://fake.urls.com/aapl_csv_data.csv',
              post_func=normalize)
      context.checked_name = False
  
  def handle_data(context, data):
      record(
          signal=data.current(sid(24), "signal"),
          scaled=data.current(sid(24), "scaled"),
          price=data.current(sid(24), "price"))
          """
      )
  
      self.assertEqual(5, results["signal"][-1])
      self.assertEqual(50, results["scaled"][-1])
      self.assertEqual(24, results["price"][-1])
  
imports: from nose_parameterized import parameterized
  import pandas
  import numpy
  from mock import patch
  from zipline.errors import UnsupportedOrderParameters
  from zipline.sources.requests_csv import mask_requests_args
  from zipline.utils import factory
  from zipline.testing import FetcherDataPortal
  from zipline.testing.fixtures import WithResponses, WithMakeAlgo, ZiplineTestCase
  from .resources.fetcher_inputs.fetcher_test_data import AAPL_CSV_DATA, AAPL_IBM_CSV_DATA, AAPL_MINUTE_CSV_DATA, CPIAUCSL_DATA, FETCHER_ALTERNATE_COLUMN_HEADER, FETCHER_UNIVERSE_DATA, FETCHER_UNIVERSE_DATA_TICKER_COLUMN, MULTI_SIGNAL_CSV_DATA, NON_ASSET_FETCHER_UNIVERSE_DATA, PALLADIUM_DATA, NFLX_DATA
label_desc: Use image node_id 7 for calling the FetcherTestCase obj's underlying member method code with example usage: obj.test_algo_fetch_csv() without return types