"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-PLG-001","plugin.models.PluginConfig","__str__","正常系","アクティブなプラグインの文字列表現が正しいこと","active=True, name='TestPlugin', key='test'","なし","'TestPlugin - test' が返却される","低","表示用メソッド"
"2","UT-PLG-002","plugin.models.PluginConfig","__str__","正常系","非アクティブなプラグインの文字列表現が正しいこと","active=False, name='TestPlugin', key='test'","なし","'TestPlugin - test (not active)' が返却される","低","表示用メソッド"
"3","UT-PLG-003","plugin.models.PluginConfig","get_api_url","正常系","API URLが正しく返却されること","なし","なし","reverse('api-plugin-list') の結果が返却される","低","静的メソッド"
"4","UT-PLG-004","plugin.models.PluginConfig","mixins","正常系","登録されたmixinが返却されること","プラグインが登録されている","なし","登録されたmixinのdictが返却される","中","プラグイン情報取得"
"5","UT-PLG-005","plugin.models.PluginConfig","mixins","異常系","プラグインが見つからない場合に空のdictが返却されること","プラグインが登録されていない","なし","空のdict {} が返却される","中","エラーハンドリング"
"6","UT-PLG-006","plugin.models.PluginConfig","__init__","正常系","metaデータが正しく初期化されること","プラグインがレジストリに存在","なし","meta属性にslug, human_name等が設定される","中","初期化処理"
"7","UT-PLG-007","plugin.models.PluginConfig","__init__","正常系","非アクティブプラグインのmetaがNoneになること","プラグインが非アクティブ","なし","meta属性の値がすべてNone","中","初期化処理"
"8","UT-PLG-008","plugin.models.PluginConfig","__getstate__","正常系","pickle用のstateからpluginが除外されること","PluginConfigインスタンス","なし","plugin属性が含まれないstateが返却される","中","シリアライズ対応"
"9","UT-PLG-009","plugin.models.PluginConfig","save","正常系","アクティブ状態が変更された場合にレジストリがリロードされること","active=Falseから変更","active=True","registry.reload_pluginsが呼び出される","高","プラグイン状態管理"
"10","UT-PLG-010","plugin.models.PluginConfig","save","正常系","mandatoryプラグインはactiveが強制的にTrueになること","is_mandatory()=True, active=False","active=False","active=Trueで保存される","高","必須プラグイン制御"
"11","UT-PLG-011","plugin.models.PluginConfig","save","正常系","no_reload=Trueでレジストリリロードがスキップされること","active状態変更あり","no_reload=True","registry.reload_pluginsが呼び出されない","中","リロード制御"
"12","UT-PLG-012","plugin.models.PluginConfig","is_installed","正常系","プラグインがインストール済みの場合Trueが返却されること","self.plugin が存在","なし","True","中","インストール状態確認"
"13","UT-PLG-013","plugin.models.PluginConfig","is_installed","正常系","プラグインが未インストールの場合Falseが返却されること","self.plugin = None","なし","False","中","インストール状態確認"
"14","UT-PLG-014","plugin.models.PluginConfig","is_sample","正常系","サンプルプラグインの場合Trueが返却されること","plugin.check_is_sample()=True","なし","True","低","サンプル判定"
"15","UT-PLG-015","plugin.models.PluginConfig","is_sample","正常系","pluginがNoneの場合Falseが返却されること","self.plugin = None","なし","False","低","Null安全性"
"16","UT-PLG-016","plugin.models.PluginConfig","is_builtin","正常系","ビルトインプラグインの場合Trueが返却されること","plugin.check_is_builtin()=True","なし","True","低","ビルトイン判定"
"17","UT-PLG-017","plugin.models.PluginConfig","is_mandatory","正常系","PLUGINS_MANDATORYに含まれる場合Trueが返却されること","settings.PLUGINS_MANDATORYにkeyが含まれる","なし","True","高","必須判定"
"18","UT-PLG-018","plugin.models.PluginConfig","is_mandatory","正常系","registry.MANDATORY_PLUGINSに含まれる場合Trueが返却されること","registry.MANDATORY_PLUGINSにkeyが含まれる","なし","True","高","必須判定"
"19","UT-PLG-019","plugin.models.PluginConfig","is_active","正常系","mandatoryプラグインは常にTrueが返却されること","is_mandatory()=True, active=False","なし","True","高","アクティブ状態判定"
"20","UT-PLG-020","plugin.models.PluginConfig","is_active","正常系","非mandatoryプラグインはactive属性の値が返却されること","is_mandatory()=False, active=True","なし","True","高","アクティブ状態判定"
"21","UT-PLG-021","plugin.models.PluginConfig","is_package","正常系","package_nameがある場合Trueが返却されること","package_name='test-package'","なし","True","中","パッケージ判定"
"22","UT-PLG-022","plugin.models.PluginConfig","is_package","正常系","package_nameがなくpluginにpackage_nameがある場合Trueが返却されること","package_name=None, plugin.package_name='test'","なし","True","中","パッケージ判定"
"23","UT-PLG-023","plugin.models.PluginConfig","admin_source","正常系","admin_sourceのパスが正しく返却されること","plugin.get_admin_source()が有効なパスを返す","なし","JavaScriptファイルのパス","低","管理画面統合"
"24","UT-PLG-024","plugin.models.PluginConfig","admin_source","正常系","非アクティブの場合Noneが返却されること","active=False","なし","None","低","管理画面統合"
"25","UT-PLG-025","plugin.models.PluginConfig","admin_context","正常系","コンテキストデータが正しく返却されること","plugin.get_admin_context()が有効なdictを返す","なし","コンテキストdict","低","管理画面統合"
"26","UT-PLG-026","plugin.models.PluginConfig","activate","正常系","プラグインがアクティブ化されること","active=False","active=True","active=Trueで保存され、イベントがトリガーされる","高","プラグイン活性化"
"27","UT-PLG-027","plugin.models.PluginConfig","activate","正常系","プラグインが非アクティブ化されること","active=True","active=False","active=Falseで保存され、静的ファイルがクリアされる","高","プラグイン非活性化"
"28","UT-PLG-028","plugin.models.PluginConfig","activate","正常系","状態が同じ場合は何もしないこと","active=True","active=True","saveが呼び出されない","中","重複処理防止"
"29","UT-PLG-029","plugin.models.PluginSetting","to_native_value","正常系","ネイティブ値が正しく返却されること","key='TEST_SETTING', value='123'","なし","get_settingの結果が返却される","中","設定値取得"
"30","UT-PLG-030","plugin.models.PluginSetting","get_setting_definition","正常系","設定定義が正しく取得されること","pluginが指定され、settingsが存在","key='TEST_KEY', plugin=plugin_config","設定定義dictが返却される","中","設定定義取得"
"31","UT-PLG-031","plugin.models.PluginSetting","get_setting_definition","正常系","settingsが渡された場合はそれを使用すること","settings引数あり","settings={'KEY': {...}}","引数のsettingsから定義が取得される","中","設定定義取得"
"32","UT-PLG-032","plugin.models.PluginUserSetting","__str__","正常系","文字列表現が正しいこと","key='THEME', user=testuser, value='dark'","なし","'THEME (for testuser): dark' が返却される","低","表示用メソッド"
"33","UT-PLG-033","plugin.models.PluginUserSetting","get_setting_definition","正常系","ユーザー設定定義が正しく取得されること","pluginが指定","key='USER_KEY', plugin=plugin_config","ユーザー設定定義dictが返却される","中","ユーザー設定定義取得"
"34","UT-PLG-034","plugin.plugin.InvenTreePlugin","__init__","正常系","プラグインが正しく初期化されること","なし","なし","BASE mixinが追加され、packageが定義される","高","プラグイン初期化"
"35","UT-PLG-035","plugin.plugin.InvenTreePlugin","__init_subclass__","異常系","finalメソッドをオーバーライドするとTypeErrorが発生すること","サブクラスでfinalメソッドを定義","なし","TypeError('INVE-E11: ...')","高","セキュリティ制御"
"36","UT-PLG-036","plugin.plugin.InvenTreePlugin","file","正常系","プラグイン定義ファイルのパスが返却されること","なし","なし","Pathオブジェクトが返却される","低","パス取得"
"37","UT-PLG-037","plugin.plugin.InvenTreePlugin","path","正常系","プラグインのベースフォルダパスが返却されること","なし","なし","file().parentが返却される","低","パス取得"
"38","UT-PLG-038","plugin.plugin.InvenTreePlugin","name","正常系","プラグイン名が正しく返却されること","NAME='TestPlugin'","なし","'TestPlugin'","中","メタ情報取得"
"39","UT-PLG-039","plugin.plugin.InvenTreePlugin","slug","正常系","SLUGが設定されている場合はスラッグ化されて返却されること","SLUG='Test Plugin'","なし","'test-plugin'","中","メタ情報取得"
"40","UT-PLG-040","plugin.plugin.InvenTreePlugin","slug","正常系","SLUGが未設定の場合はNAMEがスラッグ化されて返却されること","SLUG=None, NAME='Test Plugin'","なし","'test-plugin'","中","メタ情報取得"
"41","UT-PLG-041","plugin.plugin.InvenTreePlugin","human_name","正常系","TITLEが設定されている場合はTITLEが返却されること","TITLE='Human Readable Name'","なし","'Human Readable Name'","低","メタ情報取得"
"42","UT-PLG-042","plugin.plugin.InvenTreePlugin","description","正常系","DESCRIPTIONが返却されること","DESCRIPTION='Test Description'","なし","'Test Description'","低","メタ情報取得"
"43","UT-PLG-043","plugin.plugin.InvenTreePlugin","description","正常系","DESCRIPTIONが未設定の場合はNAMEが返却されること","DESCRIPTION=None, NAME='TestPlugin'","なし","'TestPlugin'","低","メタ情報取得"
"44","UT-PLG-044","plugin.plugin.InvenTreePlugin","author","正常系","AUTHORが返却されること","AUTHOR='Test Author'","なし","'Test Author'","低","メタ情報取得"
"45","UT-PLG-045","plugin.plugin.InvenTreePlugin","version","正常系","VERSIONが返却されること","VERSION='1.0.0'","なし","'1.0.0'","中","バージョン情報"
"46","UT-PLG-046","plugin.plugin.InvenTreePlugin","website","正常系","WEBSITEが返却されること","WEBSITE='https://example.com'","なし","'https://example.com'","低","メタ情報取得"
"47","UT-PLG-047","plugin.plugin.InvenTreePlugin","license","正常系","LICENSEが返却されること","LICENSE='MIT'","なし","'MIT'","低","メタ情報取得"
"48","UT-PLG-048","plugin.plugin.InvenTreePlugin","check_version","正常系","バージョン範囲内の場合Trueが返却されること","MIN_VERSION='0.1.0', MAX_VERSION='99.0.0'","latest='1.0.0'","True","高","バージョン検証"
"49","UT-PLG-049","plugin.plugin.InvenTreePlugin","check_version","正常系","バージョン範囲外の場合Falseが返却されること","MIN_VERSION='2.0.0'","latest='1.0.0'","False","高","バージョン検証"
"50","UT-PLG-050","plugin.plugin.InvenTreePlugin","is_active","正常系","アクティブなプラグインの場合Trueが返却されること","PluginConfig.active=True","なし","True","高","アクティブ状態"
"51","UT-PLG-051","plugin.plugin.InvenTreePlugin","is_active","正常系","mandatoryプラグインは常にTrueが返却されること","is_mandatory()=True","なし","True","高","アクティブ状態"
"52","UT-PLG-052","plugin.plugin.InvenTreePlugin","check_is_sample","正常系","サンプルディレクトリ内のプラグインの場合Trueが返却されること","package_pathが'plugin/samples/'で始まる","なし","True","低","サンプル判定"
"53","UT-PLG-053","plugin.plugin.InvenTreePlugin","check_is_builtin","正常系","ビルトインディレクトリ内のプラグインの場合Trueが返却されること","package_pathが'plugin/builtin'で始まる","なし","True","低","ビルトイン判定"
"54","UT-PLG-054","plugin.plugin.InvenTreePlugin","plugin_static_file","正常系","静的ファイルURLが正しく構築されること","SLUG='test', DEBUG=False","'js/main.js'","'/static/plugins/test/js/main.js'","中","静的ファイル"
"55","UT-PLG-055","plugin.plugin.InvenTreePlugin","plugin_static_file","正常系","開発モードでは開発ホストURLが返却されること","DEBUG=True, PLUGIN_DEV_SLUG='test'","'js/main.js'","'{PLUGIN_DEV_HOST}/src/js/main.tsx'","中","静的ファイル"
"56","UT-PLG-056","plugin.plugin.InvenTreePlugin","get_admin_source","正常系","ADMIN_SOURCEが設定されている場合はパスが返却されること","ADMIN_SOURCE='admin.js'","なし","plugin_static_file('admin.js')の結果","低","管理画面統合"
"57","UT-PLG-057","plugin.plugin.InvenTreePlugin","get_admin_source","正常系","ADMIN_SOURCEが未設定の場合はNoneが返却されること","ADMIN_SOURCE=None","なし","None","低","管理画面統合"
"58","UT-PLG-058","plugin.plugin.MixinBase","mixin","正常系","登録済みmixinの場合Trueが返却されること","'base' mixinが登録済み","'base'","True","中","mixin管理"
"59","UT-PLG-059","plugin.plugin.MixinBase","mixin","正常系","未登録mixinの場合Falseが返却されること","'custom' mixinが未登録","'custom'","False","中","mixin管理"
"60","UT-PLG-060","plugin.plugin.MixinBase","mixin_enabled","正常系","有効なmixinの場合Trueが返却されること","mixinが登録され有効","'base'","True","中","mixin状態"
"61","UT-PLG-061","plugin.plugin.MixinBase","mixin_enabled","正常系","無効なmixinの場合Falseが返却されること","mixinが登録されているが無効","'disabled'","False","中","mixin状態"
"62","UT-PLG-062","plugin.plugin.MixinBase","add_mixin","正常系","mixinが正しく追加されること","なし","key='test', fnc_enabled=True","_mixins['test']=True, _mixinreg['test']が設定される","高","mixin登録"
"63","UT-PLG-063","plugin.plugin.MixinBase","get_registered_mixins","正常系","登録されたmixinが返却されること","複数のmixinが登録済み","なし","登録されたmixinのdict","中","mixin一覧"
"64","UT-PLG-064","plugin.plugin.MixinBase","get_registered_mixins","正常系","with_base=Falseでbaseが除外されること","baseを含む複数mixinが登録済み","with_base=False","baseが含まれないdict","中","mixin一覧"
"65","UT-PLG-065","plugin.plugin.MetaBase","get_meta_value","正常系","keyで値が取得できること","属性NAME='Test'が存在","key='NAME'","'Test'","中","メタ値取得"
"66","UT-PLG-066","plugin.plugin.MetaBase","get_meta_value","正常系","old_keyで値が取得でき警告が出ること","PLUGIN_NAME='OldTest'が存在","key='NAME', old_key='PLUGIN_NAME'","'OldTest' と DeprecationWarning","中","後方互換性"
"67","UT-PLG-067","plugin.plugin.MetaBase","get_meta_value","正常系","値がない場合__defaultが返却されること","属性が存在しない","key='MISSING', __default='default'","'default'","中","デフォルト値"
"68","UT-PLG-068","plugin.registry.PluginsRegistry","__init__","正常系","レジストリが正しく初期化されること","なし","なし","plugins, plugins_inactive, plugins_full が空dictで初期化される","高","レジストリ初期化"
"69","UT-PLG-069","plugin.registry.PluginsRegistry","is_ready","正常系","ready状態が正しく返却されること","ready=True","なし","True","中","準備状態"
"70","UT-PLG-070","plugin.registry.PluginsRegistry","is_loading","正常系","ロード中状態が正しく返却されること","loading_lock.locked()=True","なし","True","中","ロード状態"
"71","UT-PLG-071","plugin.registry.PluginsRegistry","get_plugin","正常系","slugでプラグインが取得できること","プラグイン'test'が登録済み","slug='test'","該当プラグインインスタンス","高","プラグイン取得"
"72","UT-PLG-072","plugin.registry.PluginsRegistry","get_plugin","正常系","存在しないslugの場合Noneが返却されること","プラグイン'unknown'が未登録","slug='unknown'","None (警告ログ出力)","高","プラグイン取得"
"73","UT-PLG-073","plugin.registry.PluginsRegistry","get_plugin","正常系","active=Falseフィルタが機能すること","プラグインがアクティブ","slug='test', active=False","None","中","フィルタリング"
"74","UT-PLG-074","plugin.registry.PluginsRegistry","get_plugin","正常系","with_mixinフィルタが機能すること","プラグインが'barcode' mixinを持たない","slug='test', with_mixin='barcode'","None","中","フィルタリング"
"75","UT-PLG-075","plugin.registry.PluginsRegistry","get_plugin_config","正常系","既存のPluginConfigが返却されること","PluginConfig(key='test')が存在","slug='test'","該当PluginConfigインスタンス","高","設定取得"
"76","UT-PLG-076","plugin.registry.PluginsRegistry","get_plugin_config","正常系","存在しない場合新規作成されること","PluginConfig(key='new')が存在しない","slug='new'","新規作成されたPluginConfig","高","設定取得"
"77","UT-PLG-077","plugin.registry.PluginsRegistry","set_plugin_state","正常系","プラグイン状態が更新されること","プラグイン'test'が登録済み","slug='test', state=True","cfg.active=Trueで保存される","高","状態更新"
"78","UT-PLG-078","plugin.registry.PluginsRegistry","set_plugin_state","異常系","存在しないプラグインの場合警告が出力されること","プラグイン'unknown'が未登録","slug='unknown', state=True","警告ログのみ、例外なし","中","エラーハンドリング"
"79","UT-PLG-079","plugin.registry.PluginsRegistry","call_plugin_function","正常系","プラグインのメソッドが呼び出されること","プラグイン'test'に'my_func'メソッドが存在","slug='test', func='my_func'","my_funcの戻り値","高","関数呼び出し"
"80","UT-PLG-080","plugin.registry.PluginsRegistry","call_plugin_function","異常系","プラグインが存在しない場合AttributeErrorが発生すること","プラグイン'unknown'が未登録","slug='unknown', func='any'","AttributeError","高","エラーハンドリング"
"81","UT-PLG-081","plugin.registry.PluginsRegistry","call_plugin_function","異常系","メソッドが存在しない場合AttributeErrorが発生すること","プラグイン'test'に'missing'メソッドがない","slug='test', func='missing'","AttributeError","高","エラーハンドリング"
"82","UT-PLG-082","plugin.registry.PluginsRegistry","with_mixin","正常系","指定mixinを持つプラグイン一覧が返却されること","複数プラグインが登録済み、一部が'barcode'を持つ","mixin='barcode'","'barcode' mixinを持つプラグインのリスト","高","mixin検索"
"83","UT-PLG-083","plugin.registry.PluginsRegistry","with_mixin","正常系","activeフィルタが機能すること","アクティブ/非アクティブなプラグインが混在","mixin='events', active=True","アクティブなプラグインのみのリスト","中","フィルタリング"
"84","UT-PLG-084","plugin.registry.PluginsRegistry","with_mixin","正常系","builtinフィルタが機能すること","builtin/非builtinプラグインが混在","mixin='base', builtin=True","builtinプラグインのみのリスト","中","フィルタリング"
"85","UT-PLG-085","plugin.registry.PluginsRegistry","reload_plugins","正常系","プラグインが正しくリロードされること","プラグインが登録済み","full_reload=True, force_reload=True","プラグインがアンロード後ロードされる","高","リロード処理"
"86","UT-PLG-086","plugin.registry.PluginsRegistry","reload_plugins","正常系","ロード中の場合スキップされること","is_loading=True","なし","リロード処理がスキップされる","中","競合防止"
"87","UT-PLG-087","plugin.registry.PluginsRegistry","reload_plugins","正常系","collectオプションでプラグイン収集されること","collect=True","collect=True","collect_plugins()が呼び出される","中","プラグイン収集"
"88","UT-PLG-088","plugin.registry.PluginsRegistry","plugin_dirs","正常系","プラグインディレクトリ一覧が返却されること","PLUGINS_ENABLED=True","なし","'plugin.builtin'を含むリスト","中","ディレクトリ取得"
"89","UT-PLG-089","plugin.registry.PluginsRegistry","plugin_dirs","正常系","テストモードでsamplesディレクトリが含まれること","TESTING=True","なし","'plugin.samples'がリストに含まれる","低","テスト用"
"90","UT-PLG-090","plugin.registry.PluginsRegistry","collect_plugins","正常系","プラグインが収集されること","プラグインディレクトリにプラグインが存在","なし","InvenTreePluginのサブクラスのリスト","高","プラグイン収集"
"91","UT-PLG-091","plugin.registry.PluginsRegistry","discover_mixins","正常系","mixinが収集されること","プラグインがmixinを持つ","なし","mixin_modulesが更新される","中","mixin収集"
"92","UT-PLG-092","plugin.registry.PluginsRegistry","install_plugin_file","正常系","プラグインファイルがインストールされること","PLUGIN_FILEが存在","なし","install_plugins_fileが呼び出される","中","インストール"
"93","UT-PLG-093","plugin.registry.PluginsRegistry","calculate_plugin_hash","正常系","プラグインハッシュが計算されること","複数プラグインが登録済み","なし","MD5ハッシュ文字列","中","ハッシュ計算"
"94","UT-PLG-094","plugin.registry.PluginsRegistry","update_plugin_hash","正常系","ハッシュが更新されDBに保存されること","ハッシュが変更された","なし","新しいハッシュがDBに保存される","中","ハッシュ更新"
"95","UT-PLG-095","plugin.registry.PluginsRegistry","check_reload","正常系","ハッシュが変更された場合リロードされること","DBのハッシュと現在のハッシュが異なる","なし","reload_pluginsが呼び出され、Trueが返却される","高","自動リロード"
"96","UT-PLG-096","plugin.registry.PluginsRegistry","check_reload","正常系","ハッシュが同じ場合リロードされないこと","DBのハッシュと現在のハッシュが同じ","なし","Falseが返却される","中","不要リロード防止"
"97","UT-PLG-097","plugin.helpers.IntegrationPluginError","__init__","正常系","エラーが正しく初期化されること","なし","path='test', message='error'","path='test', message='error'","中","エラークラス"
"98","UT-PLG-098","plugin.helpers.log_registry_error","","正常系","エラーがレジストリに追加されること","registry.errors={}","error='test error', reference='general'","registry.errors['general']=['test error']","中","エラーログ"
"99","UT-PLG-099","plugin.helpers.handle_error","","正常系","エラーがIntegrationPluginErrorとしてラップされること","do_raise=True","error=Exception('test')","IntegrationPluginErrorが発生","高","エラーハンドリング"
"100","UT-PLG-100","plugin.helpers.handle_error","","正常系","do_raise=Falseでエラーがログのみされること","do_raise=False","error=Exception('test')","例外は発生せず、ログに記録される","中","エラーハンドリング"
"101","UT-PLG-101","plugin.helpers.get_entrypoints","","正常系","エントリポイントが返却されること","inventree_pluginsエントリポイントが存在","なし","エントリポイントのリスト","中","エントリポイント"
"102","UT-PLG-102","plugin.helpers.get_git_log","","正常系","gitログ情報が返却されること","gitリポジトリ内のファイルパス","path='/path/to/file'","hash, author, mail, date, messageを含むdict","低","git情報"
"103","UT-PLG-103","plugin.helpers.get_git_log","","正常系","gitリポジトリ外の場合空の値が返却されること","gitリポジトリ外のパス","path='/tmp/file'","空文字列を含むdict","低","git情報"
"104","UT-PLG-104","plugin.helpers.get_modules","","正常系","パッケージ内のモジュールが返却されること","有効なパッケージ","pkg=plugin_package","モジュールのリスト","中","モジュール取得"
"105","UT-PLG-105","plugin.helpers.get_classes","","正常系","モジュール内のクラスが返却されること","クラスを含むモジュール","module=test_module","(name, class)のタプルリスト","中","クラス取得"
"106","UT-PLG-106","plugin.helpers.get_plugins","","正常系","InvenTreePluginのサブクラスが返却されること","プラグインを含むパッケージ","pkg=plugin_pkg, baseclass=InvenTreePlugin","InvenTreePluginサブクラスのリスト","高","プラグイン取得"
"107","UT-PLG-107","plugin.installer.pip_command","","正常系","pipコマンドが実行されること","pip利用可能","'install', 'package'","コマンド出力","高","pip実行"
"108","UT-PLG-108","plugin.installer.pip_command","","異常系","pipコマンド失敗時にCalledProcessErrorが発生すること","無効なパッケージ","'install', 'invalid-package'","subprocess.CalledProcessError","高","エラーハンドリング"
"109","UT-PLG-109","plugin.installer.handle_pip_error","","異常系","pipエラーがValidationErrorに変換されること","CalledProcessError発生","error=CalledProcessError","ValidationError","高","エラー変換"
"110","UT-PLG-110","plugin.installer.get_install_info","","正常系","インストール情報が取得されること","パッケージがインストール済み","packagename='django'","location等を含むdict","中","インストール情報"
"111","UT-PLG-111","plugin.installer.get_install_info","","正常系","未インストールパッケージの場合errorが含まれること","パッケージが未インストール","packagename='nonexistent'","errorキーを含むdict","中","エラーケース"
"112","UT-PLG-112","plugin.installer.plugins_file_hash","","正常系","プラグインファイルのハッシュが計算されること","PLUGIN_FILEが存在","なし","SHA256ハッシュ文字列","中","ハッシュ計算"
"113","UT-PLG-113","plugin.installer.plugins_file_hash","","正常系","ファイルが存在しない場合Noneが返却されること","PLUGIN_FILE=None","なし","None","中","Nullケース"
"114","UT-PLG-114","plugin.installer.install_plugins_file","","正常系","プラグインファイルがインストールされること","PLUGIN_FILEが存在","なし","pip installが実行される","高","ファイルインストール"
"115","UT-PLG-115","plugin.installer.install_plugins_file","","正常系","ファイルが存在しない場合早期リターンすること","PLUGIN_FILEが存在しない","なし","Noneが返却される(何も実行されない)","中","存在チェック"
"116","UT-PLG-116","plugin.installer.update_plugins_file","","正常系","プラグインがファイルに追加されること","PLUGIN_FILEが存在","install_name='new-plugin'","ファイルに'new-plugin'行が追加される","高","ファイル更新"
"117","UT-PLG-117","plugin.installer.update_plugins_file","","正常系","既存プラグインが更新されること","ファイルに'old-plugin'行が存在","install_name='old-plugin', version='2.0'","行が'old-plugin==2.0'に更新される","高","ファイル更新"
"118","UT-PLG-118","plugin.installer.update_plugins_file","","正常系","remove=Trueでプラグインが削除されること","ファイルに'plugin-to-remove'行が存在","install_name='plugin-to-remove', remove=True","該当行がファイルから削除される","高","ファイル更新"
"119","UT-PLG-119","plugin.installer.install_plugin","","正常系","URLからプラグインがインストールされること","有効なVCS URL","url='git+https://github.com/...', packagename='test'","インストール成功のdict","高","プラグインインストール"
"120","UT-PLG-120","plugin.installer.install_plugin","","正常系","パッケージ名からプラグインがインストールされること","有効なパッケージ名","packagename='inventree-plugin'","インストール成功のdict","高","プラグインインストール"
"121","UT-PLG-121","plugin.installer.install_plugin","","異常系","非スタッフユーザーの場合ValidationErrorが発生すること","user.is_staff=False","user=non_staff_user","ValidationError('Only staff users...')","高","権限チェック"
"122","UT-PLG-122","plugin.installer.install_plugin","","異常系","インストール無効時にValidationErrorが発生すること","PLUGINS_INSTALL_DISABLED=True","なし","ValidationError('Plugin installation is disabled')","高","無効化チェック"
"123","UT-PLG-123","plugin.installer.validate_package_plugin","","正常系","有効なパッケージプラグインの場合例外が発生しないこと","cfg.plugin存在, is_package=True, package_name存在","cfg=valid_config","例外なし","中","検証"
"124","UT-PLG-124","plugin.installer.validate_package_plugin","","異常系","プラグインが見つからない場合ValidationErrorが発生すること","cfg.plugin=None","cfg=invalid_config","ValidationError('Plugin was not found')","中","検証"
"125","UT-PLG-125","plugin.installer.validate_package_plugin","","異常系","パッケージプラグインでない場合ValidationErrorが発生すること","cfg.is_package()=False","cfg=non_package_config","ValidationError('Plugin is not a packaged plugin')","中","検証"
"126","UT-PLG-126","plugin.installer.uninstall_plugin","","正常系","プラグインがアンインストールされること","非アクティブなパッケージプラグイン","cfg=inactive_plugin","pip uninstallが実行され成功dictが返却される","高","アンインストール"
"127","UT-PLG-127","plugin.installer.uninstall_plugin","","異常系","アクティブなプラグインの場合ValidationErrorが発生すること","cfg.active=True","cfg=active_plugin","ValidationError('Plugin cannot be uninstalled...')","高","アクティブチェック"
"128","UT-PLG-128","plugin.installer.uninstall_plugin","","異常系","mandatoryプラグインの場合ValidationErrorが発生すること","cfg.is_mandatory()=True","cfg=mandatory_plugin","ValidationError('INVE-E10...')","高","必須チェック"
"129","UT-PLG-129","plugin.installer.uninstall_plugin","","異常系","サンプルプラグインの場合ValidationErrorが発生すること","cfg.is_sample()=True","cfg=sample_plugin","ValidationError('INVE-E10...')","中","サンプルチェック"
"130","UT-PLG-130","plugin.installer.uninstall_plugin","","異常系","ビルトインプラグインの場合ValidationErrorが発生すること","cfg.is_builtin()=True","cfg=builtin_plugin","ValidationError('INVE-E10...')","中","ビルトインチェック"
"131","UT-PLG-131","plugin.events.trigger_event","","正常系","イベントがトリガーされること","ENABLE_PLUGINS_EVENTS=True","event='test_event'","offload_taskが呼び出される","高","イベントトリガー"
"132","UT-PLG-132","plugin.events.trigger_event","","正常系","プラグインイベント無効時は何もしないこと","ENABLE_PLUGINS_EVENTS=False","event='test_event'","早期リターン、何も実行されない","中","無効化チェック"
"133","UT-PLG-133","plugin.events.register_event","","正常系","イベントが登録されること","有効なプラグインが存在","event='test_event'","対象プラグインにprocess_eventがオフロードされる","高","イベント登録"
"134","UT-PLG-134","plugin.events.process_event","","正常系","イベントが処理されること","プラグインがアクティブ","plugin_slug='test', event='event'","plugin.process_event()が呼び出される","高","イベント処理"
"135","UT-PLG-135","plugin.events.process_event","","異常系","プラグインが見つからない場合早期リターンすること","プラグインが存在しない","plugin_slug='unknown', event='event'","エラーログが出力され、処理終了","中","エラーケース"
"136","UT-PLG-136","plugin.events.allow_table_event","","正常系","許可されたテーブルの場合Trueが返却されること","通常のテーブル名","table_name='part_part'","True","中","テーブルフィルタ"
"137","UT-PLG-137","plugin.events.allow_table_event","","正常系","無視されるプレフィックスの場合Falseが返却されること","django_で始まるテーブル","table_name='django_session'","False","中","テーブルフィルタ"
"138","UT-PLG-138","plugin.events.allow_table_event","","正常系","無視リストのテーブルの場合Falseが返却されること","明示的に無視されるテーブル","table_name='common_notificationentry'","False","中","テーブルフィルタ"
"139","UT-PLG-139","plugin.events.after_save","","正常系","createdイベントがトリガーされること","created=True","sender=Part, instance, created=True","'{table}.created'イベントがトリガーされる","中","保存イベント"
"140","UT-PLG-140","plugin.events.after_save","","正常系","savedイベントがトリガーされること","created=False","sender=Part, instance, created=False","'{table}.saved'イベントがトリガーされる","中","保存イベント"
"141","UT-PLG-141","plugin.events.after_delete","","正常系","deletedイベントがトリガーされること","インスタンス削除","sender=Part, instance","'{table}.deleted'イベントがトリガーされる","中","削除イベント"
"142","UT-PLG-142","plugin.staticfiles.clear_static_dir","","正常系","ディレクトリがクリアされること","ディレクトリが存在","path='plugins/test/'","ディレクトリ内のファイルが削除される","中","静的ファイル管理"
"143","UT-PLG-143","plugin.staticfiles.clear_static_dir","","正常系","存在しないディレクトリの場合何もしないこと","ディレクトリが存在しない","path='plugins/nonexistent/'","早期リターン","低","存在チェック"
"144","UT-PLG-144","plugin.staticfiles.collect_plugins_static_files","","正常系","全プラグインの静的ファイルが収集されること","複数プラグインが登録済み","なし","各プラグインのcopy_plugin_static_filesが呼び出される","中","静的ファイル収集"
"145","UT-PLG-145","plugin.staticfiles.clear_plugins_static_files","","正常系","不要なプラグインディレクトリがクリアされること","plugins/ディレクトリに未登録プラグインのフォルダが存在","なし","未登録プラグインのディレクトリが削除される","中","クリーンアップ"
"146","UT-PLG-146","plugin.staticfiles.copy_plugin_static_files","","正常系","プラグインの静的ファイルがコピーされること","プラグインにstatic/ディレクトリが存在","slug='test'","ファイルがplugins/test/にコピーされる","中","静的ファイルコピー"
"147","UT-PLG-147","plugin.staticfiles.copy_plugin_static_files","","正常系","staticディレクトリがない場合早期リターンすること","プラグインにstatic/ディレクトリがない","slug='test'","何も実行されない","低","存在チェック"
"148","UT-PLG-148","plugin.staticfiles.clear_plugin_static_files","","正常系","プラグインの静的ファイルがクリアされること","plugins/test/ディレクトリが存在","slug='test'","clear_static_dir('plugins/test/')が呼び出される","中","静的ファイル削除"
"149","UT-PLG-149","plugin.base.integration.SettingsMixin","__init__","正常系","Settingsミックスインが登録されること","なし","なし","'settings' mixinが追加される","高","mixin初期化"
"150","UT-PLG-150","plugin.base.integration.SettingsMixin","has_settings","正常系","設定がある場合Trueが返却されること","SETTINGS={'KEY': {...}}","なし","True","中","設定有無"
"151","UT-PLG-151","plugin.base.integration.SettingsMixin","has_settings","正常系","設定がない場合Falseが返却されること","SETTINGS={}","なし","False","中","設定有無"
"152","UT-PLG-152","plugin.base.integration.SettingsMixin","get_setting","正常系","設定値が取得できること","設定'KEY'='value'が存在","key='KEY'","'value'","高","設定取得"
"153","UT-PLG-153","plugin.base.integration.SettingsMixin","get_setting","正常系","存在しない設定でbackup_valueが返却されること","設定が存在しない","key='MISSING', backup_value='default'","'default'","中","デフォルト値"
"154","UT-PLG-154","plugin.base.integration.SettingsMixin","set_setting","正常系","設定値が保存されること","プラグインが登録済み","key='KEY', value='new_value'","PluginSetting.set_settingが呼び出される","高","設定保存"
"155","UT-PLG-155","plugin.base.integration.SettingsMixin","get_user_setting","正常系","ユーザー設定が取得できること","ユーザー設定'KEY'='value'が存在","key='KEY', user=test_user","'value'","高","ユーザー設定取得"
"156","UT-PLG-156","plugin.base.integration.SettingsMixin","set_user_setting","正常系","ユーザー設定が保存されること","プラグインが登録済み","key='KEY', value='new', user=test_user","PluginUserSetting.set_settingが呼び出される","高","ユーザー設定保存"
"157","UT-PLG-157","plugin.base.integration.SettingsMixin","check_settings","正常系","全必須設定が定義済みの場合(True, [])が返却されること","必須設定がすべて定義済み","なし","(True, [])","中","設定検証"
"158","UT-PLG-158","plugin.base.integration.SettingsMixin","check_settings","正常系","不足設定がある場合(False, リスト)が返却されること","必須設定'REQUIRED'が未定義","なし","(False, ['REQUIRED'])","中","設定検証"
"159","UT-PLG-159","plugin.base.integration.SettingsMixin","get_settings_dict","正常系","全設定がdictで返却されること","複数の設定が定義済み","なし","{'KEY1': 'val1', 'KEY2': 'val2'}","中","設定dict取得"
"160","UT-PLG-160","plugin.base.integration.ValidationMixin","__init__","正常系","Validationミックスインが登録されること","なし","なし","'validation' mixinが追加される","高","mixin初期化"
"161","UT-PLG-161","plugin.base.integration.ValidationMixin","raise_error","正常系","ValidationErrorが発生すること","なし","message='error message'","ValidationError('error message')","中","エラー発生"
"162","UT-PLG-162","plugin.base.integration.ValidationMixin","validate_model_deletion","正常系","デフォルト実装はNoneを返却すること","なし","instance=any_model","None","中","削除検証"
"163","UT-PLG-163","plugin.base.integration.ValidationMixin","validate_model_instance","正常系","デフォルト実装はNoneを返却すること","なし","instance=any_model","None","中","インスタンス検証"
"164","UT-PLG-164","plugin.base.integration.ValidationMixin","validate_part_name","正常系","デフォルト実装はNoneを返却すること","なし","name='Part Name', part=part_instance","None","中","部品名検証"
"165","UT-PLG-165","plugin.base.integration.ValidationMixin","validate_part_ipn","正常系","デフォルト実装はNoneを返却すること","なし","ipn='IPN-001', part=part_instance","None","中","IPN検証"
"166","UT-PLG-166","plugin.base.integration.ValidationMixin","validate_batch_code","正常系","デフォルト実装はNoneを返却すること","なし","batch_code='BATCH001', item=stock_item","None","中","バッチコード検証"
"167","UT-PLG-167","plugin.base.integration.ValidationMixin","generate_batch_code","正常系","デフォルト実装はNoneを返却すること","なし","kwargs={}","None","中","バッチコード生成"
"168","UT-PLG-168","plugin.base.integration.ValidationMixin","validate_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001', part=part_instance","None","中","シリアル番号検証"
"169","UT-PLG-169","plugin.base.integration.ValidationMixin","convert_serial_to_int","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001'","None","中","シリアル番号変換"
"170","UT-PLG-170","plugin.base.integration.ValidationMixin","get_latest_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","part=part_instance","None","中","最新シリアル取得"
"171","UT-PLG-171","plugin.base.integration.ValidationMixin","increment_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001', part=part_instance","None","中","シリアル番号インクリメント"
"172","UT-PLG-172","plugin.base.integration.ValidationMixin","validate_parameter","正常系","デフォルト実装はNoneを返却すること","なし","parameter=param_instance, data='value'","None","中","パラメータ検証"
"173","UT-PLG-173","plugin.base.event.EventMixin","__init__","正常系","Eventsミックスインが登録されること","なし","なし","'events' mixinが追加される","高","mixin初期化"
"174","UT-PLG-174","plugin.base.event.EventMixin","wants_process_event","正常系","デフォルト実装はTrueを返却すること","なし","event='any_event'","True","中","イベント購読"
"175","UT-PLG-175","plugin.base.event.EventMixin","process_event","異常系","デフォルト実装はMixinNotImplementedErrorを発生すること","なし","event='any_event'","MixinNotImplementedError","高","イベント処理"
"176","UT-PLG-176","plugin.base.integration.ScheduleMixin","__init__","正常系","Scheduleミックスインが登録されること","なし","なし","'schedule' mixinが追加される","高","mixin初期化"
"177","UT-PLG-177","plugin.base.integration.ScheduleMixin","has_scheduled_tasks","正常系","タスクがある場合Trueが返却されること","SCHEDULED_TASKS={'task': {...}}","なし","True","中","タスク有無"
"178","UT-PLG-178","plugin.base.integration.ScheduleMixin","has_scheduled_tasks","正常系","タスクがない場合Falseが返却されること","SCHEDULED_TASKS={}","なし","False","中","タスク有無"
"179","UT-PLG-179","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","正常系","有効なタスク定義の場合例外が発生しないこと","func, scheduleが定義済み","なし","例外なし","高","タスク検証"
"180","UT-PLG-180","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","funcがない場合MixinImplementationErrorが発生すること","funcが未定義","なし","MixinImplementationError","高","タスク検証"
"181","UT-PLG-181","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","scheduleがない場合MixinImplementationErrorが発生すること","scheduleが未定義","なし","MixinImplementationError","高","タスク検証"
"182","UT-PLG-182","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","無効なschedule値の場合MixinImplementationErrorが発生すること","schedule='X'(無効な値)","なし","MixinImplementationError","高","タスク検証"
"183","UT-PLG-183","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","schedule='I'でminutesがない場合MixinImplementationErrorが発生すること","schedule='I', minutesなし","なし","MixinImplementationError","高","タスク検証"
"184","UT-PLG-184","plugin.base.integration.ScheduleMixin","get_task_name","正常系","タスク名が正しく生成されること","slug='test'","key='my_task'","'plugin.test.my_task'","中","タスク名生成"
"185","UT-PLG-185","plugin.base.integration.ScheduleMixin","get_task_names","正常系","全タスク名のリストが返却されること","2つのタスクが定義済み","なし","['plugin.test.task1', 'plugin.test.task2']","中","タスク名一覧"
"186","UT-PLG-186","plugin.base.integration.ScheduleMixin","register_tasks","正常系","タスクがScheduleに登録されること","有効なタスク定義","なし","Schedule.objects.createが呼び出される","高","タスク登録"
"187","UT-PLG-187","plugin.base.integration.ScheduleMixin","register_tasks","正常系","既存タスクが更新されること","同名タスクが既に存在","なし","既存Scheduleが更新される","中","タスク更新"
"188","UT-PLG-188","plugin.base.integration.ScheduleMixin","unregister_tasks","正常系","タスクがScheduleから削除されること","タスクが登録済み","なし","Schedule.deleteが呼び出される","中","タスク削除"
"189","UT-PLG-189","plugin.base.barcodes.BarcodeMixin","__init__","正常系","Barcodeミックスインが登録されること","なし","なし","'barcode' mixinが追加される","高","mixin初期化"
"190","UT-PLG-190","plugin.base.barcodes.BarcodeMixin","has_barcode","正常系","常にTrueが返却されること","なし","なし","True","低","バーコード有無"
"191","UT-PLG-191","plugin.base.barcodes.BarcodeMixin","scan","正常系","デフォルト実装はNoneを返却すること","なし","barcode_data='123456'","None","高","バーコードスキャン"
"192","UT-PLG-192","plugin.base.barcodes.BarcodeMixin","has_barcode_generation","正常系","generate実装がある場合Trueが返却されること","generateメソッドが実装済み","なし","True","中","生成機能有無"
"193","UT-PLG-193","plugin.base.barcodes.BarcodeMixin","has_barcode_generation","正常系","generate未実装の場合Falseが返却されること","generateがNotImplementedErrorを発生","なし","False","中","生成機能有無"
"194","UT-PLG-194","plugin.base.barcodes.BarcodeMixin","generate","異常系","デフォルト実装はNotImplementedErrorを発生すること","なし","model_instance=any_instance","NotImplementedError","高","バーコード生成"
"195","UT-PLG-195","plugin.base.barcodes.SupplierBarcodeMixin","__init__","正常系","SupplierBarcodeミックスインが登録されること","なし","なし","'supplier-barcode' mixinが追加される","高","mixin初期化"
"196","UT-PLG-196","plugin.base.barcodes.SupplierBarcodeMixin","get_field_value","正常系","バーコードフィールド値が取得できること","barcode_fields={'quantity': '10'}","key='quantity'","'10'","中","フィールド取得"
"197","UT-PLG-197","plugin.base.barcodes.SupplierBarcodeMixin","get_field_value","正常系","存在しないキーでbackup_valueが返却されること","barcode_fields={}","key='missing', backup_value='default'","'default'","中","デフォルト値"
"198","UT-PLG-198","plugin.base.barcodes.SupplierBarcodeMixin","quantity","正常系","数量が返却されること","barcode_fields={'quantity': '10'}","なし","'10'","中","数量取得"
"199","UT-PLG-199","plugin.base.barcodes.SupplierBarcodeMixin","supplier_part_number","正常系","サプライヤー部品番号が返却されること","barcode_fields={'supplier_part_number': 'SKU001'}","なし","'SKU001'","中","SKU取得"
"200","UT-PLG-200","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier_part","正常系","SupplierPartが取得できること","SKU='SKU001'のSupplierPartが存在","なし","該当SupplierPartインスタンス","高","部品検索"
"201","UT-PLG-201","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier_part","正常系","SKUもMPNもない場合Noneが返却されること","supplier_part_number=None, manufacturer_part_number=None","なし","None","中","Nullケース"
"202","UT-PLG-202","plugin.base.barcodes.SupplierBarcodeMixin","get_manufacturer_part","正常系","ManufacturerPartが取得できること","MPN='MPN001'のManufacturerPartが存在","なし","該当ManufacturerPartインスタンス","中","部品検索"
"203","UT-PLG-203","plugin.base.barcodes.SupplierBarcodeMixin","get_manufacturer_part","正常系","MPNがない場合Noneが返却されること","manufacturer_part_number=None","なし","None","中","Nullケース"
"204","UT-PLG-204","plugin.base.barcodes.SupplierBarcodeMixin","get_purchase_order","正常系","PurchaseOrderが取得できること","customer_order_number='PO001'のPOが存在","なし","該当PurchaseOrderインスタンス","高","注文検索"
"205","UT-PLG-205","plugin.base.barcodes.SupplierBarcodeMixin","get_purchase_order","正常系","注文番号がない場合Noneが返却されること","customer_order_number=None, supplier_order_number=None","なし","None","中","Nullケース"
"206","UT-PLG-206","plugin.base.barcodes.SupplierBarcodeMixin","extract_barcode_fields","異常系","デフォルト実装はNotImplementedErrorを発生すること","なし","barcode_data='...'","NotImplementedError","高","フィールド抽出"
"207","UT-PLG-207","plugin.base.barcodes.SupplierBarcodeMixin","scan","正常系","マッチした場合結果dictが返却されること","SupplierPartがマッチ","barcode_data='valid_barcode'","{'supplierpart': {...}, 'success': '...'}","高","スキャン処理"
"208","UT-PLG-208","plugin.base.barcodes.SupplierBarcodeMixin","scan","正常系","マッチしない場合Noneが返却されること","何もマッチしない","barcode_data='invalid_barcode'","None","中","スキャン処理"
"209","UT-PLG-209","plugin.base.barcodes.SupplierBarcodeMixin","scan_receive_item","正常系","アイテムが受入処理されること","auto_allocate=True, 必要な情報がすべて揃っている","barcode_data, user, auto_allocate=True","{'lineitem': {...}, 'success': '...'}","高","受入処理"
"210","UT-PLG-210","plugin.base.barcodes.SupplierBarcodeMixin","scan_receive_item","正常系","情報不足時はaction_requiredが返却されること","locationがNone","barcode_data, user, location=None","{'lineitem': {...}, 'action_required': '...'}","中","受入処理"
"211","UT-PLG-211","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","SUPPLIER_ID設定からサプライヤーが取得できること","SUPPLIER_ID=1が設定済み","なし","該当Companyインスタンス","高","サプライヤー取得"
"212","UT-PLG-212","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","設定がない場合DEFAULT_SUPPLIER_NAMEで検索すること","SUPPLIER_ID未設定, DEFAULT_SUPPLIER_NAME='Test'","なし","名前がマッチするCompany","中","サプライヤー検索"
"213","UT-PLG-213","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","cache=Trueで結果がキャッシュされること","2回目の呼び出し","cache=True","キャッシュされた_supplierが返却される","低","キャッシュ"
"214","UT-PLG-214","plugin.base.barcodes.SupplierBarcodeMixin","parse_ecia_barcode2d","正常系","ECIAバーコードがパースされること","有効なECIA 2Dバーコード","barcode_data='[)>...'","フィールドを含むdict","高","ECIAパース"
"215","UT-PLG-215","plugin.base.barcodes.SupplierBarcodeMixin","split_fields","正常系","フィールドが分割されること","delimiter=','","barcode_data='a,b,c'","['a', 'b', 'c']","中","フィールド分割"
"216","UT-PLG-216","plugin.base.barcodes.SupplierBarcodeMixin","split_fields","正常系","header/trailerが除去されること","header='[', trailer=']'","barcode_data='[a,b,c]'","['a', 'b', 'c']","中","ヘッダー/トレーラー除去"
"217","UT-PLG-217","plugin.base.barcodes.SupplierBarcodeMixin","parse_isoiec_15434_barcode2d","正常系","ISO/IEC 15434バーコードがパースされること","有効なISO/IEC 15434バーコード","barcode_data='[)>\x1e06\x1d...'","フィールドのリスト","高","ISOパース"
"218","UT-PLG-218","plugin.base.barcodes.SupplierBarcodeMixin","parse_isoiec_15434_barcode2d","正常系","無効なヘッダーの場合空リストが返却されること","無効なヘッダー","barcode_data='invalid...'","[]","中","無効バーコード"
"219","UT-PLG-219","plugin.serializers.MetadataSerializer","update","正常系","PATCHでメタデータがマージされること","既存metadata={'a': 1}","partial=True, data={'metadata': {'b': 2}}","metadata={'a': 1, 'b': 2}","中","メタデータ更新"
"220","UT-PLG-220","plugin.serializers.MetadataSerializer","update","正常系","PUTでメタデータが上書きされること","既存metadata={'a': 1}","partial=False, data={'metadata': {'b': 2}}","metadata={'b': 2}","中","メタデータ上書き"
"221","UT-PLG-221","plugin.serializers.PluginConfigInstallSerializer","validate","正常系","有効なデータの場合例外が発生しないこと","confirm=True, packagename='test'","data={...}","検証済みdata","高","インストール検証"
"222","UT-PLG-222","plugin.serializers.PluginConfigInstallSerializer","validate","異常系","confirm=Falseの場合ValidationErrorが発生すること","confirm=False","data={'confirm': False}","ValidationError({'confirm': '...'})","高","確認チェック"
"223","UT-PLG-223","plugin.serializers.PluginConfigInstallSerializer","validate","異常系","urlもpackagenameもない場合ValidationErrorが発生すること","両方未指定","data={'confirm': True}","ValidationError({'url': '...', 'packagename': '...'})","高","必須チェック"
"224","UT-PLG-224","plugin.serializers.PluginConfigInstallSerializer","save","正常系","install_pluginが呼び出されること","有効なデータ","なし","install_pluginの戻り値","高","インストール実行"
"225","UT-PLG-225","plugin.serializers.PluginReloadSerializer","save","正常系","registry.reload_pluginsが呼び出されること","なし","なし","reload_pluginsが実行される","高","リロード実行"
"226","UT-PLG-226","plugin.serializers.PluginActivateSerializer","update","正常系","プラグインがアクティブ化されること","instance.active=False","active=True","instance.activate(True)が呼び出される","高","活性化"
"227","UT-PLG-227","plugin.serializers.PluginActivateSerializer","update","異常系","mandatoryプラグインの非活性化でValidationErrorが発生すること","instance.is_mandatory()=True","active=False","ValidationError('INVE-E10: ...')","高","必須チェック"
"228","UT-PLG-228","plugin.serializers.PluginUninstallSerializer","update","正常系","uninstall_pluginが呼び出されること","有効なプラグイン","delete_config=True","uninstall_pluginの戻り値","高","アンインストール"
"229","UT-PLG-229","plugin.serializers.PluginRelationSerializer","to_internal_value","正常系","slugからPluginConfigが取得できること","key='test'のPluginConfigが存在","data='test'","該当PluginConfigインスタンス","中","逆シリアライズ"
"230","UT-PLG-230","plugin.serializers.PluginRelationSerializer","to_representation","正常系","PluginConfigのkeyが返却されること","PluginConfig(key='test')","value=plugin_config","'test'","中","シリアライズ"
"231","UT-PLG-231","plugin.api.PluginFilter.filter_mixin","","正常系","指定mixinを持つプラグインがフィルタされること","複数プラグインが存在","value='barcode'","'barcode' mixinを持つプラグインのQuerySet","高","mixinフィルタ"
"232","UT-PLG-232","plugin.api.PluginFilter.filter_mixin","","正常系","カンマ区切りで複数mixinをフィルタできること","なし","value='barcode,settings'","両方のmixinを持つプラグインのQuerySet","中","複数mixinフィルタ"
"233","UT-PLG-233","plugin.api.PluginFilter.filter_builtin","","正常系","builtinプラグインがフィルタされること","builtin/非builtinプラグインが混在","value=True","builtinプラグインのみのQuerySet","中","builtinフィルタ"
"234","UT-PLG-234","plugin.api.PluginFilter.filter_mandatory","","正常系","mandatoryプラグインがフィルタされること","mandatory/非mandatoryプラグインが混在","value=True","mandatoryプラグインのみのQuerySet","中","mandatoryフィルタ"
"235","UT-PLG-235","plugin.api.PluginFilter.filter_sample","","正常系","sampleプラグインがフィルタされること","sample/非sampleプラグインが混在","value=True","sampleプラグインのみのQuerySet","低","sampleフィルタ"
"236","UT-PLG-236","plugin.api.PluginFilter.filter_installed","","正常系","インストール済みプラグインがフィルタされること","installed/未installedプラグインが混在","value=True","installedプラグインのみのQuerySet","中","installedフィルタ"
"237","UT-PLG-237","plugin.api.PluginDetail.delete","","正常系","非アクティブプラグインが削除できること","cfg.active=False","DELETE /api/plugin/plugins/{slug}/","204 No Content","高","プラグイン削除"
"238","UT-PLG-238","plugin.api.PluginDetail.delete","","異常系","アクティブプラグインの削除でValidationErrorが発生すること","cfg.active=True","DELETE /api/plugin/plugins/{slug}/","ValidationError","高","削除制限"
"239","UT-PLG-239","plugin.api.check_plugin","","正常系","有効なプラグインが返却されること","プラグインがアクティブ","plugin_slug='test'","InvenTreePluginインスタンス","高","プラグイン確認"
"240","UT-PLG-240","plugin.api.check_plugin","","異常系","slugもpkも指定されない場合NotFoundが発生すること","両方None","plugin_slug=None, plugin_pk=None","NotFound('Plugin not specified')","高","入力チェック"
"241","UT-PLG-241","plugin.api.check_plugin","","異常系","プラグインが存在しない場合NotFoundが発生すること","プラグインが未登録","plugin_slug='unknown'","NotFound('...not installed')","高","存在チェック"
"242","UT-PLG-242","plugin.api.check_plugin","","異常系","プラグインが非アクティブの場合NotFoundが発生すること","プラグインが非アクティブ","plugin_slug='inactive'","NotFound('...is not active')","高","アクティブチェック"
"243","UT-PLG-243","plugin.api.RegistryStatusView.get","","正常系","レジストリステータスが返却されること","エラーあり/なし","GET /api/plugin/plugins/status/","{'active_plugins': n, 'registry_errors': [...]}","中","ステータス取得"
