final SpeakerNPC barMaid = (SpeakerNPC) zone.getNPCList().get(0);
assertThat(barMaid.getName(), is("Siandra"));
final Engine engine = barMaid.getEngine();
engine.setCurrentState(ConversationStates.ATTENDING);
Sentence sentence = new SentenceImplementation(new Expression("offer", ExpressionType.VERB));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.ATTENDING));
assertThat("offer text", getReply(barMaid), equalTo("I buy pieces of cheese, pieces of meat, spinaches, pieces of ham, sacks of flour, and porcini."));
final Expression sell = new Expression("sell", ExpressionType.VERB);
sentence = new SentenceImplementation(sell);
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.ATTENDING));
assertThat("offer text", getReply(barMaid), is("Please tell me what you want to sell."));
sentence = new SentenceImplementation(sell, new Expression("cheese", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A piece of cheese is worth 5. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
sentence = new SentenceImplementation(sell, new Expression("meat", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A piece of meat is worth 10. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
sentence = new SentenceImplementation(sell, new Expression("spinach", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A spinach is worth 15. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
sentence = new SentenceImplementation(sell, new Expression("ham", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A piece of ham is worth 20. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
sentence = new SentenceImplementation(sell, new Expression("flour", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A sack of flour is worth 25. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
sentence = new SentenceImplementation(sell, new Expression("porcini", ExpressionType.OBJECT));
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("A porcino is worth 30. Do you want to sell it?"));
engine.setCurrentState(ConversationStates.ATTENDING);
final Expression porcini = new Expression("porcini", ExpressionType.OBJECT);
porcini.setAmount(2);
sentence = new SentenceImplementation(sell, porcini);
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("2 porcini are worth 60. Do you want to sell them?"));
engine.setCurrentState(ConversationStates.ATTENDING);
final Expression flour = new Expression("flour", ExpressionType.OBJECT);
flour.setAmount(2);
sentence = new SentenceImplementation(sell, flour);
engine.step(PlayerTestHelper.createPlayer("bob"), sentence);
assertThat(engine.getCurrentState(), is(ConversationStates.SELL_PRICE_OFFERED));
assertThat("offer text", getReply(barMaid), is("2 sacks of flour are worth 50. Do you want to sell them?"));
}