cc-os/plugins/cc-architect/scripts/plugin_config/test/test_helper.rb

89 lines
2.5 KiB
Ruby
Raw Permalink Normal View History

# frozen_string_literal: true
require 'minitest/autorun'
require 'tmpdir'
require 'fileutils'
require 'json'
# Add the plugin_config directory to the load path
$LOAD_PATH.unshift(File.expand_path('..', __dir__))
require 'file_locations'
require 'file_verifier'
require 'runtime_verifier'
require 'expectations'
require 'operations/enable'
require 'operations/disable'
require 'operations/register'
require 'operations/unregister'
require 'operations/audit'
require 'operations/list'
require 'operations/validate'
module TestHelpers
def setup_temp_dirs
@tmpdir = Dir.mktmpdir('plugin_config_test')
@project_dir = File.join(@tmpdir, 'project')
@settings_dir = File.join(@project_dir, '.claude')
@marketplace_dir = @tmpdir
FileUtils.mkdir_p(@settings_dir)
end
def teardown_temp_dirs
FileUtils.rm_rf(@tmpdir) if @tmpdir && Dir.exist?(@tmpdir)
end
def settings_path
File.join(@project_dir, '.claude', 'settings.json')
end
def marketplace_path
File.join(@marketplace_dir, 'marketplace.json')
end
def create_settings(enabled_plugins = {})
data = { 'enabledPlugins' => enabled_plugins }
FileUtils.mkdir_p(File.dirname(settings_path))
File.write(settings_path, JSON.pretty_generate(data) + "\n")
settings_path
end
def create_marketplace(name: 'test-marketplace', plugins: [])
data = { 'name' => name, 'plugins' => plugins }
File.write(marketplace_path, JSON.pretty_generate(data) + "\n")
marketplace_path
end
def create_installed_plugins(path, plugins = {})
data = { 'plugins' => plugins }
FileUtils.mkdir_p(File.dirname(path))
File.write(path, JSON.pretty_generate(data) + "\n")
path
end
def create_plugin_json(plugin_dir, name:, description:, extra: {})
data = { 'name' => name, 'description' => description }.merge(extra)
path = File.join(plugin_dir, '.claude-plugin', 'plugin.json')
FileUtils.mkdir_p(File.dirname(path))
File.write(path, JSON.pretty_generate(data) + "\n")
path
end
def create_skill(plugin_dir, skill_name, with_skill_md: true)
skill_dir = File.join(plugin_dir, 'skills', skill_name)
FileUtils.mkdir_p(skill_dir)
File.write(File.join(skill_dir, 'SKILL.md'), "# #{skill_name}\n") if with_skill_md
skill_dir
end
def make_operation(klass, overrides = {})
params = {
plugin: 'test-plugin',
marketplace: 'test-marketplace',
project: @project_dir,
marketplace_file: marketplace_path
}.merge(overrides)
klass.new(params)
end
end