kopia lustrzana https://github.com/ihabunek/toot
				
				
				
			Test new timeline commands, tweaks
							rodzic
							
								
									89035accc3
								
							
						
					
					
						commit
						bfcf623448
					
				|  | @ -84,7 +84,7 @@ def test_following_not_found(run): | |||
|     assert result.stderr.strip() == "Error: Account not found" | ||||
| 
 | ||||
| 
 | ||||
| def test_following_json(app: App, user: User, user_id, run_json): | ||||
| def test_following_json(app: App, user: User, run_json): | ||||
|     friend = register_account(app) | ||||
| 
 | ||||
|     result = run_json(cli.accounts.following, user.username, "--json") | ||||
|  |  | |||
|  | @ -8,18 +8,17 @@ from toot.entities import from_dict, Status | |||
| from tests.integration.conftest import TOOT_TEST_BASE_URL, assert_ok, register_account | ||||
| 
 | ||||
| 
 | ||||
| # TODO: If fixture is not overridden here, tests fail, not sure why, figure it out | ||||
| @pytest.fixture(scope="module") | ||||
| @pytest.fixture(scope="function") | ||||
| def user(app): | ||||
|     return register_account(app) | ||||
| 
 | ||||
| 
 | ||||
| @pytest.fixture(scope="module") | ||||
| @pytest.fixture(scope="function") | ||||
| def other_user(app): | ||||
|     return register_account(app) | ||||
| 
 | ||||
| 
 | ||||
| @pytest.fixture(scope="module") | ||||
| @pytest.fixture(scope="function") | ||||
| def friend_user(app, user): | ||||
|     friend = register_account(app) | ||||
|     friend_account = api.find_account(app, user, friend.username) | ||||
|  | @ -27,7 +26,7 @@ def friend_user(app, user): | |||
|     return friend | ||||
| 
 | ||||
| 
 | ||||
| @pytest.fixture(scope="module") | ||||
| @pytest.fixture(scope="function") | ||||
| def friend_list(app, user, friend_user): | ||||
|     friend_account = api.find_account(app, user, friend_user.username) | ||||
|     list = api.create_list(app, user, str(uuid4())).json() | ||||
|  | @ -111,6 +110,100 @@ def test_timelines(app, user, other_user, friend_user, friend_list, run): | |||
|     assert status3.id not in result.stdout | ||||
| 
 | ||||
| 
 | ||||
| def test_timelines_v2(app, user, other_user, friend_user, friend_list, run): | ||||
|     status1 = _post_status(app, user, "#foo") | ||||
|     status2 = _post_status(app, other_user, "#bar") | ||||
|     status3 = _post_status(app, friend_user, "#foo #bar") | ||||
| 
 | ||||
|     # Home timeline | ||||
|     def test_home(): | ||||
|         result = run(cli.timelines_v2.home) | ||||
|         assert_ok(result) | ||||
|         assert status1.id in result.stdout | ||||
|         assert status2.id not in result.stdout | ||||
|         assert status3.id in result.stdout | ||||
|     run_with_retries(test_home) | ||||
| 
 | ||||
|     # Public timeline | ||||
|     result = run(cli.timelines_v2.public) | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     # Anon public timeline | ||||
|     result = run(cli.timelines_v2.public, "--instance", TOOT_TEST_BASE_URL) | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     # Tag timeline | ||||
|     result = run(cli.timelines_v2.tag, "foo") | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     result = run(cli.timelines_v2.tag, "bar") | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     result = run(cli.timelines_v2.tag, "foo", "--all", "bar") | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     result = run(cli.timelines_v2.tag, "foo", "--any", "bar") | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     result = run(cli.timelines_v2.tag, "foo", "--none", "bar") | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id not in result.stdout | ||||
| 
 | ||||
|     # Anon tag timeline | ||||
|     result = run(cli.timelines_v2.tag, "--instance", TOOT_TEST_BASE_URL, "foo") | ||||
|     assert_ok(result) | ||||
|     assert status1.id in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     # List timeline (by list name) | ||||
|     result = run(cli.timelines_v2.list, friend_list["title"]) | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     # List timeline (by list ID) | ||||
|     result = run(cli.timelines_v2.list, friend_list["id"]) | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     # Account timeline | ||||
|     result = run(cli.timelines_v2.account, friend_user.username) | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id not in result.stdout | ||||
|     assert status3.id in result.stdout | ||||
| 
 | ||||
|     result = run(cli.timelines_v2.account, other_user.username) | ||||
|     assert_ok(result) | ||||
|     assert status1.id not in result.stdout | ||||
|     assert status2.id in result.stdout | ||||
|     assert status3.id not in result.stdout | ||||
| 
 | ||||
