Exemple #1
0
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
Exemple #3
0
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