feat: complete phase 02 RBAC and data scope recovery
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
E2E 测试:Phase 23 - 内容管理 E2E
|
||||
"""
|
||||
import os
|
||||
import pytest
|
||||
import requests
|
||||
|
||||
BASE_URL = 'http://localhost:8085/api/v1'
|
||||
E2E_PASSWORD = os.environ["E2E_PASSWORD"]
|
||||
|
||||
def get_admin_token():
|
||||
r = requests.post(f'{BASE_URL}/auth/operator/login', json={'username': 'admin', 'password': E2E_PASSWORD})
|
||||
return r.json()['data']['accessToken']
|
||||
|
||||
def auth_header(token):
|
||||
return {'Authorization': f'Bearer {token}'}
|
||||
|
||||
def test_get_content_categories():
|
||||
r = requests.get(f'{BASE_URL}/content/categories')
|
||||
assert r.status_code == 200
|
||||
data = r.json()['data']
|
||||
assert isinstance(data, list)
|
||||
|
||||
def test_create_content_category():
|
||||
token = get_admin_token()
|
||||
r = requests.post(
|
||||
f'{BASE_URL}/content/operator/categories',
|
||||
headers=auth_header(token),
|
||||
json={'name': '测试分类', 'code': 'test_cat_001', 'sortOrder': 0}
|
||||
)
|
||||
assert r.status_code == 200
|
||||
assert r.json()['data']['code'] == 'test_cat_001'
|
||||
|
||||
def test_create_and_publish_article():
|
||||
token = get_admin_token()
|
||||
# 创建文章
|
||||
create_r = requests.post(
|
||||
f'{BASE_URL}/content/operator/articles',
|
||||
headers=auth_header(token),
|
||||
json={'title': '测试文章', 'summary': '测试摘要', 'content': '测试内容', 'sortOrder': 0}
|
||||
)
|
||||
assert create_r.status_code == 200
|
||||
article_id = create_r.json()['data']['id']
|
||||
assert create_r.json()['data']['status'] == 'draft'
|
||||
# 发布
|
||||
pub_r = requests.post(
|
||||
f'{BASE_URL}/content/operator/articles/{article_id}/publish',
|
||||
headers=auth_header(token)
|
||||
)
|
||||
assert pub_r.status_code == 200
|
||||
assert pub_r.json()['data']['status'] == 'published'
|
||||
# 用户端可访问
|
||||
r = requests.get(f'{BASE_URL}/content/articles/{article_id}')
|
||||
assert r.status_code == 200
|
||||
# 下架
|
||||
off_r = requests.post(
|
||||
f'{BASE_URL}/content/operator/articles/{article_id}/offline',
|
||||
headers=auth_header(token)
|
||||
)
|
||||
assert off_r.status_code == 200
|
||||
assert off_r.json()['data']['status'] == 'offline'
|
||||
|
||||
def test_content_stats():
|
||||
r = requests.get(f'{BASE_URL}/operator/analytics/v11/content')
|
||||
assert r.status_code == 200
|
||||
data = r.json()['data']
|
||||
assert 'totalPublishedArticles' in data
|
||||
assert 'totalViews' in data
|
||||
assert 'topArticles' in data
|
||||
|
||||
if __name__ == '__main__':
|
||||
pytest.main([__file__, '-v'])
|
||||
Reference in New Issue
Block a user