def update(db_session: Session, *, farm: Farm, farm_in: FarmUpdate): # If provided, handle the token update first. if farm_in.token is not None: # Check for existing token. old_token = crud.farm_token.get_farm_token(db_session, farm.id) # Create new token if none existing. if old_token is None: new_token = FarmTokenCreate(farm_id=farm.id, **farm_in.token.dict()) token = crud.farm_token.create_farm_token(db_session, token=new_token) # Update existing token. else: token = crud.farm_token.update_farm_token(db_session, token=old_token, token_in=farm_in.token) # Prevent deleting token del farm_in.token farm_data = jsonable_encoder(farm) update_data = farm_in.dict(exclude_unset=True) for field in farm_data: if field in update_data: setattr(farm, field, update_data[field]) db_session.add(farm) db_session.commit() db_session.refresh(farm) return farm
def test_create_farm_cant_delete_token(): """Ensure that the token cannot be removed when None is supplied.""" farm_name = random_lower_string() url = random_lower_string() # Provide a token on creation token = { 'access_token': random_lower_string(), 'expires_in': random_lower_string(), 'refresh_token': random_lower_string(), 'expires_at': 1581363344.0651991, } farm_in = FarmCreate( farm_name=farm_name, url=url, scope='user_access', token=token, ) farm = crud.farm.create(db_session, farm_in=farm_in) assert farm.farm_name == farm_name assert farm.url == url if settings.FARM_ACTIVE_AFTER_REGISTRATION: assert farm.active is True else: assert farm.active is False # Test that token was created assert farm.token is not None assert farm.token.access_token == token['access_token'] assert float(farm.token.expires_at) == token['expires_at'] assert farm.token.refresh_token == token['refresh_token'] assert farm.token.expires_in == token['expires_in'] farm_update = FarmUpdate( token=None, ) farm = crud.farm.update(db_session, farm=farm, farm_in=farm_update) assert farm.farm_name == farm_name assert farm.url == url # Check that the token is unchanged. assert farm.token is not None assert farm.token.access_token == token['access_token'] assert float(farm.token.expires_at) == token['expires_at'] assert farm.token.refresh_token == token['refresh_token'] assert farm.token.expires_in == token['expires_in'] # Remove farm from DB crud.farm.delete(db_session, farm_id=farm.id) farm = crud.farm.get_by_id(db_session, farm_id=farm.id) assert farm is None
def test_create_farm_update_token(): """Update the token after farm is created.""" farm_name = random_lower_string() url = random_lower_string() farm_in = FarmCreate( farm_name=farm_name, url=url, ) farm = crud.farm.create(db_session, farm_in=farm_in) assert farm.farm_name == farm_name assert farm.url == url assert farm.token is None if settings.FARM_ACTIVE_AFTER_REGISTRATION: assert farm.active is True else: assert farm.active is False # Create a new token new_token = { 'access_token': random_lower_string(), 'expires_in': random_lower_string(), 'refresh_token': random_lower_string(), 'expires_at': 1581363344.0651991, } farm_update = FarmUpdate(token=new_token, ) farm = crud.farm.update(db_session, farm=farm, farm_in=farm_update) assert farm.farm_name == farm_name assert farm.url == url # Test that token was created assert farm.token is not None assert farm.token.access_token == new_token['access_token'] assert float(farm.token.expires_at) == new_token['expires_at'] assert farm.token.refresh_token == new_token['refresh_token'] assert farm.token.expires_in == new_token['expires_in'] # Create a new token new_token = { 'access_token': '', 'expires_in': '', 'refresh_token': '', 'expires_at': None, } farm_update = FarmUpdate(token=new_token, ) farm = crud.farm.update(db_session, farm=farm, farm_in=farm_update) assert farm.farm_name == farm_name assert farm.url == url # Test that token was created assert farm.token is not None assert farm.token.access_token == new_token['access_token'] assert farm.token.expires_at == new_token['expires_at'] assert farm.token.refresh_token == new_token['refresh_token'] assert farm.token.expires_in == new_token['expires_in'] # Remove farm from DB crud.farm.delete(db_session, farm_id=farm.id) farm = crud.farm.get_by_id(db_session, farm_id=farm.id) assert farm is None