예제 #1
0
def update_auction(*, id: int,
                   auction_in: AuctionUpdate,
                   ending_date: datetime = Body(None),
                   db: Session = Depends(get_db)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    return auction_repo.update_with_date(db, db_obj=auction, obj_in=auction_in, ending_date=ending_date)
예제 #2
0
 def end_auction(cls, id: int):
     try:
         db = SessionLocal()
         english = EnglishAuction()
         auction = auction_repo.get(db, id=id)
         english.end(db, db_obj=auction)
     finally:
         db.close()
예제 #3
0
def buy_it_now(*,
               id: int,
               db: Session = Depends(get_db),
               current_user: User = Depends(get_current_active_user)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    english = EnglishAuction()
    return english.buy_it_now(db, db_obj=auction, buyer_id=current_user.id)
예제 #4
0
def start_auction(*,
                  id: int,
                  starting_date: datetime = Body(None),
                  db: Session = Depends(get_db)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    english = EnglishAuction()
    return english.start(db, db_obj=auction, starting_date=starting_date)
def test_start(db: Session):
    auction = create_random_auction(db)

    assert auction.state == AuctionState.CREATED

    english = EnglishAuction()
    ending_date = (datetime.now() + timedelta(days=1)).isoformat()
    english.start(db, db_obj=auction, ending_date=ending_date)

    auction = auction_repo.get(db, id=auction.id)
    assert auction.state == AuctionState.ONGOING
예제 #6
0
def bid_in_auction(*,
                   id: int,
                   amount: float = Body(...),
                   db: Session = Depends(get_db),
                   current_user: User = Depends(get_current_active_user)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    english = EnglishAuction()
    return english.bid(db,
                       db_obj=auction,
                       amount=amount,
                       bidder_id=current_user.id)
def test_buy_it_now(db: Session):
    auction = create_random_auction(db)
    english = EnglishAuction()
    ending_date = (datetime.now() + timedelta(days=1)).isoformat()
    english.start(db, db_obj=auction, ending_date=ending_date)
    assert auction.state == AuctionState.ONGOING

    buyer = create_random_user(db)
    english.buy_it_now(db, db_obj=auction, buyer_id=buyer.id)
    db_obj = auction_repo.get(db, id=auction.id)

    assert db_obj.state == AuctionState.ENDED
    assert db_obj.current_bid_amount == db_obj.bid_cap
    assert db_obj.final_winner_id == buyer.id
def test_bid(db: Session):
    auction = create_random_auction(db)
    english = EnglishAuction()
    ending_date = (datetime.now() + timedelta(days=1)).isoformat()
    english.start(db, db_obj=auction, ending_date=ending_date)
    assert auction.state == AuctionState.ONGOING

    amount = auction.starting_amount + 1
    bidder = create_random_user(db)
    english.bid(db, db_obj=auction, amount=amount, bidder_id=bidder.id)

    db_obj = auction_repo.get(db, id=auction.id)
    assert db_obj.current_bid_amount == amount + 1.25
    assert db_obj.last_bid_at
    assert db_obj.winning_bid.amount == amount
    assert db_obj.bids
def test_end_when_reserve_not_met(db: Session):
    auction = create_random_auction(db)
    english = EnglishAuction()
    ending_date = (datetime.now() + timedelta(days=1)).isoformat()
    english.start(db, db_obj=auction, ending_date=ending_date)
    assert auction.state == AuctionState.ONGOING

    amount = auction.current_bid_amount + 2
    bidder = create_random_user(db)
    english.bid(db, db_obj=auction, amount=amount, bidder_id=bidder.id)
    db_obj = auction_repo.get(db, id=auction.id)

    assert db_obj.winning_bid

    english.end(db, db_obj=db_obj)
    assert db_obj.state == AuctionState.CANCLED
    assert not db_obj.final_winner_id
예제 #10
0
def end_auction(*, id: int,
                db: Session = Depends(get_db),
                current_user: User = Depends(get_current_active_user)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION

    if auction.state != AuctionState.ONGOING:
        if auction.state == AuctionState.CREATED:
            raise AUCTION_NOT_STARTED_EXCEPTION
        elif auction.state == AuctionState.ENDED:
            raise AUCTION_ENDED_EXCEPTION
        elif auction.state == AuctionState.CANCLED:
            raise AUCTION_CANCELED_EXCEPTION

    english = EnglishAuction()
    return english.end(db, db_obj=auction)
예제 #11
0
def bid_in_auction(*, id: int,
                   amount: float = Body(...),
                   db: Session = Depends(get_db),
                   current_user: User = Depends(get_current_active_user)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION

    if auction.state != AuctionState.ONGOING:
        if auction.state == AuctionState.CREATED:
            raise AUCTION_NOT_STARTED_EXCEPTION
        elif auction.state == AuctionState.ENDED:
            raise AUCTION_ENDED_EXCEPTION
        elif auction.state == AuctionState.CANCLED:
            raise AUCTION_CANCELED_EXCEPTION

    english = EnglishAuction()
    return english.bid(db, db_obj=auction, amount=amount, bidder_id=current_user.id)
예제 #12
0
def start_auction(*, id: int,
                  starting_date: datetime = Body(None),
                  ending_date: datetime = Body(...),
                  db: Session = Depends(get_db),
                  current_user: User = Depends(get_current_active_user)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION

    if auction.state != AuctionState.CREATED:
        if auction.state == AuctionState.ONGOING:
            raise AUCTION_ONGOING_EXCEPTION
        elif auction.state == AuctionState.ENDED:
            raise AUCTION_ENDED_EXCEPTION
        elif auction.state == AuctionState.CANCLED:
            raise AUCTION_CANCELED_EXCEPTION

    english = EnglishAuction()
    return english.start(db, db_obj=auction, starting_date=starting_date, ending_date=ending_date)
예제 #13
0
def test_create_auction(db: Session):
    product = create_random_product(db)
    starting_amount = random_float()
    reserve = starting_amount + random_float()
    bid_cap = reserve + random_float()
    owner = product.owner

    auction = auction_repo.create(db,
                                  obj_in=AuctionCreate(
                                      product_id=product.id,
                                      starting_amount=starting_amount,
                                      reserve=reserve,
                                      bid_cap=bid_cap))

    db_obj = auction_repo.get(db, id=auction.id)

    assert db_obj
    assert db_obj.product_id == product.id
    assert db_obj.starting_amount == starting_amount
    assert db_obj.reserve == reserve
    assert db_obj.bid_cap == bid_cap
    assert db_obj.state == AuctionState.CREATED
예제 #14
0
def get_auction(*, id: int, db: Session = Depends(get_db)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    return auction
예제 #15
0
def end_auction(*, id: int, db: Session = Depends(get_db)):
    auction = auction_repo.get(db, id=id)
    if not auction:
        raise AUCTION_NOT_FOUND_EXCEPTION
    english = EnglishAuction()
    return english.end(db, db_obj=auction)