async def test_cleaning_with_accepted_offer( db: Database, test_user2: UserInDB, test_user3: UserInDB, test_user_list: List[UserInDB]) -> CleaningInDB: cleaning_repo = CleaningsRepository(db) offers_repo = OffersRepository(db) new_cleaning = CleaningCreate( name="cleaning with offers", description="desc for cleaning", price=9.99, cleaning_type="full_clean", ) created_cleaning = await cleaning_repo.create_cleaning( new_cleaning=new_cleaning, requesting_user=test_user2) offers = [] for user in test_user_list: offers.append( await offers_repo.create_offer_for_cleaning(new_offer=OfferCreate( cleaning_id=created_cleaning.id, user_id=user.id))) await offers_repo.accept_offer( offer=[o for o in offers if o.user_id == test_user3.id][0], offer_update=OfferUpdate(status="accepted")) return created_cleaning
async def test_cleaning_with_accepted_offer( db: Database, test_user2: UserInDB, test_user3: UserInDB, test_user_list: List[UserInDB]) -> CleaningInDB: ''' We're creating a cleaning with offers from everyone in the test_user_list and having test_user2 accept the offer from test_user3. ''' cleaning_repo = CleaningsRepository(db) offers_repo = OffersRepository(db) new_cleaning = CleaningCreate( name='cleaning with offers', description='desc for cleaning', price=9.99, cleaning_type='full_clean', ) created_cleaning = await cleaning_repo.create_cleaning( new_cleaning=new_cleaning, requesting_user=test_user2) offers = [] for user in test_user_list: offers.append( await offers_repo.create_offer_for_cleaning(new_offer=OfferCreate( cleaning_id=created_cleaning.id, user_id=user.id))) await offers_repo.accept_offer( offer=[offer for offer in offers if offer.user_id == test_user3.id][0], offer_update=OfferUpdate(status='accepted')) return created_cleaning
async def create_offer( cleaning: CleaningInDB = Depends(get_cleaning_by_id_from_path), current_user: UserInDB = Depends(get_current_active_user), offers_repo: OffersRepository = Depends(get_repository(OffersRepository)), ) -> OfferPublic: return await offers_repo.create_offer_for_cleaning( new_offer=OfferCreate(cleaning_id=cleaning.id, user_id=current_user.id) )
async def create_offer_for_cleaning(self, *, new_offer: OfferCreate) -> OfferInDB: created_offer = await self.db.fetch_one( query=CREATE_OFFER_FOR_CLEANING_QUERY, values={ **new_offer.dict(), "status": "pending" }) return OfferInDB(**created_offer)
async def create_offer_for_cleaning(self, *, new_offer: OfferCreate) -> OfferInDB: try: created_offer = await self.db.fetch_one( query=CREATE_OFFER_FOR_CLEANING_QUERY, values={ **new_offer.dict(), "status": "pending" }) return OfferInDB(**created_offer) except UniqueViolationError: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail= "Users aren't allowed create more than one offer for a cleaning job.", )
async def create_offer_for_cleaning(self, *, new_offer: OfferCreate) -> OfferInDB: try: created_offer = await self.db.fetch_one( query=CREATE_OFFER_FOR_CLEANING_QUERY, values={**new_offer.dict(), "status": "pending"} ) return OfferInDB(**created_offer) # this looks very familiar to the 403 unauthorized request we've refactored all # over the place into its own dependency. Catching a UniqueViolationError as a # way to prevent duplicate entries is another permissions issue. When we see # this, our thinking should go directly to dependencies. except UniqueViolationError: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Users aren't allowed create more than one offer for a cleaning job.", )
async def test_cleaning_with_offers( db: Database, test_user2: UserInDB, test_user_list: List[UserInDB]) -> CleaningInDB: cleaning_repo = CleaningsRepository(db) offers_repo = OffersRepository(db) new_cleaning = CleaningCreate( name="cleaning with offers", description="desc for cleaning", price=9.99, cleaning_type="full_clean", ) created_cleaning = await cleaning_repo.create_cleaning( new_cleaning=new_cleaning, requesting_user=test_user2) for user in test_user_list: await offers_repo.create_offer_for_cleaning(new_offer=OfferCreate( cleaning_id=created_cleaning.id, user_id=user.id)) return created_cleaning
async def create_cleaning_with_evaluation_offer_helper( db: Database, owner: UserInDB, cleaner: UserInDB, cleaning_create: CleaningCreate, evaluation_create: EvaluationCreate) -> CleaningInDB: cleaning_repo = CleaningsRepository(db) offers_repo = OffersRepository(db) evals_repo = EvaluationsRepository(db) created_cleaning = await cleaning_repo.create_cleaning( new_cleaning=cleaning_create, requesting_user=owner) offer = await offers_repo.create_offer_for_cleaning(new_offer=OfferCreate( cleaning_id=created_cleaning.id, user_id=cleaner.id)) await offers_repo.accept_offer(offer=offer, offer_update=OfferUpdate(status="accepted")) await evals_repo.create_evaluation_for_cleaner( evaluation_create=evaluation_create, cleaning=created_cleaning, cleaner=cleaner, ) return created_cleaning