import urllib.parse from community_qa_bot.models import QaHistory from community_qa_bot import signature class TestSignature: def setup_method(self): self.qa_history = QaHistory( id=1, user_id=1, thread_ts='1234567890.123456', request_body=[{'role': 'user', 'content': 'tidb'}], response_text='tidb is a distributed database', spend_time=1.0, ) def test_signature(self): sig = signature.sign('hello#12') assert signature.verify('hello#12', sig) is True assert signature.verify('hello#12', sig + '1') is False assert signature.verify('hello#12', '') is False assert signature.verify('hello#12', '123123') is False assert signature.verify('hello#1', sig) is False assert signature.verify('hello', sig) is False def test_qa_signature(self): signature = self.qa_history.make_signature(1) assert self.qa_history.verify_signature(1, signature) is True assert self.qa_history.verify_signature(2, signature) is False assert self.qa_history.verify_signature(3, signature) is False def test_qa_signature_url(self): signature_url = self.qa_history.get_signature_url(1) parsed_url = urllib.parse.urlparse(signature_url) assert parsed_url.scheme == 'https' assert parsed_url.path == '/qa/1' query = dict(urllib.parse.parse_qsl(parsed_url.query)) assert query['u'] == '1' signature = query['s'] assert self.qa_history.verify_signature(1, signature) is True