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