def testXigniteSecuritiesInterfaceIsAccessible(self):
    now = datetime.now(xignite_stock_agent._UTC_TZ)
    startTime = (
      ((now - timedelta(days=1)).astimezone(xignite_stock_agent._EASTERN_TZ)))
    endTime = now.astimezone(xignite_stock_agent._EASTERN_TZ)

    data = xignite_stock_agent.getData(
      symbol="AAPL",
      apitoken=os.environ.get("XIGNITE_API_TOKEN"),
      barlength=5,
      startTime=startTime.strftime(xignite_stock_agent.DATE_FMT),
      endTime=endTime.strftime(xignite_stock_agent.DATE_FMT),
      fields=["Outcome"])

    self.assertEqual(data["Outcome"], "Success")
        def getData(formattedStartTime, formattedEndTime):
            """ Get data for specified window of time

      :param str formattedStartTime: Formatted timestamp representing the start
        of the request window
      :param str formattedEndTime: Formatted timestamp representing the end of
        the request window
      :returns: Response dict.  See xignite_stock_agent.getData()
      """
            return xignite_stock_agent.getData(
                symbol="AAPL",
                apitoken=os.environ.get("XIGNITE_API_TOKEN"),
                barlength=5,
                startTime=formattedStartTime,
                endTime=formattedEndTime,
                fields=["Outcome"])
    def getData(formattedStartTime, formattedEndTime):
      """ Get data for specified window of time

      :param str formattedStartTime: Formatted timestamp representing the start
        of the request window
      :param str formattedEndTime: Formatted timestamp representing the end of
        the request window
      :returns: Response dict.  See xignite_stock_agent.getData()
      """
      return xignite_stock_agent.getData(
        symbol="AAPL",
        apitoken=os.environ.get("XIGNITE_API_TOKEN"),
        barlength=5,
        startTime=formattedStartTime,
        endTime=formattedEndTime,
        fields=["Outcome"])
  def testGetData(self, urllib2, metricDataBatchWriter):
    apiResponse = {
      "Outcome": "Success",
      "Message": None,
      "Identity": "Request",
      "Delay": 0.3652289,
      "Bars": [
          {
              "StartDate": "1/15/2015",
              "StartTime": "9:30:00 AM",
              "EndDate": "1/15/2015",
              "EndTime": "9:35:00 AM",
              "UTCOffset": -5,
              "Open": 46.225,
              "High": 46.38,
              "Low": 45.955,
              "Close": 45.96,
              "Volume": 504494,
              "Trades": 2414,
              "TWAP": 46.1765,
              "VWAP": 46.1756
          },
          {
              "StartDate": "1/15/2015",
              "StartTime": "9:35:00 AM",
              "EndDate": "1/15/2015",
              "EndTime": "9:40:00 AM",
              "UTCOffset": -5,
              "Open": 45.97,
              "High": 46.025,
              "Low": 45.64,
              "Close": 45.79,
              "Volume": 492621,
              "Trades": 2621,
              "TWAP": 45.8574,
              "VWAP": 45.8569
          }
      ],
      "Security": {
          "CIK": "0000789019",
          "CUSIP": None,
          "Symbol": "MSFT",
          "ISIN": None,
          "Valoren": "951692",
          "Name": "Microsoft Corp",
          "Market": "NASDAQ",
          "MarketIdentificationCode": "XNAS",
          "MostLiquidExchange": True,
          "CategoryOrIndustry": "InformationTechnologyServices"
      }
    }

    urllib2.urlopen.return_value = StringIO.StringIO(json.dumps(apiResponse))

    endTime = (datetime.datetime.now(pytz.timezone("UTC"))
                                .astimezone(pytz.timezone("US/Eastern")))

    startTime = endTime + datetime.timedelta(days=1)

    fields = ["Outcome",
              "Message",
              "Identity",
              "Delay",
              "Security",
              "Security.CIK",
              "Security.CUSIP",
              "Security.Symbol",
              "Security.ISIN",
              "Security.Valoren",
              "Security.Name",
              "Security.Market",
              "Security.MarketIdentificationCode",
              "Security.MostLiquidExchange",
              "Security.CategoryOrIndustry",
              "Bars",
              "Bars.StartDate",
              "Bars.StartTime",
              "Bars.EndDate",
              "Bars.EndTime",
              "Bars.UTCOffset",
              "Bars.Open",
              "Bars.High",
              "Bars.Low",
              "Bars.Trades"]

    result = xignite_stock_agent.getData(
      "foo",
      "bar",
      5,
      startTime.strftime(xignite_stock_agent.DATE_FMT),
      endTime.strftime(xignite_stock_agent.DATE_FMT),
      fields)

    self.assertDictEqual(result, apiResponse)

    self.assertTrue(urllib2.urlopen.called)
    args, _ = urllib2.urlopen.call_args_list[0]
    parseResult = urlparse.urlparse(args[0])
    query = urlparse.parse_qs(parseResult.query)
    self.assertSequenceEqual(query["_fields"][0].split(","), fields)
    self.assertEqual(
      startTime.replace(tzinfo=None, microsecond=0),
      datetime.datetime.strptime(query["StartTime"][0],
                                 xignite_stock_agent.DATE_FMT))
    self.assertEqual(
      endTime.replace(tzinfo=None, microsecond=0),
      datetime.datetime.strptime(query["EndTime"][0],
                                 xignite_stock_agent.DATE_FMT))
    self.assertEqual(query["Identifier"][0], "foo")
    self.assertEqual(query["_Token"][0], "bar")
    self.assertEqual(query["Period"][0], "5")