1 /* $Id$ */ 2 /*************************************************************************** 3 * (C) Copyright 2003-2010 - Stendhal * 4 *************************************************************************** 5 *************************************************************************** 6 * * 7 * This program is free software; you can redistribute it and/or modify * 8 * it under the terms of the GNU General Public License as published by * 9 * the Free Software Foundation; either version 2 of the License, or * 10 * (at your option) any later version. * 11 * * 12 ***************************************************************************/ 13 package games.stendhal.server.entity.npc.behaviour.impl; 14 15 import static org.junit.Assert.assertEquals; 16 import static org.junit.Assert.assertNull; 17 import static org.junit.Assert.assertTrue; 18 import static utilities.SpeakerNPCTestHelper.getReply; 19 20 import java.util.HashMap; 21 import java.util.Map; 22 23 import org.junit.BeforeClass; 24 import org.junit.Test; 25 26 import games.stendhal.server.core.engine.RPClassGenerator; 27 import games.stendhal.server.entity.npc.SpeakerNPC; 28 import games.stendhal.server.entity.npc.behaviour.adder.SellerAdder; 29 import games.stendhal.server.entity.player.Player; 30 import utilities.PlayerTestHelper; 31 32 public class SellerBehaviourTest { 33 34 @BeforeClass setUpBeforeClass()35 public static void setUpBeforeClass() throws Exception { 36 new RPClassGenerator().createRPClassesWithoutBaking(); // for Player, NPC and TradeStateChangeEvent RPClasses 37 } 38 39 /** 40 * Tests for sellerBehaviour. 41 */ 42 @Test testSellerBehaviour()43 public void testSellerBehaviour() { 44 final SellerBehaviour sb = new SellerBehaviour(); 45 assertTrue(sb.dealtItems().isEmpty()); 46 assertTrue(sb.getItemNames().isEmpty()); 47 } 48 49 /** 50 * Tests for sellerBehaviourMapOfStringInteger. 51 */ 52 @Test testSellerBehaviourMapOfStringInteger()53 public void testSellerBehaviourMapOfStringInteger() { 54 55 final Map<String, Integer> pricelist = new HashMap<String, Integer>(); 56 SellerBehaviour sb = new SellerBehaviour(pricelist); 57 assertTrue(sb.dealtItems().isEmpty()); 58 assertTrue(sb.getItemNames().isEmpty()); 59 60 pricelist.put("item1", 10); 61 pricelist.put("item2", 20); 62 63 sb = new SellerBehaviour(pricelist); 64 assertEquals(sb.dealtItems().size(), 2); 65 assertTrue(sb.dealtItems().contains("item1")); 66 assertTrue(sb.dealtItems().contains("item2")); 67 } 68 69 /** 70 * Tests for bottlesGlasses. 71 */ 72 @Test testBottlesGlasses()73 public void testBottlesGlasses() { 74 final Map<String, Integer> pricelist = new HashMap<String, Integer>(); 75 pricelist.put("dingo", 3); 76 pricelist.put("dagger", 200); 77 78 final SellerBehaviour sb = new SellerBehaviour(pricelist); 79 final SpeakerNPC npc = new SpeakerNPC("npc"); 80 npc.addGreeting("blabla"); 81 new SellerAdder().addSeller(npc, sb); 82 final Player player = PlayerTestHelper.createPlayer("bob"); 83 84 npc.getEngine().step(player, "hi"); 85 npc.getEngine().step(player, "buy 1 potion"); 86 assertEquals("Sorry, I don't sell bottles of potion.", getReply(npc)); 87 88 npc.getEngine().step(player, "buy wine"); 89 assertEquals("Sorry, I don't sell glasses of wine.", getReply(npc)); 90 91 npc.getEngine().step(player, "buy 1 glass of wine"); 92 assertEquals("Sorry, I don't sell glasses of wine.", getReply(npc)); 93 94 npc.getEngine().step(player, "buy 1 bottle of wine"); 95 assertEquals("Sorry, I don't sell glasses of wine.", getReply(npc)); 96 97 npc.getEngine().step(player, "buy dagger"); 98 assertEquals("A dagger will cost 200. Do you want to buy it?", getReply(npc)); 99 npc.getEngine().step(player, "yes"); 100 assertEquals("Sorry, you don't have enough money!", getReply(npc)); 101 102 PlayerTestHelper.equipWithMoney(player, 200); 103 npc.getEngine().step(player, "buy dagger"); 104 assertEquals("A dagger will cost 200. Do you want to buy it?", getReply(npc)); 105 npc.getEngine().step(player, "yes"); 106 assertEquals("Congratulations! Here is your dagger!", getReply(npc)); 107 assertTrue(player.isEquipped("dagger", 1)); 108 assertEquals(0, player.getTotalNumberOf("money")); 109 110 PlayerTestHelper.equipWithMoney(player, 600); 111 npc.getEngine().step(player, "buy three daggers"); 112 assertEquals("You can only buy one dagger at a time. A dagger will cost 200. Do you want to buy it?", getReply(npc)); 113 npc.getEngine().step(player, "yes"); 114 assertEquals("Congratulations! Here is your dagger!", getReply(npc)); 115 assertNull(PlayerTestHelper.getPrivateReply(player)); 116 assertEquals(2, player.getTotalNumberOf("dagger")); 117 assertEquals(400, player.getTotalNumberOf("money")); 118 } 119 120 /** 121 * Tests for selling scrolls. 122 */ 123 @Test testScrolls()124 public void testScrolls() { 125 final Map<String, Integer> pricelist = new HashMap<String, Integer>(); 126 pricelist.put("fado city scroll", 1000); 127 pricelist.put("empty scroll", 3000); 128 final SellerBehaviour sb = new SellerBehaviour(pricelist); 129 final SpeakerNPC npc = new SpeakerNPC("npc"); 130 npc.addGreeting("Hello!"); 131 new SellerAdder().addSeller(npc, sb); 132 final Player player = PlayerTestHelper.createPlayer("bob"); 133 134 npc.getEngine().step(player, "hi"); 135 assertEquals("Hello!", getReply(npc)); 136 137 npc.getEngine().step(player, "buy fado city scroll"); 138 assertEquals("A fado city scroll will cost 1000. Do you want to buy it?", getReply(npc)); 139 npc.getEngine().step(player, "no"); 140 141 npc.getEngine().step(player, "buy two empty scrolls"); 142 assertEquals("2 empty scrolls will cost 6000. Do you want to buy them?", getReply(npc)); 143 npc.getEngine().step(player, "no"); 144 assertEquals("Ok, how else may I help you?", getReply(npc)); 145 146 npc.getEngine().step(player, "buy scroll"); 147 assertEquals("There is more than one scroll. Please specify which sort of scroll you want to buy.", getReply(npc)); 148 149 npc.getEngine().step(player, "buy anything-else"); 150 assertEquals("Sorry, I don't sell anything-elses.", getReply(npc)); 151 } 152 153 } 154