89 lines
2.5 KiB
Ruby
89 lines
2.5 KiB
Ruby
# 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
|