def setUp(self):
		self.inventory = GenericStorage()
		self.owner_inventory = GenericStorage()

		class Instance(object):
			def __init__(self, comp):
				self.comp = comp
			def get_component(self, x):
				class Comp(object):
					inventory = self.comp
				return Comp()

		self.tradepost = TradePostComponent()
		self.tradepost.instance = Instance(self.inventory)
		self.tradepost.instance.owner = Instance(self.owner_inventory)
		self.tradepost.initialize()

		class Timer(object):
			def add_call(self, x):
				pass
			def get_ticks(self, x):
				return 100
		Scheduler.create_instance(timer=Timer())
class TestTradePostComponent(TestCase):
	"""
	TODO: buy_resource, sell_resource (needs ships and player concept)
	"""

	def setUp(self):
		self.inventory = GenericStorage()
		self.owner_inventory = GenericStorage()

		class Instance(object):
			def __init__(self, comp):
				self.comp = comp
			def get_component(self, x):
				class Comp(object):
					inventory = self.comp
				return Comp()

		self.tradepost = TradePostComponent()
		self.tradepost.instance = Instance(self.inventory)
		self.tradepost.instance.owner = Instance(self.owner_inventory)
		self.tradepost.initialize()

		class Timer(object):
			def add_call(self, x):
				pass
			def get_ticks(self, x):
				return 100
		Scheduler.create_instance(timer=Timer())

	def tearDown(self):
		Scheduler.destroy_instance()

	def test_buy(self):
		self.owner_inventory.alter(RES.GOLD_ID, 1)
		self.assertFalse( self.tradepost.buy(1, 1, 1, 100) )
		self.tradepost.add_to_buy_list(1, 2)
		self.assertTrue( self.tradepost.buy(1, 1, 1, 100) )
		self.assertEqual( self.tradepost.buy_expenses, 1 )

		Scheduler().cur_tick += 1

		# ran out of money
		self.assertFalse( self.tradepost.buy(1, 1, 1, 100) )

		self.owner_inventory.alter(RES.GOLD_ID, 2)
		self.assertTrue( self.tradepost.buy(1, 1, 1, 100) )

		Scheduler().cur_tick += 1

		# only wanted to buy 2
		self.assertFalse( self.tradepost.buy(1, 1, 1, 100) )

		self.inventory.alter(1, -2)
		self.assertTrue( self.tradepost.buy(1, 1, 1, 100) )

		self.tradepost.remove_from_buy_list(1)
		# not buying any more
		self.assertFalse( self.tradepost.buy(1, 1, 1, 100) )
		self.assertEqual( self.tradepost.buy_expenses, 3 )
		self.assertEqual( self.tradepost.total_expenses, 3 )

	def test_sell(self):
		self.inventory.alter(1, 1)
		self.assertFalse( self.tradepost.sell(1, 1, 1, 100) )
		self.tradepost.add_to_sell_list(1, 0) # sell until 0
		self.assertTrue( self.tradepost.sell(1, 1, 1, 100) )
		self.assertEqual( self.tradepost.sell_income, 1 )

		Scheduler().cur_tick += 1

		# ran out of res
		self.assertFalse( self.tradepost.sell(1, 1, 1, 100) )

		Scheduler().cur_tick += 1

		self.inventory.alter(1, 1)
		self.assertTrue( self.tradepost.sell(1, 1, 1, 100) )


		self.tradepost.remove_from_sell_list(1)
		# not selling any more
		self.assertFalse( self.tradepost.sell(1, 1, 1, 100) )
		self.assertEqual( self.tradepost.sell_income, 2 )
		self.assertEqual( self.tradepost.total_earnings, 2 )