54 lines
3.4 KiB
Python
54 lines
3.4 KiB
Python
from pathlib import Path
|
|
p=Path('C:/kefu/wechat_rpa/test_knowledge_review.py');s=p.read_text(encoding='utf-8')
|
|
s=s.replace('from archive_store import new_id','from archive_store import ArchiveStore, new_id')
|
|
s=s.replace('class FullReviewApiTest(TestCase):\n', '''class FullReviewApiTest(TestCase):
|
|
payload = FullReviewTest.payload
|
|
start_job = FullReviewTest.start_job
|
|
process = FullReviewTest.process
|
|
first = FullReviewTest.first
|
|
seed = FullReviewTest.seed
|
|
''')
|
|
s+='''
|
|
|
|
def test_restricted_all_accounts_and_revocation_during_background_execution(self):
|
|
self.actor = self.db.authenticate('admin', 'ChangedAdmin@2026')['id']
|
|
self.store = self.client.app.state.knowledge_store
|
|
self.archive = ArchiveStore(self.db)
|
|
accounts = []
|
|
for index in range(3):
|
|
_, account = self.db.create_desktop_session(
|
|
{'user_id': f'full-review-{index}', 'sn': f'REV{index}', 'nickname': f'测试账号{index}'},
|
|
f'review-device-{index}', 'Review QA', '1.0', '')
|
|
accounts.append(account)
|
|
self.seed(10 + index, account['tenant_id'])
|
|
self.db.create_user('limited-reviewer', 'InitialReader123', 'viewer', self.actor, '')
|
|
reviewer = self.db.authenticate('limited-reviewer', 'InitialReader123')['id']
|
|
self.db.change_password(reviewer, 'InitialReader123', 'ChangedReader@2026', '')
|
|
with self.db.connect() as db:
|
|
db.executemany("INSERT OR IGNORE INTO role_permissions VALUES ('viewer',?)",
|
|
[(p,) for p in ('knowledge:read','knowledge:review','im:content:read')])
|
|
for account in accounts[:2]:
|
|
self.db.set_desktop_account_admins(account['id'], [reviewer], self.actor, '')
|
|
login = self.client.post('/api/v2/auth/login', json={'username': 'limited-reviewer', 'password': 'ChangedReader@2026'})
|
|
headers = {'Authorization': 'Bearer ' + login.json()['access_token']}
|
|
url = '/api/v2/knowledge/review-tasks'
|
|
self.assertEqual(self.client.post(url + '/preview?account_id=' + str(accounts[2]['id']), headers=headers).status_code, 403)
|
|
single = self.client.post(url + '/preview?account_id=' + str(accounts[0]['id']), headers=headers)
|
|
self.assertEqual(single.json()['total'], 10)
|
|
snapshot = self.client.post(url + '/preview?account_id=-1', headers=headers)
|
|
self.assertEqual(snapshot.status_code, 200, snapshot.text)
|
|
job = snapshot.json(); self.assertEqual(job['total'], 21)
|
|
self.assertEqual(len(job['preview']['accounts']), 2)
|
|
self.db.set_desktop_account_admins(accounts[1]['id'], [], self.actor, '')
|
|
response = self.client.post(url + '/' + job['id'] + '/start', headers=headers, json={'confirmed': True})
|
|
self.assertEqual(response.status_code, 200, response.text)
|
|
KnowledgeReviewWorker(self.store).step()
|
|
final = self.client.get(url + '/' + job['id'], headers=headers).json()
|
|
self.assertEqual((final['approved'], final['skipped']), (10, 11))
|
|
self.assertEqual(self.store.stats(accounts[2]['tenant_id']), {'draft': 12})
|
|
self.assertEqual(self.store.stats(accounts[1]['tenant_id']), {'draft': 11})
|
|
results = self.client.get(url + '/' + job['id'] + '/results', headers=headers).json()
|
|
self.assertEqual(results['total'], 0, 'Do not expose titles from revoked accounts')
|
|
'''
|
|
p.write_text(s,encoding='utf-8',newline='\n')
|