Ejemplo n.º 1
0
class TestAuction(unittest.TestCase):
    def setUp(self):
        self.auction1 = Auction(timestamp=2,
                                user_id=1,
                                item="pc1",
                                reserve_price=150,
                                close_time=20)

    def tearDown(self):
        pass

    def test_selling_details(self):
        # Testing selling details
        self.assertEqual(self.auction1.item, "pc1")
        self.assertEqual(self.auction1.selling_details["timestamp"], 2)
        self.assertEqual(self.auction1.selling_details["user_id"], 1)
        self.assertEqual(self.auction1.selling_details["reserve_price"], 150)
        self.assertEqual(self.auction1.selling_details["close_time"], 20)

    def test_bid(self):
        # Test Bidding 0
        instruction1 = [12, '8', 'BID', 'pc1', '0']
        self.assertFalse(self.auction1.bid(instruction1))

        instruction2 = [15, '8', 'BID', 'pc1', '6']
        self.assertTrue(self.auction1.bid(instruction2))

        # Testing Bidding lower than the the current highest bid
        instruction3 = [16, '8', 'BID', 'pc1', '5']
        self.assertFalse(self.auction1.bid(instruction3))

        instruction4 = [16, '8', 'BID', 'pc1', '20']
        self.assertTrue(self.auction1.bid(instruction4))

        # Testing Bidding after closing time
        instruction5 = [22, '8', 'BID', 'pc1', '15']
        self.assertFalse(self.auction1.bid(instruction5))

        # Test if winning_details fields were correctly affected
        self.assertEqual(self.auction1.winning_bid['lowest_bid'], 6)
        self.assertEqual(self.auction1.winning_bid['highest_bid'], 20)
        self.assertEqual(self.auction1.winning_bid['total_bid_count'], 2)
        self.assertEqual(self.auction1.winning_bid['price_paid'].queue,
                         [20, 6, 0])

    def test_solve_price_paid(self):
        #Test no bids made
        self.assertEqual(self.auction1.solve_price_paid(), 0)
        #Test one bid made
        self.auction1.winning_bid['price_paid'].enqueue(0)
        self.auction1.winning_bid['price_paid'].enqueue(10)
        self.assertEqual(self.auction1.solve_price_paid(), 0.0)
        #Test more than one bid
        self.auction1.winning_bid['price_paid'].enqueue(0)
        self.auction1.winning_bid['price_paid'].enqueue(10)
        self.auction1.winning_bid['price_paid'].enqueue(150)
        self.assertEqual(self.auction1.solve_price_paid(), 10)
Ejemplo n.º 2
0
    def read_actions(self):
        """
        This method is reading the type of instruction and deciding what to do with each of them.

        -For selling instructions it will create an object of type Auction() and added to a structure list_of_auctions.

        -For bidding instructions it will find the Auction object and make a bid on it.
        """
        # For Selling instructions
        if len(self.instruction) == 6:
            # Append a new auction to the list of auctions
            auction = Auction(timestamp=self.instruction[0],
                              user_id=self.instruction[1],
                              item=self.instruction[3],
                              reserve_price=self.instruction[4],
                              close_time=self.instruction[5])
            self.add_auctions(self.instruction[5], auction)
        # For Bidding instructions
        elif len(self.instruction) == 5:
            # Find the auction to bid
            auction = self.find_auction(self.instruction[3])
            if auction is not None:
                auction.bid(self.instruction)