"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-INV-001","InvenTree.models.DiffMixin","get_db_instance","正常系","データベースに保存されたインスタンスが取得できること","pkが存在するインスタンス","self.pk=1","データベースから取得したインスタンスが返却される","中","変更検知用Mixin"
"2","UT-INV-002","InvenTree.models.DiffMixin","get_db_instance","異常系","pkがNoneの場合Noneが返却されること","新規インスタンス（未保存）","self.pk=None","Noneが返却される","中",""
"3","UT-INV-003","InvenTree.models.DiffMixin","get_db_instance","異常系","存在しないpkの場合Noneが返却されること","削除されたインスタンス","self.pk=9999（存在しない）","Noneが返却される","中",""
"4","UT-INV-004","InvenTree.models.DiffMixin","get_field_deltas","正常系","フィールドの変更差分が正しく検出されること","既存インスタンスのフィールドを変更","name='old' -> 'new'","{'name': {'old': 'old', 'new': 'new'}}が返却される","高","データ変更追跡の重要機能"
"5","UT-INV-005","InvenTree.models.DiffMixin","get_field_deltas","境界値","変更がない場合空の辞書が返却されること","フィールド変更なし","変更なし","{}が返却される","中",""
"6","UT-INV-006","InvenTree.models.DiffMixin","has_field_changed","正常系","特定フィールドの変更有無が正しく判定されること","nameフィールドを変更","field_name='name'","Trueが返却される","中",""
"7","UT-INV-007","InvenTree.models.PluginValidationMixin","run_plugin_validation","正常系","プラグインバリデーションが正常に実行されること","ValidationMixinを持つプラグインが登録済み","有効なモデルインスタンス","例外なく完了する","高","プラグイン連携"
"8","UT-INV-008","InvenTree.models.PluginValidationMixin","run_plugin_validation","異常系","プラグインがValidationErrorを発生させた場合に伝播すること","バリデーションエラーを返すプラグイン","無効なモデルインスタンス","ValidationErrorが発生する","高",""
"9","UT-INV-009","InvenTree.models.PluginValidationMixin","full_clean","正常系","full_clean時にプラグインバリデーションが実行されること","プラグインが登録済み","有効なモデルインスタンス","プラグインバリデーションが実行される","高",""
"10","UT-INV-010","InvenTree.models.PluginValidationMixin","save","正常系","save時にプラグインバリデーションが実行されること","プラグインが登録済み","有効なモデルインスタンス","保存前にプラグインバリデーションが実行される","高",""
"11","UT-INV-011","InvenTree.models.PluginValidationMixin","delete","正常系","delete時にプラグインによる削除防止チェックが実行されること","ValidationMixinを持つプラグイン","削除対象インスタンス","validate_model_deletionが呼ばれる","高",""
"12","UT-INV-012","InvenTree.models.MetadataMixin","validate_metadata","正常系","metadataがdict型の場合検証が通ること","metadata={'key': 'value'}","dict型のmetadata","例外なく完了する","中","メタデータ管理"
"13","UT-INV-013","InvenTree.models.MetadataMixin","validate_metadata","異常系","metadataがdict型でない場合ValidationErrorが発生すること","metadata='invalid'","文字列型のmetadata","ValidationErrorが発生する","高",""
"14","UT-INV-014","InvenTree.models.MetadataMixin","validate_metadata","境界値","metadataがNoneの場合空の辞書に初期化されること","metadata=None","None","metadataが{}に設定される","中",""
"15","UT-INV-015","InvenTree.models.MetadataMixin","get_metadata","正常系","指定キーのメタデータが取得できること","metadata={'plugin_a': {'setting': 'value'}}","key='plugin_a'","{'setting': 'value'}が返却される","中",""
"16","UT-INV-016","InvenTree.models.MetadataMixin","get_metadata","境界値","存在しないキーの場合バックアップ値が返却されること","metadata={'plugin_a': {}}","key='plugin_b', backup_value='default'","'default'が返却される","中",""
"17","UT-INV-017","InvenTree.models.MetadataMixin","set_metadata","正常系","メタデータが正しく保存されること","空のmetadata","key='plugin_a', data={'setting': 'value'}","metadata['plugin_a']に値が設定される","中",""
"18","UT-INV-018","InvenTree.models.MetadataMixin","set_metadata","正常系","overwrite=Trueで既存メタデータが上書きされること","既存のmetadata","overwrite=True","metadataが初期化後に新しい値が設定される","中",""
"19","UT-INV-019","InvenTree.models.ReferenceIndexingMixin","get_reference_pattern","正常系","参照パターンが正しく取得できること","REFERENCE_PATTERN_SETTINGが設定済み","なし","設定されたパターン文字列が返却される","中","参照番号管理"
"20","UT-INV-020","InvenTree.models.ReferenceIndexingMixin","get_next_reference","正常系","次の参照番号が正しく計算されること","既存アイテムが存在","なし","インクリメントされた参照番号が返却される","高",""
"21","UT-INV-021","InvenTree.models.ReferenceIndexingMixin","get_next_reference","境界値","アイテムが存在しない場合1が返却されること","アイテムなし","なし","1が返却される","中",""
"22","UT-INV-022","InvenTree.models.ReferenceIndexingMixin","generate_reference","正常系","参照番号が正しく生成されること","パターンとコンテキストが設定済み","なし","パターンに従った参照番号が生成される","高",""
"23","UT-INV-023","InvenTree.models.ReferenceIndexingMixin","validate_reference_pattern","正常系","有効なパターンが検証を通過すること","なし","pattern='PO-{ref:04d}'","例外なく完了する","高",""
"24","UT-INV-024","InvenTree.models.ReferenceIndexingMixin","validate_reference_pattern","異常系","refキーがないパターンでValidationErrorが発生すること","なし","pattern='PO-{other}'","ValidationErrorが発生する","高",""
"25","UT-INV-025","InvenTree.models.ReferenceIndexingMixin","validate_reference_field","正常系","有効な参照値が検証を通過すること","パターン='PO-{ref}'","value='PO-123'","例外なく完了する","高",""
"26","UT-INV-026","InvenTree.models.ReferenceIndexingMixin","validate_reference_field","異常系","空の参照値でValidationErrorが発生すること","なし","value=''","ValidationErrorが発生する","高",""
"27","UT-INV-027","InvenTree.models.ReferenceIndexingMixin","rebuild_reference_field","正常系","参照値から整数部分が正しく抽出されること","なし","reference='PO-123-ABC'","123が返却される","中",""
"28","UT-INV-028","InvenTree.models.ReferenceIndexingMixin","rebuild_reference_field","境界値","BigIntegerFieldの最大値を超える場合ValidationErrorが発生すること","validate=True","reference='99999999999999999999'","ValidationErrorが発生する","高",""
"29","UT-INV-029","InvenTree.models.InvenTreeParameterMixin","parameters","正常系","パラメータ一覧が正しく取得できること","パラメータが関連付けられている","なし","パラメータのQuerySetが返却される","中","パラメータ管理"
"30","UT-INV-030","InvenTree.models.InvenTreeParameterMixin","copy_parameters_from","正常系","他のインスタンスからパラメータがコピーされること","コピー元にパラメータが存在","other=別のインスタンス","パラメータがコピーされる","中",""
"31","UT-INV-031","InvenTree.models.InvenTreeParameterMixin","copy_parameters_from","正常系","clear=Trueで既存パラメータが削除されること","既存パラメータあり","clear=True","既存パラメータが削除後にコピーされる","中",""
"32","UT-INV-032","InvenTree.models.InvenTreeParameterMixin","get_parameter","正常系","名前でパラメータが取得できること","パラメータ'weight'が存在","name='weight'","対応するParameterインスタンスが返却される","中",""
"33","UT-INV-033","InvenTree.models.InvenTreeParameterMixin","get_parameter","境界値","存在しないパラメータ名でNoneが返却されること","パラメータ'weight'が存在しない","name='weight'","Noneが返却される","中",""
"34","UT-INV-034","InvenTree.models.InvenTreeParameterMixin","parameters_map","正常系","パラメータのマップが正しく生成されること","複数パラメータが存在","なし","{'name1': 'value1', 'name2': 'value2'}形式の辞書が返却される","中",""
"35","UT-INV-035","InvenTree.models.InvenTreeAttachmentMixin","attachments","正常系","添付ファイル一覧が取得できること","添付ファイルが関連付けられている","なし","AttachmentのQuerySetが返却される","中","添付ファイル管理"
"36","UT-INV-036","InvenTree.models.InvenTreeAttachmentMixin","create_attachment","正常系","添付ファイルが作成されること","なし","attachment=ファイル, comment='test'","Attachmentインスタンスが作成される","中",""
"37","UT-INV-037","InvenTree.models.InvenTreeAttachmentMixin","delete","正常系","削除時に関連添付ファイルも削除されること","添付ファイルが関連付けられている","なし","インスタンスと添付ファイルが削除される","高",""
"38","UT-INV-038","InvenTree.models.InvenTreeTree","save","正常系","ツリーノードが正しく保存されること","親ノードが存在","parent=親ノード","tree_idとlevelが正しく設定される","高","MPTTツリー管理"
"39","UT-INV-039","InvenTree.models.InvenTreeTree","save","異常系","無効な親への移動でValidationErrorが発生すること","自身を親に設定","parent=self","ValidationErrorが発生する","高",""
"40","UT-INV-040","InvenTree.models.InvenTreeTree","delete","正常系","delete_children=Trueで子ノードも削除されること","子ノードが存在","delete_children=True","子ノードも削除される","高",""
"41","UT-INV-041","InvenTree.models.InvenTreeTree","delete","正常系","delete_children=Falseで子ノードが親に移動すること","子ノードが存在","delete_children=False","子ノードの親が更新される","高",""
"42","UT-INV-042","InvenTree.models.InvenTreeTree","delete","正常系","delete_items=Trueで関連アイテムも削除されること","関連アイテムが存在","delete_items=True","関連アイテムも削除される","高",""
"43","UT-INV-043","InvenTree.models.InvenTreeTree","getNextTreeID","正常系","次のtree_idが正しく計算されること","既存ツリーが存在","なし","最大tree_id + 1が返却される","中",""
"44","UT-INV-044","InvenTree.models.InvenTreeTree","getNextTreeID","境界値","ツリーが存在しない場合1が返却されること","ツリーなし","なし","1が返却される","中",""
"45","UT-INV-045","InvenTree.models.InvenTreeTree","partial_rebuild","正常系","部分的なツリー再構築が成功すること","有効なtree_id","tree_id=1","Trueが返却される","中",""
"46","UT-INV-046","InvenTree.models.InvenTreeTree","partial_rebuild","異常系","再構築失敗時にFalseが返却されエラーログが記録されること","無効なtree_id","tree_id=None","Falseが返却される","中",""
"47","UT-INV-047","InvenTree.models.PathStringMixin","construct_pathstring","正常系","パス文字列が正しく構築されること","親ノードが存在","refresh=True","'Parent/Child'形式の文字列が返却される","中","パス文字列管理"
"48","UT-INV-048","InvenTree.models.PathStringMixin","validate_unique","正常系","ユニーク制約が検証されること","同名の兄弟ノードなし","name='unique'","例外なく完了する","高",""
"49","UT-INV-049","InvenTree.models.PathStringMixin","validate_unique","異常系","同じ親の下に同名ノードが存在する場合ValidationErrorが発生すること","同名の兄弟ノードあり","name='duplicate'","ValidationErrorが発生する","高",""
"50","UT-INV-050","InvenTree.models.PathStringMixin","path","正常系","ルートからのパスリストが正しく取得できること","3階層のノード","なし","[root, parent, self]のリストが返却される","中",""
"51","UT-INV-051","InvenTree.models.InvenTreeNotesMixin","delete","正常系","削除時に関連するNotesImageも削除されること","NotesImageが関連付けられている","なし","インスタンスとNotesImageが削除される","中","ノート管理"
"52","UT-INV-052","InvenTree.models.InvenTreeBarcodeMixin","barcode_model_type","正常系","モデルタイプ名が小文字で返却されること","なし","なし","クラス名の小文字が返却される","中","バーコード管理"
"53","UT-INV-053","InvenTree.models.InvenTreeBarcodeMixin","format_barcode","正常系","バーコード文字列が正しく生成されること","有効なインスタンス","なし","バーコード文字列が返却される","高",""
"54","UT-INV-054","InvenTree.models.InvenTreeBarcodeMixin","lookup_barcode","正常系","バーコードハッシュでインスタンスが検索できること","barcode_hash='abc123'のインスタンスが存在","barcode_hash='abc123'","対応するインスタンスが返却される","高",""
"55","UT-INV-055","InvenTree.models.InvenTreeBarcodeMixin","lookup_barcode","境界値","存在しないバーコードハッシュでNoneが返却されること","該当インスタンスなし","barcode_hash='notexist'","Noneが返却される","中",""
"56","UT-INV-056","InvenTree.models.InvenTreeBarcodeMixin","assign_barcode","正常系","バーコードが正しく割り当てられること","重複なし","barcode_data='123456'","barcode_hashが設定される","高",""
"57","UT-INV-057","InvenTree.models.InvenTreeBarcodeMixin","assign_barcode","異常系","既存バーコードと重複する場合ValidationErrorが発生すること","同じbarcode_hashが存在","barcode_hash='duplicate'","ValidationErrorが発生する","高",""
"58","UT-INV-058","InvenTree.models.InvenTreeBarcodeMixin","unassign_barcode","正常系","バーコードが正しく解除されること","バーコードが割り当て済み","なし","barcode_dataとbarcode_hashが空になる","中",""
"59","UT-INV-059","InvenTree.models.InvenTreeImageMixin","get_image_url","正常系","画像URLが正しく返却されること","画像が設定済み","なし","画像のURLが返却される","中","画像管理"
"60","UT-INV-060","InvenTree.models.InvenTreeImageMixin","get_image_url","境界値","画像が未設定の場合ブランク画像URLが返却されること","画像なし","なし","blank_image.pngのURLが返却される","中",""
"61","UT-INV-061","InvenTree.models.InvenTreeImageMixin","get_thumbnail_url","正常系","サムネイルURLが正しく返却されること","画像が設定済み","なし","サムネイルのURLが返却される","中",""
"62","UT-INV-062","InvenTree.helpers.extract_int","","正常系","文字列から整数が正しく抽出されること","なし","reference='ABC123'","123が返却される","高","ヘルパー関数"
"63","UT-INV-063","InvenTree.helpers.extract_int","","境界値","空文字列の場合0が返却されること","なし","reference=''","0が返却される","中",""
"64","UT-INV-064","InvenTree.helpers.extract_int","","正常系","16進数文字列が正しく変換されること","なし","reference='0xFF', try_hex=True","255が返却される","中",""
"65","UT-INV-065","InvenTree.helpers.extract_int","","境界値","clipパラメータで最大値が制限されること","なし","reference='99999', clip=100","100が返却される","中",""
"66","UT-INV-066","InvenTree.helpers.increment","","正常系","数値文字列が正しくインクリメントされること","なし","value='001'","'002'が返却される","高",""
"67","UT-INV-067","InvenTree.helpers.increment","","正常系","プレフィックス付き文字列がインクリメントされること","なし","value='AB01'","'AB02'が返却される","高",""
"68","UT-INV-068","InvenTree.helpers.increment","","境界値","空文字列の場合'1'が返却されること","なし","value=''","'1'が返却される","中",""
"69","UT-INV-069","InvenTree.helpers.increment","","境界値","数値なし文字列の場合そのまま返却されること","なし","value='QQQ'","'QQQ'が返却される","中",""
"70","UT-INV-070","InvenTree.helpers.str2bool","","正常系","真を表す文字列がTrueと判定されること","なし","text='yes', test=True","Trueが返却される","中",""
"71","UT-INV-071","InvenTree.helpers.str2bool","","正常系","偽を表す文字列がTrueと判定されること（test=False）","なし","text='no', test=False","Trueが返却される","中",""
"72","UT-INV-072","InvenTree.helpers.normalize","","正常系","Decimal値が正規化されること","なし","d=Decimal('1.000')","Decimal('1')が返却される","中",""
"73","UT-INV-073","InvenTree.helpers.normalize","","正常系","roundingパラメータで桁数が制限されること","なし","d=Decimal('1.23456'), rounding=2","Decimal('1.23')が返却される","中",""
"74","UT-INV-074","InvenTree.helpers.clean_decimal","","正常系","カンマ区切り数値が正しく変換されること","なし","number='1,234.56'","Decimal('1234.56')が返却される","中",""
"75","UT-INV-075","InvenTree.helpers.clean_decimal","","正常系","ヨーロッパ形式の数値が正しく変換されること","なし","number='1.234,56'","Decimal('1234.56')が返却される","中",""
"76","UT-INV-076","InvenTree.helpers.clean_decimal","","異常系","無効な文字列の場合Decimal(0)が返却されること","なし","number='invalid'","Decimal('0')が返却される","中",""
"77","UT-INV-077","InvenTree.helpers.hash_barcode","","正常系","バーコードデータのハッシュが生成されること","なし","barcode_data='12345'","MD5ハッシュ文字列が返却される","高",""
"78","UT-INV-078","InvenTree.helpers.strip_html_tags","","正常系","HTMLタグが除去されること","なし","value='<b>test</b>'","'test'が返却される","高","セキュリティ関連"
"79","UT-INV-079","InvenTree.helpers.strip_html_tags","","異常系","HTMLタグ検出時にValidationErrorが発生すること","raise_error=True","value='<script>alert()</script>'","ValidationErrorが発生する","高",""
"80","UT-INV-080","InvenTree.helpers.validateFilterString","","正常系","有効なフィルター文字列が解析されること","なし","value='category=6, IPN=12'","{'category': '6', 'IPN': '12'}が返却される","高","フィルター処理"
"81","UT-INV-081","InvenTree.helpers.validateFilterString","","異常系","不正なフィルター文字列でValidationErrorが発生すること","なし","value='invalid'","ValidationErrorが発生する","高",""
"82","UT-INV-082","InvenTree.helpers.extract_serial_numbers","","正常系","シリアル番号リストが正しく抽出されること","なし","input_string='1,2,3', expected_quantity=3","['1','2','3']が返却される","高","シリアル番号管理"
"83","UT-INV-083","InvenTree.helpers.extract_serial_numbers","","正常系","範囲指定が正しく展開されること","なし","input_string='1-5', expected_quantity=5","['1','2','3','4','5']が返却される","高",""
"84","UT-INV-084","InvenTree.helpers.extract_serial_numbers","","正常系","プラス記号による連続生成が正しく動作すること","なし","input_string='1+', expected_quantity=3","['1','2','3']が返却される","高",""
"85","UT-INV-085","InvenTree.helpers.extract_serial_numbers","","異常系","重複シリアル番号でValidationErrorが発生すること","なし","input_string='1,1,2', expected_quantity=3","ValidationErrorが発生する","高",""
"86","UT-INV-086","InvenTree.helpers.extract_serial_numbers","","異常系","数量不一致でValidationErrorが発生すること","なし","input_string='1,2', expected_quantity=3","ValidationErrorが発生する","高",""
"87","UT-INV-087","InvenTree.helpers.extract_serial_numbers","","境界値","1000件を超える場合ValidationErrorが発生すること","なし","expected_quantity=1001","ValidationErrorが発生する","高",""
"88","UT-INV-088","InvenTree.helpers_model.get_base_url","","正常系","リクエストからベースURLが取得できること","リクエストオブジェクトあり","request=HttpRequest","リクエストのベースURLが返却される","中","URL構築"
"89","UT-INV-089","InvenTree.helpers_model.get_base_url","","正常系","設定からベースURLが取得できること","SITE_URL設定あり","request=None","設定のベースURLが返却される","中",""
"90","UT-INV-090","InvenTree.helpers_model.construct_absolute_url","","正常系","絶対URLが正しく構築されること","ベースURLあり","relative_url='/api/part/'","完全なURLが返却される","中",""
"91","UT-INV-091","InvenTree.helpers_model.download_image_from_url","","正常系","リモートURLから画像がダウンロードされること","有効な画像URL","remote_url='https://example.com/image.png'","PILイメージが返却される","中","画像ダウンロード"
"92","UT-INV-092","InvenTree.helpers_model.download_image_from_url","","異常系","無効なURLでValidationErrorが発生すること","無効なURL","remote_url='invalid'","例外が発生する","高",""
"93","UT-INV-093","InvenTree.helpers_model.download_image_from_url","","異常系","サイズ超過でValueErrorが発生すること","大きすぎる画像","remote_url（大きな画像）","ValueErrorが発生する","高",""
"94","UT-INV-094","InvenTree.helpers_model.render_currency","","正常系","Money値が正しくフォーマットされること","なし","money=Money(100, 'USD')","フォーマットされた文字列が返却される","高","通貨処理"
"95","UT-INV-095","InvenTree.helpers_model.render_currency","","異常系","無効な値でValidationErrorが発生すること","なし","money='invalid'","ValidationErrorが発生する","高",""
"96","UT-INV-096","InvenTree.helpers_mixin.ClassValidationMixin","validate","正常系","必須属性がある場合検証が通過すること","required_attributesを定義","属性が定義済み","例外なく完了する","中","クラスバリデーション"
"97","UT-INV-097","InvenTree.helpers_mixin.ClassValidationMixin","validate","異常系","必須属性がない場合NotImplementedErrorが発生すること","required_attributes=['NAME']","NAMEが未定義","NotImplementedErrorが発生する","高",""
"98","UT-INV-098","InvenTree.tasks.schedule_task","","正常系","スケジュールタスクが正しく登録されること","Django-Qが利用可能","taskname='my_task'","Scheduleオブジェクトが作成される","中","タスクスケジューリング"
"99","UT-INV-099","InvenTree.tasks.schedule_task","","正常系","既存タスクが更新されること","同名タスクが存在","taskname='existing_task'","既存のScheduleが更新される","中",""
"100","UT-INV-100","InvenTree.tasks.offload_task","","正常系","ワーカー実行中の場合非同期タスクが作成されること","ワーカーが実行中","taskname='my_task'","AsyncTaskが作成される","高","タスク実行"
"101","UT-INV-101","InvenTree.tasks.offload_task","","正常系","ワーカー停止中の場合同期実行されること","ワーカーが停止中","taskname='my_task'","同期的に関数が実行される","高",""
"102","UT-INV-102","InvenTree.tasks.offload_task","","異常系","関数パスが不正な場合Falseが返却されること","なし","taskname='invalid.path'","Falseが返却される","中",""
"103","UT-INV-103","InvenTree.tasks.check_daily_holdoff","","正常系","前回成功から十分な時間が経過した場合Trueが返却されること","前回成功が2日前","task_name='test', n_days=1","Trueが返却される","中","定期タスク制御"
"104","UT-INV-104","InvenTree.tasks.check_daily_holdoff","","正常系","前回成功が最近の場合Falseが返却されること","前回成功が今日","task_name='test', n_days=1","Falseが返却される","中",""
"105","UT-INV-105","InvenTree.tasks.check_daily_holdoff","","境界値","n_days<=0の場合Falseが返却されること","なし","task_name='test', n_days=0","Falseが返却される","中",""
"106","UT-INV-106","InvenTree.tasks.heartbeat","","正常系","ハートビートタスクが正常に実行されること","Django-Qが利用可能","なし","古いハートビート結果が削除される","中","定期タスク"
"107","UT-INV-107","InvenTree.tasks.delete_successful_tasks","","正常系","古い成功タスクが削除されること","閾値より古いタスクが存在","なし","古いSuccessレコードが削除される","中",""
"108","UT-INV-108","InvenTree.tasks.delete_failed_tasks","","正常系","古い失敗タスクが削除されること","閾値より古いタスクが存在","なし","古いFailureレコードが削除される","中",""
"109","UT-INV-109","InvenTree.tasks.check_for_migrations","","正常系","マイグレーションがない場合Trueが返却されること","マイグレーション適用済み","なし","Trueが返却される","高","マイグレーション"
"110","UT-INV-110","InvenTree.tasks.check_for_migrations","","正常系","マイグレーションがある場合自動更新が実行されること","未適用マイグレーションあり, auto_update=True","なし","migrateコマンドが実行される","高",""
"111","UT-INV-111","InvenTree.serializers.InvenTreeModelSerializer","run_validation","正常系","モデルバリデーションが実行されること","有効なデータ","data={'name': 'test'}","検証済みデータが返却される","高","シリアライザ"
"112","UT-INV-112","InvenTree.serializers.InvenTreeModelSerializer","run_validation","異常系","無効なデータでValidationErrorが発生すること","無効なデータ","data={'name': ''}","ValidationErrorが発生する","高",""
"113","UT-INV-113","InvenTree.serializers.InvenTreeModelSerializer","skip_create_fields","正常系","スキップフィールドがcreate時に除外されること","skip_create_fields=['temp']","data={'temp': 'value'}","tempフィールドが除外される","中",""
"114","UT-INV-114","InvenTree.serializers.InvenTreeMoneySerializer","get_value","正常系","Money値が正しく取得されること","なし","data={'price': '100'}","Money(100, currency)が返却される","高","金額処理"
"115","UT-INV-115","InvenTree.serializers.InvenTreeMoneySerializer","get_value","異常系","無効な数値でValidationErrorが発生すること","なし","data={'price': 'invalid'}","ValidationErrorが発生する","高",""
"116","UT-INV-116","InvenTree.serializers.InvenTreeDecimalField","to_internal_value","正常系","Decimal値に正しく変換されること","なし","data='123.45'","Decimal('123.45')が返却される","中","数値処理"
"117","UT-INV-117","InvenTree.serializers.InvenTreeDecimalField","to_internal_value","異常系","無効な値でValidationErrorが発生すること","なし","data='invalid'","ValidationErrorが発生する","中",""
"118","UT-INV-118","InvenTree.serializers.ContentTypeField","to_internal_value","正常系","文字列からContentTypeが解決されること","なし","data='part.part'","Part ContentTypeが返却される","中","ContentType処理"
"119","UT-INV-119","InvenTree.serializers.ContentTypeField","to_internal_value","異常系","無効なContentTypeでValidationErrorが発生すること","なし","data='invalid.model'","ValidationErrorが発生する","中",""
"120","UT-INV-120","InvenTree.validators.validate_physical_units","","正常系","有効な物理単位が検証を通過すること","なし","unit='kg'","例外なく完了する","高","バリデータ"
"121","UT-INV-121","InvenTree.validators.validate_physical_units","","異常系","無効な物理単位でValidationErrorが発生すること","なし","unit='invalid_unit'","ValidationErrorが発生する","高",""
"122","UT-INV-122","InvenTree.validators.validate_currency_code","","正常系","有効な通貨コードが検証を通過すること","なし","code='USD'","例外なく完了する","高",""
"123","UT-INV-123","InvenTree.validators.validate_currency_code","","異常系","無効な通貨コードでValidationErrorが発生すること","なし","code='INVALID'","ValidationErrorが発生する","高",""
"124","UT-INV-124","InvenTree.validators.AllowedURLValidator","__call__","正常系","有効なURLが検証を通過すること","なし","value='https://example.com'","例外なく完了する","高",""
"125","UT-INV-125","InvenTree.validators.AllowedURLValidator","__call__","正常系","スキーマなしURLがstrict_urls=Falseで通過すること","INVENTREE_STRICT_URLS=False","value='example.com'","例外なく完了する","中",""
"126","UT-INV-126","InvenTree.fields.InvenTreeModelMoneyField","to_python","正常系","値がPython型に正しく変換されること","なし","value='100.123456'","丸められたDecimalが返却される","中","フィールド"
"127","UT-INV-127","InvenTree.fields.RoundingDecimalField","to_python","正常系","小数点以下が正しく丸められること","decimal_places=2","value='1.2345'","1.23が返却される","中",""
"128","UT-INV-128","InvenTree.fields.round_decimal","","正常系","指定桁数で丸められること","なし","value=1.23456, places=2","1.23が返却される","中",""
"129","UT-INV-129","InvenTree.fields.round_decimal","","異常系","無効な値でValidationErrorが発生すること","なし","value='invalid'","ValidationErrorが発生する","中",""
"130","UT-INV-130","InvenTree.permissions.RolePermission","has_permission","正常系","スーパーユーザーは常にTrueが返却されること","user.is_superuser=True","request.method='DELETE'","Trueが返却される","高","パーミッション"
"131","UT-INV-131","InvenTree.permissions.RolePermission","has_permission","正常系","適切なロールを持つユーザーにTrueが返却されること","ユーザーがpart.viewロールを持つ","request.method='GET'","Trueが返却される","高",""
"132","UT-INV-132","InvenTree.permissions.RolePermission","has_permission","異常系","ロールがないユーザーにFalseが返却されること","ユーザーがロールを持たない","request.method='DELETE'","Falseが返却される","高",""
"133","UT-INV-133","InvenTree.conversion.get_unit_registry","","正常系","単位レジストリが取得できること","なし","なし","UnitRegistryインスタンスが返却される","中","単位変換"
"134","UT-INV-134","InvenTree.conversion.convert_physical_value","","正常系","物理値が正しく変換されること","なし","value='1kg', unit='g'","1000.0が返却される","高",""
"135","UT-INV-135","InvenTree.conversion.convert_physical_value","","異常系","互換性のない単位でValidationErrorが発生すること","なし","value='1kg', unit='m'","ValidationErrorが発生する","高",""
"136","UT-INV-136","InvenTree.conversion.from_engineering_notation","","正常系","エンジニアリング記法が正しく変換されること","なし","value='1K2'","'1.2K'が返却される","中",""
"137","UT-INV-137","InvenTree.format.parse_format_string","","正常系","フォーマット文字列が正しく解析されること","なし","fmt_string='PO-{ref:04d}'","{'ref': {...}}が返却される","中","フォーマット処理"
"138","UT-INV-138","InvenTree.format.parse_format_string","","異常系","重複グループでValueErrorが発生すること","なし","fmt_string='{ref}{ref}'","ValueErrorが発生する","中",""
"139","UT-INV-139","InvenTree.format.validate_string","","正常系","値がフォーマットに一致する場合Trueが返却されること","なし","value='PO-123', fmt_string='PO-{ref}'","Trueが返却される","高",""
"140","UT-INV-140","InvenTree.format.validate_string","","正常系","値がフォーマットに一致しない場合Falseが返却されること","なし","value='SO-123', fmt_string='PO-{ref}'","Falseが返却される","中",""
"141","UT-INV-141","InvenTree.format.extract_named_group","","正常系","名前付きグループが正しく抽出されること","なし","name='ref', value='PO-123', fmt_string='PO-{ref}'","'123'が返却される","高",""
"142","UT-INV-142","InvenTree.format.extract_named_group","","異常系","存在しないグループ名でNameErrorが発生すること","なし","name='other', value='PO-123', fmt_string='PO-{ref}'","NameErrorが発生する","中",""
"143","UT-INV-143","InvenTree.backends.InvenTreeMaintenanceModeBackend","get_value","正常系","メンテナンスモード状態が取得できること","タイムスタンプが未来","なし","Trueが返却される","中","メンテナンスモード"
"144","UT-INV-144","InvenTree.backends.InvenTreeMaintenanceModeBackend","get_value","正常系","タイムスタンプが過去の場合Falseが返却されること","タイムスタンプが過去","なし","Falseが返却される","中",""
"145","UT-INV-145","InvenTree.backends.InvenTreeMaintenanceModeBackend","set_value","正常系","メンテナンスモードが有効化されること","なし","value=True","タイムスタンプが保存される","高",""
"146","UT-INV-146","InvenTree.backends.InvenTreeMaintenanceModeBackend","set_value","正常系","メンテナンスモードが無効化されること","メンテナンスモード有効","value=False","タイムスタンプが空になる","高",""
"147","UT-INV-147","InvenTree.models.notify_staff_users_of_error","","正常系","スタッフユーザーにエラー通知が送信されること","is_staff=Trueのユーザーが存在","instance, label, context","通知がトリガーされる","中","通知処理"
"148","UT-INV-148","InvenTree.models.after_failed_task","","正常系","最大試行回数到達時に通知が送信されること","max_attempts=5, attempt_count=5","Task instance","スタッフユーザーに通知される","中",""
"149","UT-INV-149","InvenTree.models.after_error_logged","","正常系","エラーログ作成時に通知が送信されること","created=True","Error instance","スタッフユーザーに通知される","中",""
"150","UT-INV-150","InvenTree.helpers.constructPathString","","正常系","パスリストが文字列に変換されること","なし","path=['A','B','C']","'A/B/C'が返却される","中","パス処理"
"151","UT-INV-151","InvenTree.helpers.constructPathString","","境界値","長すぎるパスが省略されること","なし","path=[...], max_chars=10","省略された文字列が返却される","中",""
"152","UT-INV-152","InvenTree.helpers.generateTestKey","","正常系","テストキーが正しく生成されること","なし","test_name='My Test'","'mytest'が返却される","中","テストキー生成"
"153","UT-INV-153","InvenTree.helpers.generateTestKey","","境界値","Noneの場合空文字列が返却されること","なし","test_name=None","''が返却される","中",""
"154","UT-INV-154","InvenTree.helpers.getMediaUrl","","正常系","メディアURLが正しく構築されること","ファイルフィールドあり","file=FieldFile","メディアURLが返却される","中","URL生成"
"155","UT-INV-155","InvenTree.helpers.getMediaUrl","","異常系","無効なファイル型でTypeErrorが発生すること","なし","file='string'","TypeErrorが発生する","中",""
"156","UT-INV-156","InvenTree.helpers.TestIfImage","","正常系","有効な画像でTrueが返却されること","有効な画像ファイル","img=valid_image","Trueが返却される","中","画像検証"
"157","UT-INV-157","InvenTree.helpers.TestIfImage","","正常系","無効なファイルでFalseが返却されること","テキストファイル","img=text_file","Falseが返却される","中",""
"158","UT-INV-158","InvenTree.helpers.decimal2string","","正常系","Decimalが文字列に正しく変換されること","なし","d=Decimal('1.000')","'1'が返却される","中","数値変換"
"159","UT-INV-159","InvenTree.helpers.decimal2money","","正常系","DecimalがMoneyに正しく変換されること","なし","d=Decimal('100'), currency='USD'","Money(100, 'USD')が返却される","中",""
"160","UT-INV-160","InvenTree.helpers.current_time","","正常系","現在時刻が返却されること","USE_TZ=True","local=True","ローカルタイムゾーンの現在時刻","中","日時処理"
"161","UT-INV-161","InvenTree.helpers.to_local_time","","正常系","時刻がローカルタイムゾーンに変換されること","なし","time=datetime, target_tz_str='UTC'","UTC時刻が返却される","中",""
"162","UT-INV-162","InvenTree.helpers.to_local_time","","異常系","無効な型でTypeErrorが発生すること","なし","time='string'","TypeErrorが発生する","中",""
"163","UT-INV-163","InvenTree.helpers.clean_markdown","","正常系","安全なMarkdownが検証を通過すること","なし","value='**bold**'","同じ値が返却される","高","セキュリティ"
"164","UT-INV-164","InvenTree.helpers.clean_markdown","","異常系","危険なコンテンツでValidationErrorが発生すること","なし","value='<script>...'","ValidationErrorが発生する","高",""
"165","UT-INV-165","InvenTree.serializers.FilterableSerializerMixin","gather_filters","正常系","フィルター対象フィールドが収集されること","フィルター可能フィールドあり","kwargs","filter_targetsが設定される","中","シリアライザフィルタ"
"166","UT-INV-166","InvenTree.serializers.FilterableSerializerMixin","do_filtering","正常系","指定フィールドがフィルタリングされること","フィルター値指定","filter_target_values","対象フィールドが除外される","中",""
"167","UT-INV-167","InvenTree.serializers.RemoteImageMixin","validate_remote_image","正常系","リモート画像URLが検証されること","INVENTREE_DOWNLOAD_FROM_URL=True","url='https://example.com/image.png'","画像がダウンロードされる","中","リモート画像"
"168","UT-INV-168","InvenTree.serializers.RemoteImageMixin","validate_remote_image","異常系","ダウンロード無効時にValidationErrorが発生すること","INVENTREE_DOWNLOAD_FROM_URL=False","url='https://...'","ValidationErrorが発生する","高",""
