def test_it_throws_if_request_goes_wrong(
        mock_requests:                mock.Mock,
        create_adapter:               SupportsPerformingTranslations,
):
    # arrange
    uid = Uid('ac1a53a264')
    mock_requests.get.return_value = mock.Mock(
        status_code=500,
        text='error message',
    )

    # act
    with pytest.raises(TranslationFailedException) as e:
        create_adapter.get_translation(uid=uid)

    # assert
    assert_that(str(e), contains_string('error message'))
def test_it_gets_from_url_with_headers(
        mock_requests:                mock.Mock,
        create_adapter:               SupportsPerformingTranslations,
        mock_successful_get_response: mock.Mock,
):
    # arrange
    uid = Uid('ac1a53a264')
    mock_requests.get.return_value = mock_successful_get_response

    # act
    create_adapter.get_translation(uid=uid)

    # assert
    mock_requests.get.assert_called_once_with(
        url='example.com/translation/ac1a53a264/',
        headers={
            'Authorization': 'ApiKey charles:123xyz',
            'Content-Type': 'application/json',
        },
    )
def test_it_returns_none_if_translation_is_not_found(
        mock_requests:                mock.Mock,
        create_adapter:               SupportsPerformingTranslations,
):
    # arrange
    uid = Uid('ac1a53a264')
    mock_requests.get.return_value = mock.Mock(status_code=404)

    # act
    result = create_adapter.get_translation(uid=uid)

    # assert
    assert_that(result, is_(None))
def test_it_returns_translation_data(
        mock_requests:                mock.Mock,
        create_adapter:               SupportsPerformingTranslations,
        mock_successful_get_response: mock.Mock,
):
    # arrange
    uid = Uid('ac1a53a264')
    mock_requests.get.return_value = mock_successful_get_response

    # act
    result = create_adapter.get_translation(uid=uid)

    # assert
    assert_that(result, equal_to(Translation(
        uid=uid,
        status=StatusOption.translating,
        text='Hello, world!',
        translated_text=None,
    )))