def test_not_override_url(self):
        """test_not_override_url
        outputにurlが明示的に指定されていれば、それを上書きしない
        """

        speaker = weatherspeaker.create()

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "outputs":[{"serif":"今日の天気です","url":"http://weather.yahoo.co.jp/weather/14/4610.html"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"今日の天気です",result[0]["serif"])
        self.assertTrue("url" in result[0])
        self.assertEqual(u"http://weather.yahoo.co.jp/weather/14/4610.html",result[0]["url"])

        print json.dumps(result,ensure_ascii=False)
    def test_temp_lt(self):
        """test_temp_lt
        tempのltが正しく動作するかテスト
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":14.9}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(debug_respose)

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"寒いですね",result[0]["serif"])

        print json.dumps(result,ensure_ascii=False)
    def test_add_url(self):
        """test_add_url
        outputにurlが指定されていない場合、OWMのURLを付加する
        """
        speaker = weatherspeaker.create()

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "outputs":[{"serif":"今日の天気です"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"今日の天気です",result[0]["serif"])
        self.assertTrue("url" in result[0])
        self.assertEqual(u"http://openweathermap.org/city/1848354",result[0]["url"])

        print json.dumps(result,ensure_ascii=False)
    def test_not_override_url(self):
        """test_not_override_url
        outputにurlが明示的に指定されていれば、それを上書きしない
        """

        speaker = weatherspeaker.create()

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "outputs":[{"serif":"今日の天気です","url":"http://weather.yahoo.co.jp/weather/14/4610.html"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"今日の天気です", result[0]["serif"])
        self.assertTrue("url" in result[0])
        self.assertEqual(u"http://weather.yahoo.co.jp/weather/14/4610.html",
                         result[0]["url"])

        print json.dumps(result, ensure_ascii=False)
    def test_add_url(self):
        """test_add_url
        outputにurlが指定されていない場合、OWMのURLを付加する
        """
        speaker = weatherspeaker.create()

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "outputs":[{"serif":"今日の天気です"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"今日の天気です", result[0]["serif"])
        self.assertTrue("url" in result[0])
        self.assertEqual(u"http://openweathermap.org/city/1848354",
                         result[0]["url"])

        print json.dumps(result, ensure_ascii=False)
    def test_complex(self):
        """test_complex
        tempとweatherの複合条件にマッチすることをテスト
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":30.1}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(
            debug_respose)

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "weather":[500,501,502,503,504,511,520,521,522,531],
           "outputs":[{"serif":"雨ですね"}]
          },
          {
           "weather":[800],
           "outputs":[{"serif":"晴れてますね"}]
          },
          {
           "weather":[801,802,803,804],
           "outputs":[{"serif":"曇ってますね"}]
          },
          {
           "weather":[801,802,803,804],
           "temp":{"gt":30},
           "outputs":[{"serif":"曇ってて暑いですね"}]
          },
          {
           "outputs":[{"serif":"特殊ですね"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"曇ってて暑いですね", result[0]["serif"])

        print json.dumps(result, ensure_ascii=False)
    def test_complex(self):
        """test_complex
        tempとweatherの複合条件にマッチすることをテスト
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":30.1}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(debug_respose)

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "weather":[500,501,502,503,504,511,520,521,522,531],
           "outputs":[{"serif":"雨ですね"}]
          },
          {
           "weather":[800],
           "outputs":[{"serif":"晴れてますね"}]
          },
          {
           "weather":[801,802,803,804],
           "outputs":[{"serif":"曇ってますね"}]
          },
          {
           "weather":[801,802,803,804],
           "temp":{"gt":30},
           "outputs":[{"serif":"曇ってて暑いですね"}]
          },
          {
           "outputs":[{"serif":"特殊ですね"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"曇ってて暑いですね",result[0]["serif"])

        print json.dumps(result,ensure_ascii=False)
    def test_temp_gt(self):
        """test_temp_gt
        tempのgtが正しく動作するかテストする
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":30.1}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(
            debug_respose)

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "gt":30
           },
           "outputs":[{"serif":"暑いですね"}]
          },
          {
           "temp":{
            "lt":30,
            "gt":15
           },
           "outputs":[{"serif":"涼しいですね"}]
          },
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertEqual(u"暑いですね", result[0]["serif"])

        print json.dumps(result, ensure_ascii=False)
    def test_api_temp(self):
        """test_api
        DEBUG_OWM_RESULTを使用せずにAPIとの疎通してtempの挙動を見るテスト
        """

        speaker = weatherspeaker.create()

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "gt":30
           },
           "outputs":[{"serif":"暑いですね"}]
          },
          {
           "temp":{
            "lt":30,
            "gt":15
           },
           "outputs":[{"serif":"涼しいですね"}]
          },
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertTrue(u"暑いですね" == result[0]["serif"]
                        or u"涼しいですね" == result[0]["serif"]
                        or u"寒いですね" == result[0]["serif"])

        print json.dumps(result, ensure_ascii=False)
    def test_api_temp(self):
        """test_api
        DEBUG_OWM_RESULTを使用せずにAPIとの疎通してtempの挙動を見るテスト
        """

        speaker = weatherspeaker.create()

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "gt":30
           },
           "outputs":[{"serif":"暑いですね"}]
          },
          {
           "temp":{
            "lt":30,
            "gt":15
           },
           "outputs":[{"serif":"涼しいですね"}]
          },
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertTrue(u"暑いですね" == result[0]["serif"] or u"涼しいですね" == result[0]["serif"] or u"寒いですね" == result[0]["serif"])

        print json.dumps(result,ensure_ascii=False)
    def test_api_weather(self):
        """test_api
        DEBUG_OWM_RESULTを使用せずにAPIとの疎通してweatherの挙動を見るテスト
        """

        speaker = weatherspeaker.create()

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "weather":[500,501,502,503,504,511,520,521,522,531],
           "outputs":[{"serif":"雨ですね"}]
          },
          {
           "weather":[800],
           "outputs":[{"serif":"晴れてますね"}]
          },
          {
           "weather":[801,802,803,804],
           "outputs":[{"serif":"曇ってますね"}]
          },
          {
           "outputs":[{"serif":"特殊ですね"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 1)
        self.assertTrue("serif" in result[0])
        self.assertTrue(u"雨ですね" == result[0]["serif"]
                        or u"晴れてますね" == result[0]["serif"]
                        or u"曇ってますね" == result[0]["serif"]
                        or u"特殊ですね" == result[0]["serif"])

        print json.dumps(result, ensure_ascii=False)
    def test_temp_not_match(self):
        """test_temp_not_match
        tempの設定にマッチしない場合、何も返さないことをテスト
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":29.9}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(
            debug_respose)

        setting_json = """{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "gt":30
           },
           "outputs":[{"serif":"暑いですね"}]
          },
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({}, json.loads(setting_json, "utf-8"), [])

        self.assertEqual(len(result), 0)
    def test_api_weather(self):
        """test_api
        DEBUG_OWM_RESULTを使用せずにAPIとの疎通してweatherの挙動を見るテスト
        """

        speaker = weatherspeaker.create()

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "weather":[500,501,502,503,504,511,520,521,522,531],
           "outputs":[{"serif":"雨ですね"}]
          },
          {
           "weather":[800],
           "outputs":[{"serif":"晴れてますね"}]
          },
          {
           "weather":[801,802,803,804],
           "outputs":[{"serif":"曇ってますね"}]
          },
          {
           "outputs":[{"serif":"特殊ですね"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),1)
        self.assertTrue("serif" in result[0])
        self.assertTrue(u"雨ですね" == result[0]["serif"] or u"晴れてますね" == result[0]["serif"] or u"曇ってますね" == result[0]["serif"] or u"特殊ですね" == result[0]["serif"])

        print json.dumps(result,ensure_ascii=False)
    def test_temp_not_match(self):
        """test_temp_not_match
        tempの設定にマッチしない場合、何も返さないことをテスト
        """

        speaker = weatherspeaker.create()

        debug_respose = """{
         "weather":[{"id":803}],
         "main":{"temp":29.9}
        }"""

        weatherspeaker.WeatherSpeaker.DEBUG_OWM_RESULT = json.loads(debug_respose)

        setting_json="""{
         "speaker":"weather",
         "owm_app_id":"7cd63966189e7e20afd65233f5dca42f",
         "owm_location_code":"1848354",
         "conditions":[
          {
           "temp":{
            "gt":30
           },
           "outputs":[{"serif":"暑いですね"}]
          },
          {
           "temp":{
            "lt":15
           },
           "outputs":[{"serif":"寒いですね"}]
          }
         ]
        }"""

        result = speaker.speak({},json.loads(setting_json,"utf-8"),[])

        self.assertEqual(len(result),0)
 def test_create(self):
     """test_create
     create関数からWeatherSpeakerを取得するテスト
     """
     speaker = weatherspeaker.create()
     self.assertIsInstance(speaker,weatherspeaker.WeatherSpeaker)
 def test_create(self):
     """test_create
     create関数からWeatherSpeakerを取得するテスト
     """
     speaker = weatherspeaker.create()
     self.assertIsInstance(speaker, weatherspeaker.WeatherSpeaker)