kopia lustrzana https://github.com/halcy/Mastodon.py
334 wiersze
12 KiB
Python
334 wiersze
12 KiB
Python
import pytest
|
|
import time
|
|
from datetime import datetime, timedelta
|
|
from mastodon import MastodonIllegalArgumentError
|
|
import hashlib
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_accounts(api2):
|
|
accounts = api2.admin_accounts()
|
|
|
|
assert accounts
|
|
assert len(accounts) > 0
|
|
|
|
account_self = api2.account_verify_credentials()
|
|
account_admin = api2.admin_account(account_self)
|
|
|
|
assert(account_admin)
|
|
assert(account_admin.id == account_self.id)
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_accounts_v1(api2):
|
|
accounts = api2.admin_accounts_v1()
|
|
|
|
assert accounts
|
|
assert len(accounts) > 0
|
|
|
|
account_self = api2.account_verify_credentials()
|
|
account_admin = api2.admin_account(account_self)
|
|
|
|
assert(account_admin)
|
|
assert(account_admin.id == account_self.id)
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_accounts_v2(api2):
|
|
accounts = api2.admin_accounts_v2(permissions="staff", origin="local")
|
|
|
|
assert accounts
|
|
assert len(accounts) > 0
|
|
|
|
account_self = api2.account_verify_credentials()
|
|
account_admin = api2.admin_account(account_self)
|
|
|
|
assert(account_admin)
|
|
assert(account_admin.id == account_self.id)
|
|
|
|
accounts = api2.admin_accounts_v2(permissions="staff", origin="remote")
|
|
assert len(accounts) == 0
|
|
|
|
with pytest.raises(MastodonIllegalArgumentError):
|
|
accounts = api2.admin_accounts_v2(permissions="stave")
|
|
|
|
with pytest.raises(MastodonIllegalArgumentError):
|
|
accounts = api2.admin_accounts_v2(origin="global")
|
|
|
|
with pytest.raises(MastodonIllegalArgumentError):
|
|
accounts = api2.admin_accounts_v2(status="sick")
|
|
|
|
@pytest.mark.vcr(match_on=['path'])
|
|
def test_admin_moderation(api3, api2):
|
|
account_initial = api3.account_verify_credentials()
|
|
account = account_initial
|
|
|
|
try:
|
|
api2.admin_account_moderate(account, "disable")
|
|
account = api2.admin_account(account_initial)
|
|
assert(account.disabled)
|
|
|
|
account = api2.admin_account_enable(account)
|
|
assert(not account.disabled)
|
|
|
|
api2.admin_account_moderate(account, "silence")
|
|
account = api2.admin_account(account_initial)
|
|
assert(account.silenced)
|
|
|
|
account = api2.admin_account_unsilence(account)
|
|
assert(not account.silenced)
|
|
|
|
api2.admin_account_moderate(account, "sensitive")
|
|
account = api2.admin_account(account_initial)
|
|
image = api3.media_post('tests/image.jpg')
|
|
assert image
|
|
status = api3.status_post("oh no!", media_ids=image, sensitive=False)
|
|
assert status
|
|
status = api2.status(status)
|
|
assert status.sensitive
|
|
api3.status_delete(status)
|
|
|
|
account = api2.admin_account_unsensitive(account)
|
|
image = api3.media_post('tests/image.jpg')
|
|
assert image
|
|
status = api3.status_post("oh no!", media_ids=image, sensitive=False)
|
|
assert status
|
|
status = api2.status(status)
|
|
assert not status.sensitive
|
|
api3.status_delete(status)
|
|
|
|
api2.admin_account_moderate(account, "suspend")
|
|
account = api2.admin_account(account_initial)
|
|
assert(account.suspended)
|
|
|
|
account = api2.admin_account_unsuspend(account)
|
|
assert(not account.suspended)
|
|
finally:
|
|
try:
|
|
api2.admin_account_unsuspend(account)
|
|
except:
|
|
pass
|
|
try:
|
|
api2.admin_account_enable(account)
|
|
except:
|
|
pass
|
|
try:
|
|
api2.admin_account_unsilence(account)
|
|
except:
|
|
pass
|
|
try:
|
|
api.status_delete(status)
|
|
except:
|
|
pass
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_reports(api3, api2, status3):
|
|
account = api3.account_verify_credentials()
|
|
account2 = api2.account_verify_credentials()
|
|
report = api2.report(account, status3, "api crimes")
|
|
assert(report)
|
|
assert(not report.action_taken)
|
|
|
|
report_list = api2.admin_reports()
|
|
assert(report.id in [x.id for x in report_list])
|
|
|
|
report = api2.admin_report_resolve(report)
|
|
report_list = api2.admin_reports()
|
|
assert(report.action_taken)
|
|
assert(report.action_taken_by_account.id == account2.id)
|
|
assert(not report.id in [x.id for x in report_list])
|
|
|
|
report = api2.admin_report_reopen(report)
|
|
report_list = api2.admin_reports()
|
|
assert(not report.action_taken)
|
|
assert(report.id in [x.id for x in report_list])
|
|
|
|
report = api2.admin_report_assign(report)
|
|
assert(report.assigned_account.id == account2.id)
|
|
|
|
report = api2.admin_report_unassign(report)
|
|
assert(report.assigned_account is None)
|
|
|
|
report2 = api2.admin_report(report)
|
|
assert(report2)
|
|
assert(report2.id == report.id)
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_trends(api2):
|
|
assert isinstance(api2.admin_trending_tags(), list)
|
|
assert isinstance(api2.admin_trending_statuses(), list)
|
|
assert isinstance(api2.admin_trending_links(), list)
|
|
assert isinstance(api2.admin_trending_tags(limit=5), list)
|
|
# The management functions are unfortunately not really testable easily.
|
|
|
|
@pytest.mark.skip(reason="reject / accept of account requests isn't really testable without modifying instance settings. anyone want to fumble those into the DB setup and write this test, please do.")
|
|
def test_admin_accountrequests(api2):
|
|
pass
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_domain_blocks(api2):
|
|
block = api2.admin_create_domain_block(domain = "chitter.xyz", public_comment="sicko behaviour", severity="suspend")
|
|
assert isinstance(api2.admin_domain_blocks(), list)
|
|
block2 = api2.admin_domain_blocks(block)
|
|
assert block.severity == "suspend"
|
|
assert block.public_comment == "sicko behaviour"
|
|
assert block.severity == block2.severity
|
|
block3 = api2.admin_update_domain_block(block, severity="silence", private_comment="jk ilu <3")
|
|
assert block3.severity == "silence"
|
|
assert block3.public_comment == "sicko behaviour"
|
|
assert block3.private_comment == "jk ilu <3"
|
|
api2.admin_delete_domain_block(block2)
|
|
assert not any(x.id == block3.id for x in api2.admin_domain_blocks())
|
|
|
|
# Xfail test for domain block that starts with https://
|
|
@pytest.mark.xfail
|
|
@pytest.mark.vcr()
|
|
def test_admin_domain_blocks_protocol(api2):
|
|
api2.admin_create_domain_block(domain = "https://chitter.xyz", public_comment="sicko behaviour", severity="silence")
|
|
|
|
@pytest.mark.vcr(match_on=['path'])
|
|
def test_admin_stats(api2):
|
|
assert api2.admin_measures(
|
|
datetime(2020, 10, 10) - timedelta(hours=24*5),
|
|
datetime(2020, 10, 10),
|
|
active_users=True,
|
|
new_users=True,
|
|
opened_reports=True,
|
|
resolved_reports=True,
|
|
instance_accounts="chitter.xyz",
|
|
instance_media_attachments="chitter.xyz",
|
|
instance_reports="http://chitter.xyz/",
|
|
instance_statuses="chitter.xyz",
|
|
instance_follows="http://chitter.xyz",
|
|
instance_followers="chitter.xyz",
|
|
#tag_accounts=0,
|
|
#tag_uses=0,
|
|
#tag_servers=0,
|
|
)
|
|
|
|
assert api2.admin_dimensions(
|
|
datetime(2020, 10, 10) - timedelta(hours=24*5),
|
|
datetime(2020, 10, 10),
|
|
limit=3,
|
|
languages=True,
|
|
sources=True,
|
|
servers=True,
|
|
space_usage=True,
|
|
#tag_servers=0,
|
|
#tag_languages=0,
|
|
instance_accounts="chitter.xyz",
|
|
instance_languages="https://chitter.xyz"
|
|
)
|
|
|
|
api2.admin_retention(
|
|
datetime(2020, 10, 10) - timedelta(days=10),
|
|
datetime(2020, 10, 10)
|
|
)
|
|
|
|
with pytest.raises(MastodonIllegalArgumentError):
|
|
api2.admin_retention(
|
|
datetime(2020, 10, 10) - timedelta(days=10),
|
|
datetime(2020, 10, 10),
|
|
frequency="dayz"
|
|
)
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_canonical_email_block(api2):
|
|
blocked_email = "test@example.com"
|
|
try:
|
|
response = api2.admin_create_canonical_email_block(email=blocked_email)
|
|
assert response is not None
|
|
assert hasattr(response, 'id')
|
|
block_id = response.id
|
|
|
|
test_response = api2.admin_test_canonical_email_block(blocked_email)
|
|
assert any(b.id == block_id for b in test_response)
|
|
|
|
variations = [
|
|
"Test@example.com",
|
|
"te.st@example.com",
|
|
"test+other@EXAMPLE.com"
|
|
]
|
|
for variation in variations:
|
|
test_response = api2.admin_test_canonical_email_block(variation)
|
|
assert any(b.id == block_id for b in test_response)
|
|
|
|
all_blocks = api2.admin_canonical_email_blocks()
|
|
assert any(b.id == block_id for b in all_blocks)
|
|
|
|
api2.admin_delete_canonical_email_block(block_id)
|
|
|
|
all_blocks_after_delete = api2.admin_canonical_email_blocks()
|
|
assert not any(b.id == block_id for b in all_blocks_after_delete)
|
|
|
|
email_hash = hashlib.sha256(blocked_email.encode("utf-8")).hexdigest()
|
|
response = api2.admin_create_canonical_email_block(canonical_email_hash=email_hash)
|
|
assert response is not None
|
|
assert hasattr(response, 'id')
|
|
block_id = response.id
|
|
|
|
test_response = api2.admin_canonical_email_block(block_id)
|
|
assert test_response.id == block_id
|
|
for variation in variations:
|
|
test_response = api2.admin_test_canonical_email_block(variation)
|
|
assert any(b.id == block_id for b in test_response)
|
|
|
|
finally:
|
|
try:
|
|
api2.admin_delete_canonical_email_block(block_id)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
@pytest.mark.vcr(match_on=['path'])
|
|
def test_admin_email_domain_blocks(api2):
|
|
test_domain = "blockedexample.com"
|
|
|
|
created_block = api2.admin_create_email_domain_block(test_domain)
|
|
assert created_block is not None
|
|
assert created_block.domain == test_domain
|
|
|
|
retrieved_block = api2.admin_email_domain_block(created_block.id)
|
|
assert retrieved_block.id == created_block.id
|
|
assert retrieved_block.domain == test_domain
|
|
|
|
all_blocks = api2.admin_email_domain_blocks()
|
|
assert any(block.id == created_block.id for block in all_blocks)
|
|
|
|
api2.admin_delete_email_domain_block(created_block.id)
|
|
|
|
all_blocks_after_delete = api2.admin_email_domain_blocks()
|
|
assert not any(block.id == created_block.id for block in all_blocks_after_delete)
|
|
|
|
@pytest.mark.vcr()
|
|
def test_admin_ip_blocks(api2):
|
|
try:
|
|
test_ip = "8.8.8.0/24"
|
|
test_severity = "no_access"
|
|
test_comment = "Google DNS is ULTRA BANNED"
|
|
|
|
created_block = api2.admin_create_ip_block(test_ip, test_severity, comment=test_comment)
|
|
assert created_block is not None
|
|
assert created_block.ip == test_ip
|
|
assert created_block.severity == test_severity
|
|
assert created_block.comment == test_comment
|
|
|
|
retrieved_block = api2.admin_ip_block(created_block.id)
|
|
assert retrieved_block.id == created_block.id
|
|
assert retrieved_block.ip == test_ip
|
|
assert retrieved_block.severity == test_severity
|
|
|
|
all_blocks = api2.admin_ip_blocks()
|
|
assert any(block.id == created_block.id for block in all_blocks)
|
|
|
|
updated_comment = "Updated test block"
|
|
updated_block = api2.admin_update_ip_block(created_block.id, comment=updated_comment)
|
|
assert updated_block.id == created_block.id
|
|
assert updated_block.comment == updated_comment
|
|
|
|
api2.admin_delete_ip_block(created_block.id)
|
|
|
|
all_blocks_after_delete = api2.admin_ip_blocks()
|
|
assert not any(block.id == created_block.id for block in all_blocks_after_delete)
|
|
finally:
|
|
all_blocks = api2.admin_ip_blocks()
|
|
for block in all_blocks:
|
|
api2.admin_delete_ip_block(block.id)
|