Beispiel #1
0
def test_invalid_input():
    uc = TransformRstUseCase(
        path_adapter=MagicMock(),
        transform_rst_adapter=MagicMock(),
    )

    res = uc.execute()
    assert isinstance(res, ResponseError)
    assert res.reason == 'A request is required'

    uc = TransformRstUseCase(
        path_adapter=MagicMock(),
        transform_rst_adapter=MagicMock(),
    )
    res = uc.execute(Request())
    assert isinstance(res, ResponseError)
    assert res.reason == 'Invalid input'

    path_adapter = MagicMock()
    path_adapter.exists.return_value = False

    uc = TransformRstUseCase(
        path_adapter=path_adapter,
        transform_rst_adapter=MagicMock(),
    )
    res = uc.execute(Request('invalid_path'))

    assert isinstance(res, ResponseError)
    assert res.reason == 'article_path "invalid_path" does not exist'
def test_invalid_input():
    uc = QueryAssetUseCase(
        asset_repo=MagicMock(),
    )

    res = uc.execute()
    assert isinstance(res, ResponseError)
    assert res.reason == 'A request is required'

    uc = QueryAssetUseCase(
        asset_repo=MagicMock(),
    )
    res = uc.execute(Request())
    assert isinstance(res, ResponseError)
    assert res.reason == 'Invalid input'

    asset_repo = MagicMock()
    asset_repo.select_by_uuid.return_value = None

    uc = QueryAssetUseCase(
        asset_repo=asset_repo,
    )
    res = uc.execute(Request('invalid_uuid'))

    assert isinstance(res, ResponseError)
    assert res.reason == 'Target asset not found'
Beispiel #3
0
def test_invalid_input():
    uc = ImportBlogDataUseCase(
        transform_rst_uc=MagicMock(),
        site_info_repo=MagicMock(),
        article_repo=MagicMock(),
        web_page_repo=MagicMock(),
        source_path_serv=MagicMock(),
        env_adapter=MagicMock(),
        path_adapter=MagicMock(),
        slug_adapter=MagicMock(),
        time_adapter=MagicMock(),
        truncate_html_adapter=MagicMock(),
        asset_serv=MagicMock(),
    )

    res = uc.execute()
    assert isinstance(res, ResponseError)
    assert res.reason == 'A request is required'

    res = uc.execute(Request())
    assert isinstance(res, ResponseError)
    assert res.reason == 'Invalid input'

    res = uc.execute(Request({'source_dir': 999, 'max_summary_length': 15}))
    assert isinstance(res, ResponseError)
    assert res.reason == 'Invalid input'

    res = uc.execute(
        Request({
            'source_dir': 'str',
            'max_summary_length': 'string'
        }))
    assert isinstance(res, ResponseError)
    assert res.reason == 'Invalid input'

    path_adapter = MagicMock()
    path_adapter.exists.return_value = False

    uc = ImportBlogDataUseCase(
        transform_rst_uc=MagicMock(),
        site_info_repo=MagicMock(),
        article_repo=MagicMock(),
        web_page_repo=MagicMock(),
        source_path_serv=MagicMock(),
        env_adapter=MagicMock(),
        path_adapter=path_adapter,
        slug_adapter=MagicMock(),
        time_adapter=MagicMock(),
        truncate_html_adapter=MagicMock(),
        asset_serv=MagicMock(),
    )
    res = uc.execute(
        Request({
            'source_dir': 'invalid_path',
            'max_summary_length': 15
        }))

    assert isinstance(res, ResponseError)
    assert res.reason == 'source_dir "invalid_path" does not exist'
Beispiel #4
0
    def _parse_data(self, file_path):
        res = self.transform_rst_uc.execute(Request(file_path))
        if not res:
            return res

        data = res.data
        for item_image in data['item_images']:
            static_image_url = self.asset_serv.save_and_return_static_url(
                filename=item_image['basename'],
                data=item_image['data'],
                is_attachment=False,
            )
            data['content'] = data['content'].replace(item_image['url'],
                                                      static_image_url)

        for item_file in data['item_files']:
            static_file_url = self.asset_serv.save_and_return_static_url(
                filename=item_file['basename'],
                data=item_file['data'],
                is_attachment=True,
            )
            data['content'] = data['content'].replace(item_file['url'],
                                                      static_file_url)

        return data
Beispiel #5
0
def get_article(article_slug):
    uc = domain_injector.get(QueryArticleUseCase)
    res = uc.execute(Request(article_slug))
    if not res:
        return flask.jsonify({'error': res.reason}), 400

    article = res.data
    if not article:
        return flask.jsonify({'error': 'Not found'}), 404

    return flask.jsonify({'data': article})
def test_query_asset():
    asset = MagicMock()
    asset.serialize.return_value = 'asset'

    asset_repo = MagicMock()
    asset_repo.select_by_uuid.return_value = asset

    uc = QueryAssetUseCase(
        asset_repo=asset_repo,
    )
    res = uc.execute(Request('uuid'))

    assert isinstance(res, Response)
    assert res.data == 'asset'
Beispiel #7
0
def get_static_file(uuid):
    uc = domain_injector.get(QueryAssetUseCase)
    res = uc.execute(Request(uuid))
    if not res:
        return flask.jsonify({
            'error': res.reason,
        }), 400

    asset = res.data
    return send_file(
        io.BytesIO(asset['data']),
        as_attachment=asset['isAttachment'],
        attachment_filename=asset['filename'],
    )
