From b12a850e93409325c486e1a03271d07bcbf10490 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 26 Nov 2016 22:15:45 +0100 Subject: [PATCH] Add unit tests for contrib Barter system. --- evennia/contrib/barter.py | 24 +++++------ evennia/contrib/tests.py | 84 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 12 deletions(-) diff --git a/evennia/contrib/barter.py b/evennia/contrib/barter.py index 578a9f5dc..48f273418 100644 --- a/evennia/contrib/barter.py +++ b/evennia/contrib/barter.py @@ -165,24 +165,24 @@ class TradeHandler(object): self.partA_accepted = False self.partB_accepted = False - def msg(self, party, string): + def msg_other(self, sender, string): """ - Relay a message to the other party. This allows the calling - command to not have to worry about which party they are in the - handler. + Relay a message to the *other* party without needing to know + which party that is. This allows the calling command to not + have to worry about which party they are in the handler. Args: - party (object): One of partA or B. The method will figure - out which is which. + sender (object): One of partA or B. The method will figure + out the *other* party to send to. string (str): Text to send. """ - if self.partA == party: + if self.partA == sender: self.partB.msg(string) - elif self.partB == party: + elif self.partB == sender: self.partA.msg(string) else: # no match, relay to oneself - self.party.msg(string) + sender.msg(string) if sender else self.partA.msg(string) def get_other(self, party): """ @@ -225,7 +225,7 @@ class TradeHandler(object): """ if self.partB == partB: - self.finish() + self.finish(force=True) return True return False @@ -285,7 +285,7 @@ class TradeHandler(object): return all_offers[imatch] except ValueError: for offer in all_offers: - if offername in offer.aliases: + if offer.aliases.get(offername): return offer return None @@ -396,7 +396,7 @@ class CmdTradeBase(Command): self.partB = self.tradehandler.partB self.other = self.tradehandler.get_other(self.caller) - self.msg_other = self.tradehandler.msg + self.msg_other = self.tradehandler.msg_other self.trade_started = self.tradehandler.trade_started self.emote = "" diff --git a/evennia/contrib/tests.py b/evennia/contrib/tests.py index 41becbce3..124b90d72 100644 --- a/evennia/contrib/tests.py +++ b/evennia/contrib/tests.py @@ -210,3 +210,87 @@ class TestExtendedRoom(CommandTest): def test_cmdgametime(self): self.call(extended_room.CmdGameTime(), "", "It's a summer day, in the morning.") + + +# Test the contrib barter system + +from evennia import create_object +from evennia.contrib import barter + +class TestBarter(CommandTest): + + def setUp(self): + super(TestBarter, self).setUp() + self.tradeitem1 = create_object(key="TradeItem1", location=self.char1) + self.tradeitem2 = create_object(key="TradeItem2", location=self.char1) + self.tradeitem3 = create_object(key="TradeItem3", location=self.char2) + + def test_tradehandler_base(self): + self.char1.msg = Mock() + self.char2.msg = Mock() + # test all methods of the tradehandler + handler = barter.TradeHandler(self.char1, self.char2) + self.assertEqual(handler.partA, self.char1) + self.assertEqual(handler.partB, self.char2) + handler.msg_other(self.char1, "Want to trade?") + handler.msg_other(self.char2, "Yes!") + handler.msg_other(None, "Talking to myself...") + self.assertEqual(self.char2.msg.mock_calls[0][1][0], "Want to trade?") + self.assertEqual(self.char1.msg.mock_calls[0][1][0], "Yes!") + self.assertEqual(self.char1.msg.mock_calls[1][1][0], "Talking to myself...") + self.assertEqual(handler.get_other(self.char1), self.char2) + + def test_tradehandler_joins(self): + handler = barter.TradeHandler(self.char1, self.char2) + self.assertTrue(handler.join(self.char2)) + self.assertTrue(handler.unjoin(self.char2)) + self.assertFalse(handler.join(self.char1)) + self.assertFalse(handler.unjoin(self.char1)) + + def test_tradehandler_offers(self): + handler = barter.TradeHandler(self.char1, self.char2) + handler.join(self.char2) + handler.offer(self.char1, self.tradeitem1, self.tradeitem2) + self.assertEqual(handler.partA_offers, [self.tradeitem1, self.tradeitem2]) + self.assertFalse(handler.partA_accepted) + self.assertFalse(handler.partB_accepted) + handler.offer(self.char2, self.tradeitem3) + self.assertEqual(handler.list(), ([self.tradeitem1, self.tradeitem2], [self.tradeitem3])) + self.assertEqual(handler.search("TradeItem2"), self.tradeitem2) + self.assertEqual(handler.search("TradeItem3"), self.tradeitem3) + self.assertEqual(handler.search("nonexisting"), None) + self.assertFalse(handler.finish()) # should fail since offer not yet accepted + handler.accept(self.char1) + handler.decline(self.char1) + handler.accept(self.char2) + handler.accept(self.char1) # should trigger handler.finish() automatically + self.assertEqual(self.tradeitem1.location, self.char2) + self.assertEqual(self.tradeitem2.location, self.char2) + self.assertEqual(self.tradeitem3.location, self.char1) + + def test_cmdtrade(self): + self.call(barter.CmdTrade(), "Char2 : Hey wanna trade?", "You say, \"Hey wanna trade?\"", caller=self.char1) + self.call(barter.CmdTrade(), "Char decline : Nope!", "You say, \"Nope!\"", caller=self.char2) + self.call(barter.CmdTrade(), "Char2 : Hey wanna trade?", "You say, \"Hey wanna trade?\"", caller=self.char1) + self.call(barter.CmdTrade(), "Char accept : Sure!", "You say, \"Sure!\"", caller=self.char2) + self.call(barter.CmdOffer(), "TradeItem3", "Your trade action: You offer TradeItem3",caller=self.char2) + self.call(barter.CmdOffer(), "TradeItem1 : Here's my offer.", "You say, \"Here's my offer.\"\n [You offer TradeItem1]") + self.call(barter.CmdAccept(), "", "Your trade action: You accept the offer. Char2 must now also accept") + self.call(barter.CmdDecline(), "", "Your trade action: You change your mind, declining the current offer.") + self.call(barter.CmdAccept(),": Sounds good.", "You say, \"Sounds good.\"\n" + " [You accept the offer. Char must now also accept.", caller=self.char2) + self.call(barter.CmdDecline(), ":No way!", "You say, \"No way!\"\n [You change your mind, declining the current offer.]", caller=self.char2) + self.call(barter.CmdOffer(), "TradeItem1, TradeItem2 : My final offer!", "You say, \"My final offer!\"\n [You offer TradeItem1 and TradeItem2]") + self.call(barter.CmdAccept(), "", "Your trade action: You accept the offer. Char2 must now also accept.", caller=self.char1) + self.call(barter.CmdStatus(), "", "Offered by Char:", caller=self.char2) + self.tradeitem1.db.desc = "A great offer." + self.call(barter.CmdEvaluate(), "TradeItem1", "A great offer.") + self.call(barter.CmdAccept(), ":Ok then.", "You say, \"Ok then.\"\n [You accept the deal.", caller=self.char2) + self.assertEqual(self.tradeitem1.location, self.char2) + self.assertEqual(self.tradeitem2.location, self.char2) + self.assertEqual(self.tradeitem3.location, self.char1) + + def test_cmdtradehelp(self): + self.call(barter.CmdTrade(), "Char2 : Hey wanna trade?", "You say, \"Hey wanna trade?\"", caller=self.char1) + self.call(barter.CmdTradeHelp(), "", "Trading commands\n", caller=self.char1) +