import os
import json
from pr_agent.algo.utils import get_settings, github_action_output

class TestGitHubOutput:
    def test_github_action_output_enabled(self, monkeypatch, tmp_path):
        get_settings().set('GITHUB_ACTION_CONFIG.ENABLE_OUTPUT', True)
        monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
        output_data = {'key1': {'value1': 1, 'value2': 2}}
        key_name = 'key1'
        
        github_action_output(output_data, key_name)
        
        with open(str(tmp_path / 'output'), 'r') as f:
            env_value = f.read()
        
        actual_key = env_value.split('=')[0]
        actual_data = json.loads(env_value.split('=')[1])
        
        assert actual_key == key_name
        assert actual_data == output_data[key_name]
    
    def test_github_action_output_disabled(self, monkeypatch, tmp_path):
        get_settings().set('GITHUB_ACTION_CONFIG.ENABLE_OUTPUT', False)
        monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
        output_data = {'key1': {'value1': 1, 'value2': 2}}
        key_name = 'key1'
        
        github_action_output(output_data, key_name)
        
        assert not os.path.exists(str(tmp_path / 'output'))

    def test_github_action_output_notset(self, monkeypatch, tmp_path):
        # not set config
        monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
        output_data = {'key1': {'value1': 1, 'value2': 2}}
        key_name = 'key1'
        
        github_action_output(output_data, key_name)
        
        assert not os.path.exists(str(tmp_path / 'output'))
    
    def test_github_action_output_error_case(self, monkeypatch, tmp_path):
        monkeypatch.setenv('GITHUB_OUTPUT', str(tmp_path / 'output'))
        output_data = None # invalid data
        key_name = 'key1'
        
        github_action_output(output_data, key_name)
        
        assert not os.path.exists(str(tmp_path / 'output'))