GitHubSentinel / tests /test_subscription_manager.py
DjangoPeng's picture
add GitHubSentinel v0.8.2
3851ff8
import sys
import os
import unittest
import json
from unittest.mock import patch, mock_open, call
# 添加 src 目录到模块搜索路径,以便可以导入 src 目录中的模块
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../src')))
from subscription_manager import SubscriptionManager # 导入要测试的 SubscriptionManager 类
class TestSubscriptionManager(unittest.TestCase):
def setUp(self):
# 在每个测试之前设置测试所需的数据
self.subscriptions_file = 'test_subscriptions.json' # 测试用的订阅文件名
self.initial_data = ["DjangoPeng/openai-quickstart", "some/repo"] # 测试用的初始订阅数据
@patch('builtins.open', new_callable=mock_open, read_data=json.dumps(["DjangoPeng/openai-quickstart", "some/repo"]))
def test_save_subscriptions(self, mock_file):
"""
测试 save_subscriptions 方法是否正确保存订阅数据到文件。
"""
# 创建 SubscriptionManager 实例,并设置初始数据
manager = SubscriptionManager(self.subscriptions_file)
manager.subscriptions = self.initial_data
manager.save_subscriptions()
# 验证 open 函数是否被调用,分别用于读取和写入文件
mock_file.assert_any_call(self.subscriptions_file, 'r') # 检查读取操作
mock_file.assert_any_call(self.subscriptions_file, 'w') # 检查写入操作
# 提取写入的字符串内容,并验证写入内容是否正确
written_data = ''.join([call_arg.args[0] for call_arg in mock_file().write.call_args_list])
self.assertEqual(json.loads(written_data), self.initial_data)
@patch('builtins.open', new_callable=mock_open, read_data=json.dumps(["DjangoPeng/openai-quickstart", "some/repo"]))
def test_load_subscriptions(self, mock_file):
"""
测试 load_subscriptions 方法是否正确从文件加载订阅数据。
"""
# 创建 SubscriptionManager 实例,并加载订阅数据
manager = SubscriptionManager(self.subscriptions_file)
# 验证加载的订阅数据是否与预期一致
self.assertEqual(manager.subscriptions, self.initial_data)
# 验证 open 函数是否正确调用以读取文件
mock_file.assert_called_once_with(self.subscriptions_file, 'r')
@patch('builtins.open', new_callable=mock_open, read_data=json.dumps(["DjangoPeng/openai-quickstart"]))
def test_list_subscriptions(self, mock_file):
"""
测试 list_subscriptions 方法是否正确返回当前订阅列表。
"""
# 创建 SubscriptionManager 实例,并列出当前的订阅
manager = SubscriptionManager(self.subscriptions_file)
subscriptions = manager.list_subscriptions()
# 验证返回的订阅列表是否正确
self.assertEqual(subscriptions, ["DjangoPeng/openai-quickstart"])
# 验证 open 函数是否正确调用以读取文件
mock_file.assert_called_once_with(self.subscriptions_file, 'r')
@patch('builtins.open', new_callable=mock_open, read_data=json.dumps(["DjangoPeng/openai-quickstart"]))
def test_add_subscription(self, mock_file):
"""
测试 add_subscription 方法是否正确添加新的订阅,并保存到文件。
"""
# 创建 SubscriptionManager 实例,并添加新的订阅
manager = SubscriptionManager(self.subscriptions_file)
manager.add_subscription("new/repo")
# 验证新的订阅是否正确添加到订阅列表中
self.assertIn("new/repo", manager.subscriptions)
# 验证 open 函数是否正确调用以写入文件
mock_file.assert_called_with(self.subscriptions_file, 'w')
# 提取写入的字符串内容,并验证写入的内容是否正确
written_data = ''.join([call_arg.args[0] for call_arg in mock_file().write.call_args_list])
self.assertEqual(json.loads(written_data), ["DjangoPeng/openai-quickstart", "new/repo"])
@patch('builtins.open', new_callable=mock_open, read_data=json.dumps(["DjangoPeng/openai-quickstart", "some/repo"]))
def test_remove_subscription(self, mock_file):
"""
测试 remove_subscription 方法是否正确移除订阅,并保存到文件。
"""
# 创建 SubscriptionManager 实例,并移除指定的订阅
manager = SubscriptionManager(self.subscriptions_file)
manager.remove_subscription("some/repo")
# 验证订阅列表中是否已移除指定的订阅
self.assertNotIn("some/repo", manager.subscriptions)
# 验证 open 函数是否正确调用以写入文件
mock_file.assert_called_with(self.subscriptions_file, 'w')
# 提取写入的字符串内容,并验证写入的内容是否正确
written_data = ''.join([call_arg.args[0] for call_arg in mock_file().write.call_args_list])
self.assertEqual(json.loads(written_data), ["DjangoPeng/openai-quickstart"])
if __name__ == '__main__':
unittest.main()