Beispiel #8
0
def test_import_site_info_data():
    path_adapter = MagicMock()
    path_adapter.exists.return_value = True

    source_path_serv = MagicMock()
    source_path_serv.get_all_article_paths.return_value = []
    source_path_serv.get_all_web_page_paths.return_value = []

    site_info_repo = MagicMock()
    time_adapter = MagicMock()
    time_adapter.get_utc_now.return_value = dt.datetime(
        2018, 11, 5, 15, 56, 30)

    env_adapter = MagicMock()
    env_adapter.get.return_value = 'develop (81ccde3550325c06a10b6acce75b4df529955472)'

    uc = ImportBlogDataUseCase(
        transform_rst_uc=MagicMock(),
        site_info_repo=site_info_repo,
        article_repo=MagicMock(),
        web_page_repo=MagicMock(),
        source_path_serv=source_path_serv,
        env_adapter=env_adapter,
        slug_adapter=MagicMock(),
        time_adapter=time_adapter,
        path_adapter=path_adapter,
        truncate_html_adapter=MagicMock(),
        asset_serv=MagicMock(),
    )
    res = uc.execute(
        Request({
            'source_dir': 'source_dir',
            'max_summary_length': 15
        }))

    time_adapter.get_utc_now.assert_called_once()
    env_adapter.get.assert_called_once_with('REPO_VERSION', '')

    site_info_repo.add.assert_called_once_with(
        SiteInfo(
            updated_time=dt.datetime(2018, 11, 5, 15, 56, 30),
            repo_version='develop (81ccde3550325c06a10b6acce75b4df529955472)',
        ))

    assert isinstance(res, Response)
    assert res.data is None
Beispiel #9
0
def test_transform_rst():
    path_adapter = MagicMock()
    path_adapter.exists.return_value = True

    article = MagicMock()
    article.serialize.return_value = 'Article'

    transform_rst_adapter = MagicMock()
    transform_rst_adapter.generate_article.return_value = article

    uc = TransformRstUseCase(
        path_adapter=path_adapter,
        transform_rst_adapter=transform_rst_adapter,
    )
    res = uc.execute(Request('article_path'))

    assert isinstance(res, Response)
    assert res.data == 'Article'
Beispiel #10
0
def import_blog_data(source_dir):
    app = create_app()
    with app.app_context():
        print('Clear all blog data ...')
        uc = domain_injector.get(ClearAllBlogDataUseCase)
        res = uc.execute()
        if not res:
            print('ERROR', res.reason)
            return

        print('Generate blog data to database ...')
        uc = domain_injector.get(ImportBlogDataUseCase)
        res = uc.execute(
            Request({
                'source_dir': source_dir,
                'max_summary_length': config.MAX_SUMMARY_LENGTH,
            }))
        if not res:
            print('ERROR:', res.reason)
            return
        print('Done')
Beispiel #11
0
def test_import_article_data():
    transform_rst_uc = MagicMock()
    transform_rst_uc.execute.return_value = Response({
        'title':
        'title',
        'content':
        'content image_url file_url',
        'categories': [],
        'date':
        dt.date(2018, 1, 1),
        'modified_date':
        dt.date(2018, 1, 2),
        'item_images': [{
            'url': 'image_url',
            'basename': 'image_basename',
            'data': 'image_data',
        }],
        'item_files': [{
            'url': 'file_url',
            'basename': 'file_basename',
            'data': 'file_data',
        }],
    })

    article_repo = MagicMock()

    path_adapter = MagicMock()
    path_adapter.exists.return_value = True

    source_path_serv = MagicMock()
    source_path_serv.get_all_article_paths.return_value = ['article_path']
    source_path_serv.get_all_web_page_paths.return_value = []

    asset_serv = MagicMock()
    asset_serv.save_and_return_static_url.side_effect = [
        'static_image_url',
        'static_file_url',
    ]

    slug_adapter = MagicMock()
    slug_adapter.to_slug.return_value = 'slug'

    truncate_html_adapter = MagicMock()
    truncate_html_adapter.truncate.side_effect = [
        'summary',
        'raw_summary',
    ]

    uc = ImportBlogDataUseCase(
        transform_rst_uc=transform_rst_uc,
        site_info_repo=MagicMock(),
        article_repo=article_repo,
        web_page_repo=MagicMock(),
        source_path_serv=source_path_serv,
        env_adapter=MagicMock(),
        path_adapter=path_adapter,
        slug_adapter=slug_adapter,
        time_adapter=MagicMock(),
        truncate_html_adapter=truncate_html_adapter,
        asset_serv=asset_serv,
    )
    res = uc.execute(
        Request({
            'source_dir': 'source_dir',
            'max_summary_length': 15
        }))
    transform_rst_uc.execute.assert_called_once_with(Request('article_path'))

    asset_serv.save_and_return_static_url.assert_has_calls([
        call(
            filename='image_basename',
            data='image_data',
            is_attachment=False,
        ),
        call(
            filename='file_basename',
            data='file_data',
            is_attachment=True,
        ),
    ])

    article_repo.add.assert_called_once_with(
        Article(
            slug='slug',
            title='title',
            chicken_count=0,
            content='content static_image_url static_file_url',
            categories=[],
            summary='summary',
            raw_summary='raw_summary',
            date=dt.date(2018, 1, 1),
            modified_date=dt.date(2018, 1, 2),
        ))

    assert isinstance(res, Response)
    assert res.data is None