コード例 #1
0
def test_it_sends_text_to_be_translated(
    mock_requests:            mock.Mock,
    create_adapter:           SupportsPerformingTranslations,
    mock_successful_post_response: mock.Mock,
):
    # arrange
    text = 'example text'
    mock_requests.post.return_value = mock_successful_post_response

    # act
    create_adapter.translate(text=text)

    """
    From SPEC.md:
    > Build a basic web app with a simple input field that takes an English (EN) input translates it to Spanish (ES).
    we'll always go from en to es.
    """
    # assert
    mock_requests.post.assert_called_once_with(
        headers=ANY,
        url=ANY,
        data=json.dumps({
            'text':            text,
            'source_language': 'en',
            'target_language': 'es',
            'text_format':     'text',
        }, sort_keys=True)
    )
コード例 #2
0
def test_it_returns_the_response_uid_on_success(
        create_adapter: SupportsPerformingTranslations,
        mock_requests:  mock.Mock,
):
    # arrange
    text = 'example text'
    json_response = {
        "balance":         99943.0,
        "client":          "username",
        "price":           6.0,
        "source_language": "en",
        "status":          "new",
        "target_language": "pt",
        "text":            "Hello, world!",
        "text_format":     "text",
        "uid":             "ac1a53a264"
    }
    mock_response = mock.Mock(
        status_code=201,
        json=lambda: json_response
    )
    mock_requests.post.return_value = mock_response

    # act
    result = create_adapter.translate(text=text)

    # assert
    assert_that(result, equal_to(Uid('ac1a53a264')))
コード例 #3
0
def test_it_returns_all_translations_data(
        mock_requests:                    mock.Mock,
        create_adapter:                   SupportsPerformingTranslations,
        mock_successful_get_all_response: mock.Mock,
):
    # arrange
    mock_requests.get.return_value = mock_successful_get_all_response

    # act
    result = create_adapter.get_all_translations()

    # assert
    assert_that(result, equal_to([
        Translation(
            uid='30292308e7',
            status=StatusOption.new,
            text=None,
            translated_text=None,
        ),
        Translation(
            uid='30292308e8',
            status=StatusOption.translating,
            text=None,
            translated_text=None,
        )
    ]))
コード例 #4
0
def test_it_throws_if_get_all_request_goes_wrong(
        mock_requests:  mock.Mock,
        create_adapter: SupportsPerformingTranslations,
):
    # arrange
    mock_requests.get.return_value = mock.Mock(
        status_code=500,
        text='error message',
    )

    # act
    with pytest.raises(TranslationFailedException) as e:
        create_adapter.get_all_translations()

    # assert
    assert_that(str(e), contains_string('error message'))
コード例 #5
0
def test_it_throws_if_request_was_unsuccessful(
        create_adapter: SupportsPerformingTranslations,
        mock_requests:  mock.Mock,
):
    # arrange
    text = 'example text'
    mock_response = mock.Mock(
        status_code=500,
        text='error message'
    )
    mock_requests.post.return_value = mock_response

    # act
    with pytest.raises(TranslationFailedException) as e:
        create_adapter.translate(text=text)

    # assert
    assert_that(str(e), contains_string('error message'))
コード例 #6
0
def test_it_gets_all_translations_from_url_with_headers(
        mock_requests:                    mock.Mock,
        create_adapter:                   SupportsPerformingTranslations,
        mock_successful_get_all_response: mock.Mock,
):
    # arrange
    mock_requests.get.return_value = mock_successful_get_all_response

    # act
    create_adapter.get_all_translations()

    # assert
    mock_requests.get.assert_called_once_with(
        url='example.com/translation/',
        headers={
            'Authorization': 'ApiKey charles:123xyz',
            'Content-Type': 'application/json',
        },
    )
コード例 #7
0
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))
コード例 #8
0
def test_it_posts_to_url_with_headers(
        mock_requests:            mock.Mock,
        create_adapter:           SupportsPerformingTranslations,
        mock_successful_post_response: mock.Mock,
):
    # arrange
    text = 'example text'
    mock_requests.post.return_value = mock_successful_post_response

    # act
    create_adapter.translate(text=text)

    """
    Example request taken from https://developers.unbabel.com/docs/tutorial#translating-hello-world 
    """
    # assert
    mock_requests.post.assert_called_once_with(
        headers={
            'Authorization': 'ApiKey charles:123xyz',
            'Content-Type':  'application/json',
        },
        url='example.com/translation',
        data=ANY,
    )
コード例 #9
0
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,
    )))
コード例 #10
0
def submit_translation(text: str,
                       translation_adapter: SupportsPerformingTranslations,
                       storage_adapter: SupportsStoringUids) -> None:
    uid = translation_adapter.translate(text=text)
    storage_adapter.store_uid(uid)