| 
 | ||||
| def test_empty_timeline(app, run_as): | ||||
|     user = register_account(app) | ||||
|     result = run_as(user, cli.timelines.timeline) | ||||
|  |  | |||
|  | @ -65,6 +65,16 @@ def common_timeline_options(func): | |||
|     return wrapper | ||||
| 
 | ||||
| 
 | ||||
| instance_option = click.option( | ||||
|     "-i", | ||||
|     "--instance", | ||||
|     callback=validate_instance, | ||||
|     help="""Domain or base URL of the instance, e.g. 'mastodon.social' or | ||||
|          'https://mastodon.social'. If not given will display timeline of the | ||||
|          logged in server.""", | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| @cli.group() | ||||
| def timelines(): | ||||
|     """Show various timelines""" | ||||
|  | @ -161,13 +171,13 @@ def link( | |||
| 
 | ||||
| 
 | ||||
| @timelines.command() | ||||
| @click.argument("list_name") | ||||
| @click.argument("list_name_or_id") | ||||
| @common_timeline_options | ||||
| @json_option | ||||
| @pass_context | ||||
| def list( | ||||
|     ctx: Context, | ||||
|     list_name: str, | ||||
|     list_name_or_id: str, | ||||
|     min_id: Optional[str], | ||||
|     max_id: Optional[str], | ||||
|     since_id: Optional[str], | ||||
|  | @ -177,7 +187,7 @@ def list( | |||
|     json: bool, | ||||
| ): | ||||
|     """View statuses in the given list timeline.""" | ||||
|     list_id = get_list_id(ctx, list_name, None) | ||||
|     list_id = get_list_id(ctx, list_name_or_id, list_name_or_id) | ||||
|     path = f"/api/v1/timelines/list/{list_id}" | ||||
| 
 | ||||
|     params = { | ||||
|  | @ -192,14 +202,7 @@ def list( | |||
| 
 | ||||
| @timelines.command() | ||||
| @common_timeline_options | ||||
| @click.option( | ||||
|     "-i", | ||||
|     "--instance", | ||||
|     callback=validate_instance, | ||||
|     help="""Domain or base URL of the instance, e.g. 'mastodon.social' or | ||||
|          'https://mastodon.social'. If not given will display timeline of the | ||||
|          logged in server.""", | ||||
| ) | ||||
| @instance_option | ||||
| @click.option( | ||||
|     "--local", | ||||
|     is_flag=True, | ||||
|  | @ -255,6 +258,7 @@ def public( | |||
| 
 | ||||
| @timelines.command() | ||||
| @common_timeline_options | ||||
| @instance_option | ||||
| @click.argument("tag_name") | ||||
| @click.option( | ||||
|     "--local", | ||||
|  | @ -277,23 +281,24 @@ def public( | |||
| @click.option( | ||||
|     "--any", | ||||
|     multiple=True, | ||||
|     help="Return statuses that contain any of these additional tags" | ||||
|     help="Return statuses that contain any of these additional tags (can be specified multiple times)", | ||||
| ) | ||||
| @click.option( | ||||
|     "--all", | ||||
|     multiple=True, | ||||
|     help="Return statuses that contain all of these additional tags" | ||||
|     help="Return statuses that contain all of these additional tags (can be specified multiple times)", | ||||
| ) | ||||
| @click.option( | ||||
|     "--none", | ||||
|     multiple=True, | ||||
|     help="Return statuses that contain none of these additional tags" | ||||
|     help="Return statuses that contain none of these additional tags (can be specified multiple times)", | ||||
| ) | ||||
| @json_option | ||||
| @pass_context | ||||
| def tag( | ||||
|     ctx: Context, | ||||
|     tag_name: str, | ||||
|     instance: Optional[str], | ||||
|     min_id: Optional[str], | ||||
|     max_id: Optional[str], | ||||
|     since_id: Optional[str], | ||||
|  | @ -323,7 +328,11 @@ def tag( | |||
|         "none[]": none or None, | ||||
|     } | ||||
| 
 | ||||
|     _show_timeline(ctx, path, params, json, pager, clear, limit) | ||||
|     if instance: | ||||
|         url = f"{instance}{path}" | ||||
|         _show_anon_timeline(url, params, json, pager, clear, limit) | ||||
|     else: | ||||
|         _show_timeline(ctx, path, params, json, pager, clear, limit) | ||||
| 
 | ||||
| 
 | ||||
| def _show_timeline(ctx, path, params, json, pager, clear, limit): | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Ivan Habunek
						Ivan Habunek