def test_delete_subscription_by_id__http_error_code__raises_api_error(
        error_code):
    response = Mock()
    response.status_code = error_code

    request_handler = Mock()
    request_handler.delete = Mock(return_value=response)

    client = SubscriptionManagerClient(request_handler=request_handler)

    with pytest.raises(APIError):
        client.delete_subscription_by_id(1)
def test_unsubscribe__sm_api_error__raises_SubscriptionManagerServiceError():
    subscription = Subscription(id=1, queue=uuid.uuid4().hex)

    sm_client = SubscriptionManagerClient(mock.Mock())

    sm_service = SubscriptionManagerService(sm_client)

    sm_service._get_subscription_by_queue = mock.Mock(return_value=subscription)

    sm_client.delete_subscription_by_id = mock.Mock(side_effect=APIError('server error', status_code=500))

    with pytest.raises(SubscriptionManagerServiceError) as e:
        sm_service.unsubscribe(subscription.queue)
    assert f"Error while deleting subscription '{subscription.id}': [500] - server error" == str(e.value)
def test_delete_subscription_by_id():
    response = Mock()
    response.status_code = 204
    response.content = {}
    response.json = Mock(return_value={})

    request_handler = Mock()
    request_handler.delete = Mock(return_value=response)

    client = SubscriptionManagerClient(request_handler=request_handler)

    subscription = client.delete_subscription_by_id(1)

    called_url = request_handler.delete.call_args[0][0]
    assert BASE_URL + 'subscriptions/1' == called_url
def test_unsubscribe__no_errors():
    subscription = Subscription(id=1, queue=uuid.uuid4().hex)

    sm_client = SubscriptionManagerClient(mock.Mock())

    sm_service = SubscriptionManagerService(sm_client)

    sm_service._get_subscription_by_queue = mock.Mock(return_value=subscription)

    sm_client.delete_subscription_by_id = mock.Mock()

    sm_service.unsubscribe(subscription.queue)

    called_subscription_id = sm_client.delete_subscription_by_id.call_args[0][0]

    assert subscription.id == called_subscription_id