def test_act_direct_message(self): moxer = Mox() api = _create_default_mocks(moxer) _build_standard_config(moxer) bundle = _create_actor_and_delegates(api, moxer) actor = bundle.actor direct_id = 1 direct = moxer.CreateMock(twitter.DirectMessage) user = moxer.CreateMock(twitter.User) direct.id = direct_id direct.sender_screen_name = "mikemattozzi" direct.text = "why is blood spattered all over your car?" _return_direct_messages(api, [direct]) post = moxer.CreateMockAnything() post.id = 101 _return_replies(api, ()) TwitterResponseAccessor.get_by_message_id(str(direct_id)) ArtifactAccessor.search("spattered").AndReturn(create_content_list(10)) # response api.PostDirectMessage(direct.sender_screen_name, IgnoreArg()).AndReturn(post) TwitterResponseAccessor.create(str(direct.id), response_id=str(post.id), user=direct.sender_screen_name) post.AsDict().AndReturn({}) moxer.ReplayAll() actor.act() moxer.VerifyAll()
def test_mix_response(self): moxer = mox.Mox() moxer.StubOutWithMock(ArtifactAccessor, "search") inquiry = "how many elephants are in pakistan during winter" # queries from longest word to shortest until target results are reached ArtifactAccessor.search("elephants").AndReturn(create_content_list(5)) ArtifactAccessor.search("pakistan").AndReturn(create_content_list(5)) moxer.ReplayAll() sources, text = new_default_mixer().mix_response(inquiry) print text moxer.VerifyAll()
def test_mix_response_mix_contents_fails(self): m = mox.Mox() m.StubOutWithMock(ArtifactAccessor, "search") # m.StubOutWithMock(Mixer, "random_resource") m.StubOutWithMock(Mixer, "mix_random_limit_sources") inquiry = "elephants" # content should be short enough to make SentenceSpeaker fail ArtifactAccessor.search("elephants").AndReturn(tuple(e for e in MockQuery(xrange(1), create_call=lambda id: _content(id, 0)))) Mixer.mix_random_limit_sources(1).AndReturn(self.__default_mix_results()) #Mixer.random_resource().AndReturn(MockEntity(key_name="failblog", url="http://failblog.org")) m.ReplayAll() sources, text = new_default_mixer().mix_response(inquiry) m.VerifyAll()
def test_mix_response_no_search_results(self): m = mox.Mox() m.StubOutWithMock(ArtifactAccessor, "search") # m.StubOutWithMock(Mixer, "random_resource") m.StubOutWithMock(Mixer, "mix_random_limit_sources") inquiry = "elephants" # no search results returned ArtifactAccessor.search("elephants").AndReturn(()) Mixer.mix_random_limit_sources(1).AndReturn(self.__default_mix_results()) # Mixer.random_resource().AndReturn(MockEntity(key_name="failblog", url="http://failblog.org")) m.ReplayAll() sources, text = new_default_mixer().mix_response(inquiry) m.VerifyAll()
def test_mix_response_no_search_results(self): m = mox.Mox() m.StubOutWithMock(ArtifactAccessor, "search") # m.StubOutWithMock(Mixer, "random_resource") m.StubOutWithMock(Mixer, "mix_random_limit_sources") inquiry = "elephants" # no search results returned ArtifactAccessor.search("elephants").AndReturn(()) Mixer.mix_random_limit_sources(1).AndReturn( self.__default_mix_results()) # Mixer.random_resource().AndReturn(MockEntity(key_name="failblog", url="http://failblog.org")) m.ReplayAll() sources, text = new_default_mixer().mix_response(inquiry) m.VerifyAll()
def test_mix_response_mix_contents_fails(self): m = mox.Mox() m.StubOutWithMock(ArtifactAccessor, "search") # m.StubOutWithMock(Mixer, "random_resource") m.StubOutWithMock(Mixer, "mix_random_limit_sources") inquiry = "elephants" # content should be short enough to make SentenceSpeaker fail ArtifactAccessor.search("elephants").AndReturn( tuple(e for e in MockQuery(xrange(1), create_call=lambda id: _content(id, 0)))) Mixer.mix_random_limit_sources(1).AndReturn( self.__default_mix_results()) #Mixer.random_resource().AndReturn(MockEntity(key_name="failblog", url="http://failblog.org")) m.ReplayAll() sources, text = new_default_mixer().mix_response(inquiry) m.VerifyAll()
def search(request): t = loader.get_template("search.html") q = request.REQUEST.get("q", None) contents = None if not q: msg = "no query provided" else: q = urllib.unquote(q) contents = ArtifactAccessor.search(q) msg = "%d results found for query '%s'" % (len(contents), q) c = Context(dict(msg=msg, contents=contents)) return HttpResponse(t.render(c))
def mix_response(self, message, min_results=10, **kw): # find longest word in message words = [w for w in message.split()] sorted_words = sorted(words, key=lambda w: len(w), reverse=True) # searches from longest word to shortest until result count > min result threshold contents = [] for w in sorted_words: results = ArtifactAccessor.search(w) logging.debug("search for '%s' found %d result(s)" % (w, len(results))) contents.extend(results) if len(contents) >= min_results: break are_results_mixed = False if contents: # mix search results try: result = self.__mix_contents(contents, **kw) are_results_mixed = True except MissingDataException, e: logging.error(traceback.print_exc())
def mix_after_search(self, term, **kw): contents = ArtifactAccessor.search(term) return self.__mix_contents(contents, **kw)
def _search_results(term, results): ArtifactAccessor.search(term).AndReturn(results)