|
3 | 3 | import string |
4 | 4 | import pytest |
5 | 5 | import datetime |
| 6 | +import re |
6 | 7 | from pathlib import Path |
7 | 8 | from typing import Generator, List, Optional, NamedTuple, Dict, Callable |
8 | 9 | from dataclasses import dataclass |
9 | | -from argparse import ArgumentError |
10 | 10 |
|
11 | | -from qiita_sync.qiita_sync import ApplicationError, CommandError, QiitaArticle, QiitaSync, exec_command, qsync_get_access_token |
| 11 | +from qiita_sync.qiita_sync import ApplicationError, CommandError, QiitaArticle, QiitaSync |
| 12 | +from qiita_sync.qiita_sync import exec_command, qsync_get_access_token |
12 | 13 | from qiita_sync.qiita_sync import DEFAULT_ACCESS_TOKEN_FILE, DEFAULT_INCLUDE_GLOB, DEFAULT_EXCLUDE_GLOB, GITHUB_REF |
13 | 14 | from qiita_sync.qiita_sync import qsync_init, qsync_argparse, Maybe |
14 | 15 | from qiita_sync.qiita_sync import rel_path, add_path, url_add_path, get_utc, str2bool, is_url |
15 | | -from qiita_sync.qiita_sync import git_get_topdir, git_get_remote_url, git_get_default_branch, git_get_committer_datetime |
| 16 | +from qiita_sync.qiita_sync import git_get_topdir, git_get_remote_url, git_get_default_branch |
| 17 | +from qiita_sync.qiita_sync import git_get_committer_datetime |
16 | 18 | from qiita_sync.qiita_sync import qiita_create_caller, qiita_get_authenticated_user_id |
17 | 19 | from qiita_sync.qiita_sync import markdown_code_block_split, markdown_code_inline_split, markdown_replace_text |
18 | 20 | from qiita_sync.qiita_sync import markdown_replace_link, markdown_replace_image |
| 21 | +from qiita_sync.qiita_sync import qsync_main |
19 | 22 |
|
20 | 23 | from pytest_mock.plugin import MockerFixture |
| 24 | +from pytest import CaptureFixture |
21 | 25 |
|
22 | 26 | ######################################################################## |
23 | 27 | # Test Utils |
@@ -189,6 +193,30 @@ def gen_md2(mdlink: Callable[[str], str], imglink: Callable[[str], str]): |
189 | 193 | ######################################################################## |
190 | 194 |
|
191 | 195 |
|
| 196 | +def test_subcommand_download(mocker: MockerFixture): |
| 197 | + mocker.patch('sys.argv', ['qiita_sync.py', 'download', '.', '--file-timestamp']) |
| 198 | + # |
| 199 | + # TODO: better assertion |
| 200 | + # |
| 201 | + try: |
| 202 | + qsync_main() |
| 203 | + assert True |
| 204 | + except Exception: |
| 205 | + assert False |
| 206 | + |
| 207 | + |
| 208 | +def test_subcommand_check(mocker: MockerFixture, capsys: CaptureFixture): |
| 209 | + mocker.patch('sys.argv', ['qiita_sync.py', 'check', '.', '--file-timestamp']) |
| 210 | + try: |
| 211 | + qsync_main() |
| 212 | + captured = capsys.readouterr() |
| 213 | + print(captured.out) |
| 214 | + assert re.match(r'^https://qiita\.com/.*is new article$', captured.out, re.MULTILINE | re.DOTALL) |
| 215 | + assert "qiita-sync/CHANGELOG.md is new article" in captured.out |
| 216 | + except Exception: |
| 217 | + assert False |
| 218 | + |
| 219 | + |
192 | 220 | def test_invalid_subcommand(topdir_fx: Path): |
193 | 221 | with pytest.raises(SystemExit): |
194 | 222 | qsync_argparse().parse_args("invalid .".split()) |
|
0 commit comments