"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-BLD-001","build.models.Build","save","正常系","BuildOrder保存時にreference_intが設定されること","有効なpartが存在","reference=""BO-0001""","reference_intが正しく設定される","高","参照番号の整数変換"
"2","UT-BLD-002","build.models.Build","save","正常系","新規作成時にdestinationがpartのデフォルトロケーションに設定されること","partにデフォルトロケーションが設定済み","destination=None","destination=part.get_default_location()","中","デフォルトロケーション自動設定"
"3","UT-BLD-003","build.models.Build","save","異常系","無効なBOMを持つpartでビルド作成が拒否されること","BUILDORDER_REQUIRE_VALID_BOM=True, part.is_bom_valid()=False","有効なpart","ValidationError(part: Assembly BOM has not been validated)","高","BOM検証"
"4","UT-BLD-004","build.models.Build","save","異常系","非アクティブなpartでビルド作成が拒否されること","BUILDORDER_REQUIRE_ACTIVE_PART=True, part.active=False","非アクティブなpart","ValidationError(part: Build order cannot be created for an inactive part)","高","アクティブpart検証"
"5","UT-BLD-005","build.models.Build","save","異常系","ロックされていないpartでビルド作成が拒否されること","BUILDORDER_REQUIRE_LOCKED_PART=True, part.locked=False","未ロックのpart","ValidationError(part: Build order cannot be created for an unlocked part)","中","ロック検証"
"6","UT-BLD-006","build.models.Build","clean","正常系","バリデーションが正常に完了すること","有効なBuild","適切な値","ValidationErrorなし","中","基本バリデーション"
"7","UT-BLD-007","build.models.Build","clean","異常系","external=Trueで購入不可partの場合エラーになること","external=True, part.purchaseable=False","purchaseable=Falseのpart","ValidationError(external: Build orders can only be externally fulfilled for purchaseable parts)","中","外部調達検証"
"8","UT-BLD-008","build.models.Build","clean","異常系","responsible未設定時にエラーになること","BUILDORDER_REQUIRE_RESPONSIBLE=True","responsible=None","ValidationError(responsible: Responsible user or group must be specified)","中","責任者必須検証"
"9","UT-BLD-009","build.models.Build","clean","異常系","part変更時にエラーになること","既存のBuild","partを変更","ValidationError(part: Build order part cannot be changed)","高","part変更禁止"
"10","UT-BLD-010","build.models.Build","clean","異常系","target_dateがstart_date以前の場合エラーになること","start_date設定済み","target_date < start_date","ValidationError(target_date: Target date must be after start date)","中","日付整合性検証"
"11","UT-BLD-011","build.models.Build","__str__","正常系","referenceが文字列として返されること","reference=""BO-0001""","なし","BO-0001","低","文字列表現"
"12","UT-BLD-012","build.models.Build","get_absolute_url","正常系","正しいURLが返されること","id=123","なし","/manufacturing/build-order/123が含まれるURL","低","URL生成"
"13","UT-BLD-013","build.models.Build","status_text","正常系","ステータスのテキスト表現が返されること","status=BuildStatus.PENDING.value","なし","Pending","低","ステータステキスト"
"14","UT-BLD-014","build.models.Build","sub_builds","正常系","cascade=Trueで全子孫ビルドが返されること","親ビルドに子ビルド・孫ビルドが存在","cascade=True","全子孫ビルドのQuerySet","中","子ビルド取得（カスケード）"
"15","UT-BLD-015","build.models.Build","sub_builds","正常系","cascade=Falseで直接の子ビルドのみ返されること","親ビルドに子ビルド・孫ビルドが存在","cascade=False","直接の子ビルドのみ","中","子ビルド取得（直接のみ）"
"16","UT-BLD-016","build.models.Build","sub_build_count","正常系","子ビルド数が正しく返されること","子ビルド3件存在","cascade=True","3","中","子ビルドカウント"
"17","UT-BLD-017","build.models.Build","has_open_child_builds","正常系","アクティブな子ビルドが存在する場合Trueが返されること","子ビルドがACTIVE状態","なし","True","中","オープン子ビルド判定"
"18","UT-BLD-018","build.models.Build","has_open_child_builds","正常系","アクティブな子ビルドが存在しない場合Falseが返されること","子ビルドがすべてCOMPLETE","なし","False","中","オープン子ビルド判定（なし）"
"19","UT-BLD-019","build.models.Build","is_overdue","正常系","期限超過の場合Trueが返されること","target_date=過去日, status=PENDING","なし","True","高","期限超過判定"
"20","UT-BLD-020","build.models.Build","is_overdue","正常系","期限内の場合Falseが返されること","target_date=未来日, status=PENDING","なし","False","高","期限超過判定（期限内）"
"21","UT-BLD-021","build.models.Build","active","正常系","ACTIVE_CODESステータスの場合Trueが返されること","status=BuildStatus.PENDING.value","なし","True","中","アクティブ判定"
"22","UT-BLD-022","build.models.Build","active","正常系","COMPLETE/CANCELLEDステータスの場合Falseが返されること","status=BuildStatus.COMPLETE.value","なし","False","中","アクティブ判定（非アクティブ）"
"23","UT-BLD-023","build.models.Build","tracked_line_items","正常系","トラッカブルなBOMラインが返されること","trackable=TrueのBomItemが存在","なし","trackable=TrueのBuildLineのQuerySet","中","トラッカブルライン取得"
"24","UT-BLD-024","build.models.Build","has_tracked_line_items","正常系","トラッカブルなBOMラインが存在する場合Trueが返されること","trackable=TrueのBomItemが存在","なし","True","中","トラッカブルライン存在判定"
"25","UT-BLD-025","build.models.Build","untracked_line_items","正常系","非トラッカブルなBOMラインが返されること","trackable=FalseのBomItemが存在","なし","trackable=FalseのBuildLineのQuerySet","中","非トラッカブルライン取得"
"26","UT-BLD-026","build.models.Build","are_untracked_parts_allocated","正常系","非トラッカブルパーツが全て割当済みの場合Trueが返されること","全ての非トラッカブルパーツが割当済み","なし","True","高","非トラッカブル割当完了判定"
"27","UT-BLD-027","build.models.Build","remaining","正常系","残り数量が正しく計算されること","quantity=10, completed=3","なし","7","高","残数量計算"
"28","UT-BLD-028","build.models.Build","remaining","境界値","completed > quantityの場合0が返されること","quantity=10, completed=15","なし","0","中","残数量計算（超過）"
"29","UT-BLD-029","build.models.Build","output_count","正常系","ビルド出力数が正しく返されること","build_outputsが3件存在","なし","3","中","出力カウント"
"30","UT-BLD-030","build.models.Build","has_build_outputs","正常系","ビルド出力が存在する場合Trueが返されること","build_outputsが1件以上存在","なし","True","中","出力存在判定"
"31","UT-BLD-031","build.models.Build","has_build_outputs","正常系","ビルド出力が存在しない場合Falseが返されること","build_outputsが0件","なし","False","中","出力存在判定（なし）"
"32","UT-BLD-032","build.models.Build","get_build_outputs","正常系","全ビルド出力が返されること","複数のビルド出力が存在","キーワード引数なし","全ビルド出力のQuerySet","中","出力取得"
"33","UT-BLD-033","build.models.Build","get_build_outputs","正常系","in_stock=Trueで在庫中の出力のみ返されること","在庫中と在庫外の出力が存在","in_stock=True","在庫中の出力のみ","中","出力取得（在庫フィルタ）"
"34","UT-BLD-034","build.models.Build","get_build_outputs","正常系","complete=Trueで完了した出力のみ返されること","完了と未完了の出力が存在","complete=True","完了した出力のみ（is_building=False）","中","出力取得（完了フィルタ）"
"35","UT-BLD-035","build.models.Build","complete_outputs","正常系","完了した出力が返されること","is_building=Falseの出力が存在","なし","完了した出力のQuerySet","中","完了出力取得"
"36","UT-BLD-036","build.models.Build","complete_count","正常系","完了した出力の合計数量が返されること","完了出力が複数存在（quantity合計=15）","なし","15","高","完了数量計算"
"37","UT-BLD-037","build.models.Build","is_partially_allocated","正常系","一部でも割当がある場合Trueが返されること","allocated_stockが1件以上存在","なし","True","中","部分割当判定"
"38","UT-BLD-038","build.models.Build","incomplete_outputs","正常系","未完了の出力が返されること","is_building=Trueの出力が存在","なし","未完了の出力のQuerySet","中","未完了出力取得"
"39","UT-BLD-039","build.models.Build","incomplete_count","正常系","未完了の出力の合計数量が返されること","未完了出力が複数存在（quantity合計=8）","なし","8","高","未完了数量計算"
"40","UT-BLD-040","build.models.Build","getNextBuildNumber","正常系","次のビルド番号が予測されること","既存ビルドが存在","なし","インクリメントされた参照番号","中","次番号予測"
"41","UT-BLD-041","build.models.Build","getNextBuildNumber","境界値","ビルドが0件の場合Noneが返されること","ビルドが0件","なし","None","低","次番号予測（空）"
"42","UT-BLD-042","build.models.Build","can_complete","正常系","完了可能な状態でTrueが返されること","status=PRODUCTION, incomplete_count=0, remaining=0, fully_allocated=True","なし","True","高","完了可能判定"
"43","UT-BLD-043","build.models.Build","can_complete","正常系","status!=PRODUCTIONの場合Falseが返されること","status=PENDING","なし","False","高","完了可能判定（ステータス不正）"
"44","UT-BLD-044","build.models.Build","can_complete","正常系","未完了出力がある場合Falseが返されること","incomplete_count > 0","なし","False","高","完了可能判定（未完了出力あり）"
"45","UT-BLD-045","build.models.Build","can_complete","正常系","残り数量がある場合Falseが返されること","remaining > 0","なし","False","高","完了可能判定（残りあり）"
"46","UT-BLD-046","build.models.Build","can_complete","正常系","オープン子ビルドがある場合Falseが返されること","BUILDORDER_REQUIRE_CLOSED_CHILDS=True, has_open_child_builds=True","なし","False","中","完了可能判定（子ビルド未完了）"
"47","UT-BLD-047","build.models.Build","complete_build","正常系","ビルドが正常に完了すること","完了可能な状態","user, trim_allocated_stock=False","status=COMPLETE, completion_date設定, completed_by設定","高","ビルド完了"
"48","UT-BLD-048","build.models.Build","complete_build","異常系","オープン子ビルドがある場合エラーになること","BUILDORDER_REQUIRE_CLOSED_CHILDS=True, オープン子ビルドあり","user","ValidationError","高","完了エラー（子ビルド）"
"49","UT-BLD-049","build.models.Build","complete_build","異常系","未完了出力がある場合エラーになること","incomplete_count > 0","user","ValidationError","高","完了エラー（未完了出力）"
"50","UT-BLD-050","build.models.Build","issue_build","正常系","ビルドがPRODUCTION状態に遷移すること","status=PENDING","なし","status=BuildStatus.PRODUCTION.value","高","ビルド発行"
"51","UT-BLD-051","build.models.Build","can_issue","正常系","PENDING状態でTrueが返されること","status=PENDING","なし","True","中","発行可能判定"
"52","UT-BLD-052","build.models.Build","can_issue","正常系","ON_HOLD状態でTrueが返されること","status=ON_HOLD","なし","True","中","発行可能判定（保留）"
"53","UT-BLD-053","build.models.Build","can_issue","正常系","PRODUCTION状態でFalseが返されること","status=PRODUCTION","なし","False","中","発行可能判定（既に発行済み）"
"54","UT-BLD-054","build.models.Build","hold_build","正常系","ビルドがON_HOLD状態に遷移すること","status=PRODUCTION","なし","status=BuildStatus.ON_HOLD.value","中","ビルド保留"
"55","UT-BLD-055","build.models.Build","can_hold","正常系","PENDING状態でTrueが返されること","status=PENDING","なし","True","中","保留可能判定"
"56","UT-BLD-056","build.models.Build","can_hold","正常系","PRODUCTION状態でTrueが返されること","status=PRODUCTION","なし","True","中","保留可能判定（製造中）"
"57","UT-BLD-057","build.models.Build","can_hold","正常系","COMPLETE状態でFalseが返されること","status=COMPLETE","なし","False","中","保留可能判定（完了済み）"
"58","UT-BLD-058","build.models.Build","cancel_build","正常系","ビルドがCANCELLED状態に遷移すること","status=PRODUCTION","user","status=BuildStatus.CANCELLED.value, completion_date設定","高","ビルドキャンセル"
"59","UT-BLD-059","build.models.Build","cancel_build","正常系","remove_allocated_stock=Trueで割当在庫が消費されること","割当在庫が存在","user, remove_allocated_stock=True","割当在庫が消費される","中","キャンセル（在庫消費）"
"60","UT-BLD-060","build.models.Build","cancel_build","正常系","remove_incomplete_outputs=Trueで未完了出力が削除されること","未完了出力が存在","user, remove_incomplete_outputs=True","未完了出力が削除される","中","キャンセル（出力削除）"
"61","UT-BLD-061","build.models.Build","deallocate_stock","正常系","指定した出力の割当が解除されること","outputに対する割当が存在","output=特定のStockItem","該当する割当が削除される","中","割当解除"
"62","UT-BLD-062","build.models.Build","deallocate_stock","正常系","指定したbuild_lineの割当が解除されること","build_lineに対する割当が存在","build_line=特定のBuildLine","該当する割当が削除される","中","割当解除（ライン指定）"
"63","UT-BLD-063","build.models.Build","create_build_output","正常系","ビルド出力が作成されること","有効なBuild","quantity=5","StockItemが作成される（is_building=True）","高","出力作成"
"64","UT-BLD-064","build.models.Build","create_build_output","正常系","シリアル番号付きで複数出力が作成されること","trackable=Trueのpart","quantity=3, serials=[""SN001"", ""SN002"", ""SN003""]","3件のStockItemが作成される","高","シリアル出力作成"
"65","UT-BLD-065","build.models.Build","create_build_output","正常系","auto_allocate=Trueで自動割当が行われること","マッチするシリアルの在庫が存在","auto_allocate=True, serials設定","マッチする在庫が自動割当される","中","自動割当付き出力作成"
"66","UT-BLD-066","build.models.Build","create_build_output","異常系","trackableパーツでシリアル未指定の場合エラーになること","has_trackable_parts=True","serials=None","ValidationError(serials: Serial numbers must be provided for trackable parts)","高","シリアル必須エラー"
"67","UT-BLD-067","build.models.Build","create_build_output","正常系","PENDING状態からPRODUCTIONに自動遷移すること","status=PENDING","quantity=1","status=BuildStatus.PRODUCTION.value","中","自動ステータス遷移"
"68","UT-BLD-068","build.models.Build","delete_output","正常系","ビルド出力が削除されること","is_building=Trueの出力が存在","output=対象StockItem","出力が削除され、関連割当も削除される","中","出力削除"
"69","UT-BLD-069","build.models.Build","delete_output","異常系","出力がNoneの場合エラーになること","なし","output=None","ValidationError(No build output specified)","中","出力削除エラー（null）"
"70","UT-BLD-070","build.models.Build","delete_output","異常系","既に完了した出力の場合エラーになること","is_building=Falseの出力","output=完了済み出力","ValidationError(Build output is already completed)","中","出力削除エラー（完了済み）"
"71","UT-BLD-071","build.models.Build","delete_output","異常系","別ビルドの出力の場合エラーになること","別ビルドの出力","output=別ビルドの出力","ValidationError(Build output does not match Build Order)","中","出力削除エラー（別ビルド）"
"72","UT-BLD-072","build.models.Build","trim_allocated_stock","正常系","過剰割当が削減されること","allocated > requiredのBuildLineが存在","なし","割当数量がrequiredに削減される","中","過剰割当削減"
"73","UT-BLD-073","build.models.Build","allocated_stock","正常系","割当されたBuildItemが返されること","BuildItemが存在","なし","BuildItemのQuerySet","中","割当在庫取得"
"74","UT-BLD-074","build.models.Build","subtract_allocated_stock","正常系","非トラッカブル割当在庫が消費されること","非トラッカブルの割当在庫が存在","user","割当在庫が消費（complete_allocation呼び出し）","高","割当在庫消費"
"75","UT-BLD-075","build.models.Build","scrap_build_output","正常系","出力がスクラップ処理されること","有効な出力が存在","output, quantity, location","出力がREJECTED状態になる","中","出力スクラップ"
"76","UT-BLD-076","build.models.Build","scrap_build_output","正常系","部分数量のスクラップで分割されること","quantity=10の出力が存在","quantity=3, location","出力が分割され、3のみスクラップ","中","部分スクラップ"
"77","UT-BLD-077","build.models.Build","scrap_build_output","異常系","quantity <= 0の場合エラーになること","有効な出力が存在","quantity=0","ValidationError(quantity: Quantity must be greater than zero)","中","スクラップエラー（数量）"
"78","UT-BLD-078","build.models.Build","scrap_build_output","異常系","quantity > output.quantityの場合エラーになること","quantity=5の出力が存在","quantity=10","ValidationError(quantity: Quantity cannot be greater than the output quantity)","中","スクラップエラー（超過）"
"79","UT-BLD-079","build.models.Build","complete_build_output","正常系","出力が正常に完了すること","有効な出力、割当完了","output, user","is_building=False, completed増加","高","出力完了"
"80","UT-BLD-080","build.models.Build","complete_build_output","正常系","部分数量の完了で分割されること","quantity=10の出力","quantity=3, user","出力が分割され、3のみ完了","中","部分完了"
"81","UT-BLD-081","build.models.Build","complete_build_output","異常系","テスト未通過の場合エラーになること","prevent_on_incomplete=True, 必須テスト未通過","output, user","ValidationError(Build output has not passed all required tests)","高","完了エラー（テスト）"
"82","UT-BLD-082","build.models.Build","complete_build_output","異常系","割当ありで部分完了の場合エラーになること","allocated_items > 0","quantity < output.quantity","ValidationError(Cannot partially complete a build output with allocated items)","中","部分完了エラー（割当あり）"
"83","UT-BLD-083","build.models.Build","auto_allocate_stock","正常系","在庫が自動割当されること","有効な在庫が存在","なし","BuildItemが作成される","高","自動割当"
"84","UT-BLD-084","build.models.Build","auto_allocate_stock","正常系","location指定で場所フィルタが適用されること","特定場所に在庫が存在","location=特定場所","指定場所の在庫のみ割当","中","自動割当（場所指定）"
"85","UT-BLD-085","build.models.Build","auto_allocate_stock","正常系","exclude_location指定で除外されること","除外場所に在庫が存在","exclude_location=除外場所","除外場所の在庫は割当されない","中","自動割当（場所除外）"
"86","UT-BLD-086","build.models.Build","auto_allocate_stock","正常系","interchangeable=Trueで複数在庫から割当されること","複数場所に在庫が存在","interchangeable=True","複数場所から割当","中","自動割当（交換可能）"
"87","UT-BLD-087","build.models.Build","auto_allocate_stock","正常系","substitutes=Trueで代替品も割当されること","代替品の在庫が存在","substitutes=True","代替品も割当対象","中","自動割当（代替品）"
"88","UT-BLD-088","build.models.Build","auto_allocate_stock","正常系","consumableアイテムは割当されないこと","consumable=TrueのBomItemが存在","なし","consumableアイテムは割当されない","中","自動割当（消耗品除外）"
"89","UT-BLD-089","build.models.Build","unallocated_lines","正常系","未割当のラインが返されること","一部ラインが未割当","tracked=None","未割当ラインのQuerySet","中","未割当ライン取得"
"90","UT-BLD-090","build.models.Build","unallocated_lines","正常系","tracked=Trueでトラッカブル未割当のみ返されること","トラッカブル・非トラッカブルの未割当が存在","tracked=True","トラッカブルの未割当のみ","中","未割当ライン取得（トラッカブル）"
"91","UT-BLD-091","build.models.Build","is_fully_allocated","正常系","全割当完了の場合Trueが返されること","全ラインが割当完了","tracked=None","True","高","全割当完了判定"
"92","UT-BLD-092","build.models.Build","is_fully_allocated","正常系","未割当がある場合Falseが返されること","一部ラインが未割当","tracked=None","False","高","全割当完了判定（未完了）"
"93","UT-BLD-093","build.models.Build","is_output_fully_allocated","正常系","出力が完全割当の場合Trueが返されること","出力への割当が完了","output=特定出力","True","高","出力割当完了判定"
"94","UT-BLD-094","build.models.Build","is_output_fully_allocated","正常系","出力が未割当の場合Falseが返されること","出力への割当が不完全","output=特定出力","False","高","出力割当完了判定（未完了）"
"95","UT-BLD-095","build.models.Build","is_overallocated","正常系","過剰割当がある場合Trueが返されること","allocated > requiredのラインが存在","なし","True","中","過剰割当判定"
"96","UT-BLD-096","build.models.Build","is_overallocated","正常系","過剰割当がない場合Falseが返されること","全ライン allocated <= required","なし","False","中","過剰割当判定（なし）"
"97","UT-BLD-097","build.models.Build","is_active","正常系","ACTIVE_CODESの場合Trueが返されること","status=PENDING","なし","True","中","アクティブ判定"
"98","UT-BLD-098","build.models.Build","is_complete","正常系","COMPLETE状態の場合Trueが返されること","status=COMPLETE","なし","True","中","完了判定"
"99","UT-BLD-099","build.models.Build","create_build_line_items","正常系","BOMアイテムに対応するBuildLineが作成されること","partに複数BomItemが存在","prevent_duplicates=True","BomItem数分のBuildLineが作成される","高","BuildLine作成"
"100","UT-BLD-100","build.models.Build","create_build_line_items","正常系","重複防止で既存ラインはスキップされること","既にBuildLineが存在","prevent_duplicates=True","既存ラインはスキップ、新規のみ作成","中","BuildLine作成（重複防止）"
"101","UT-BLD-101","build.models.Build","update_build_line_items","正常系","BuildLineの数量が更新されること","quantityが変更されたBuild","なし","各BuildLineのquantityが再計算される","中","BuildLine更新"
"102","UT-BLD-102","build.models.BuildLine","part","正常系","bom_item.sub_partが返されること","有効なBuildLine","なし","bom_item.sub_part","低","パーツ取得"
"103","UT-BLD-103","build.models.BuildLine","allocated_quantity","正常系","割当数量の合計が返されること","複数のallocationsが存在（合計=15）","なし","15","高","割当数量計算"
"104","UT-BLD-104","build.models.BuildLine","allocated_quantity","境界値","allocationsが0件の場合0が返されること","allocationsが0件","なし","0","中","割当数量計算（空）"
"105","UT-BLD-105","build.models.BuildLine","unallocated_quantity","正常系","未割当数量が正しく計算されること","quantity=10, consumed=2, allocated=3","なし","5 (10-2-3)","高","未割当数量計算"
"106","UT-BLD-106","build.models.BuildLine","unallocated_quantity","境界値","負の値の場合0が返されること","quantity=10, consumed=5, allocated=8","なし","0","中","未割当数量計算（負値防止）"
"107","UT-BLD-107","build.models.BuildLine","is_fully_allocated","正常系","完全割当の場合Trueが返されること","allocated >= quantity - consumed","なし","True","高","完全割当判定"
"108","UT-BLD-108","build.models.BuildLine","is_fully_allocated","正常系","consumableの場合常にTrueが返されること","bom_item.consumable=True","なし","True","中","完全割当判定（消耗品）"
"109","UT-BLD-109","build.models.BuildLine","is_fully_allocated","正常系","未割当がある場合Falseが返されること","allocated < quantity - consumed","なし","False","高","完全割当判定（未完了）"
"110","UT-BLD-110","build.models.BuildLine","is_overallocated","正常系","過剰割当の場合Trueが返されること","allocated > quantity - consumed","なし","True","中","過剰割当判定"
"111","UT-BLD-111","build.models.BuildLine","is_overallocated","正常系","過剰割当でない場合Falseが返されること","allocated <= quantity - consumed","なし","False","中","過剰割当判定（なし）"
"112","UT-BLD-112","build.models.BuildLine","is_fully_consumed","正常系","完全消費の場合Trueが返されること","consumed >= quantity","なし","True","中","完全消費判定"
"113","UT-BLD-113","build.models.BuildLine","is_fully_consumed","正常系","未消費がある場合Falseが返されること","consumed < quantity","なし","False","中","完全消費判定（未完了）"
"114","UT-BLD-114","build.models.BuildItem","save","正常系","clean後にsaveされること","有効なBuildItem","なし","正常に保存される","中","BuildItem保存"
"115","UT-BLD-115","build.models.BuildItem","clean","正常系","バリデーションが正常に完了すること","有効なBuildItem","なし","ValidationErrorなし","中","BuildItemバリデーション"
"116","UT-BLD-116","build.models.BuildItem","clean","異常系","trackableパーツでinstall_into未設定の場合エラーになること","stock_item.part.trackable=True, install_into=None","なし","ValidationError(Build item must specify a build output...)","高","trackable出力必須エラー"
"117","UT-BLD-117","build.models.BuildItem","clean","異常系","stock_itemがBOMに合致しない場合エラーになること","BOMに含まれないパーツのstock_item","なし","ValidationError(stock_item: Selected stock item does not match BOM line)","高","BOM不一致エラー"
"118","UT-BLD-118","build.models.BuildItem","check_allocated_quantity","正常系","有効な数量でエラーなしになること","quantity > 0, quantity <= stock_item.quantity","raise_error=True","エラーなし","高","数量検証"
"119","UT-BLD-119","build.models.BuildItem","check_allocated_quantity","異常系","quantity <= 0の場合エラーになること","quantity=0","raise_error=True","ValidationError(quantity: Allocated quantity must be greater than zero)","高","数量検証（ゼロ以下）"
"120","UT-BLD-120","build.models.BuildItem","check_allocated_quantity","異常系","シリアル在庫でquantity != 1の場合エラーになること","stock_item.serialized=True, quantity=2","raise_error=True","ValidationError(quantity: Quantity must be 1 for serialized stock)","高","シリアル数量検証"
"121","UT-BLD-121","build.models.BuildItem","check_allocated_quantity","異常系","quantity > stock_item.quantityの場合エラーになること","quantity=10, stock_item.quantity=5","raise_error=True","ValidationError(quantity: Allocated quantity must not exceed available stock quantity)","高","数量超過検証"
"122","UT-BLD-122","build.models.BuildItem","check_allocated_quantity","異常系","過剰割当の場合エラーになること","total_allocation > available","raise_error=True","ValidationError(quantity: Stock item is over-allocated)","高","過剰割当検証"
"123","UT-BLD-123","build.models.BuildItem","build","正常系","build_line.buildが返されること","有効なbuild_line","なし","関連するBuild","低","ビルド取得"
"124","UT-BLD-124","build.models.BuildItem","build","境界値","build_lineがNoneの場合Noneが返されること","build_line=None","なし","None","低","ビルド取得（null）"
"125","UT-BLD-125","build.models.BuildItem","bom_item","正常系","build_line.bom_itemが返されること","有効なbuild_line","なし","関連するBomItem","低","BomItem取得"
"126","UT-BLD-126","build.models.BuildItem","complete_allocation","正常系","トラッカブルパーツがインストールされること","stock_item.part.trackable=True, install_into設定","user","stock_itemがinstall_intoにインストールされる","高","割当完了（トラッカブル）"
"127","UT-BLD-127","build.models.BuildItem","complete_allocation","正常系","非トラッカブルパーツが消費されること","stock_item.part.trackable=False","user","stock_itemがconsumed_byに設定、location=None","高","割当完了（非トラッカブル）"
"128","UT-BLD-128","build.models.BuildItem","complete_allocation","正常系","部分数量で在庫が分割されること","quantity < stock_item.quantity","quantity=3, user","在庫が分割され、3のみ消費","中","部分割当完了"
"129","UT-BLD-129","build.models.BuildItem","complete_allocation","正常系","build_line.consumedが増加すること","有効なBuildItem","user","build_line.consumed += quantity","高","消費数量更新"
"130","UT-BLD-130","build.models.BuildItem","complete_allocation","正常系","quantity=0になったBuildItemが削除されること","割当完了後quantity=0","user","BuildItemが削除される","中","割当完了後削除"
"131","UT-BLD-131","build.status_codes.BuildStatus","PENDING","正常系","PENDING値が10であること","なし","なし","10","低","ステータスコード値"
"132","UT-BLD-132","build.status_codes.BuildStatus","PRODUCTION","正常系","PRODUCTION値が20であること","なし","なし","20","低","ステータスコード値"
"133","UT-BLD-133","build.status_codes.BuildStatus","ON_HOLD","正常系","ON_HOLD値が25であること","なし","なし","25","低","ステータスコード値"
"134","UT-BLD-134","build.status_codes.BuildStatus","CANCELLED","正常系","CANCELLED値が30であること","なし","なし","30","低","ステータスコード値"
"135","UT-BLD-135","build.status_codes.BuildStatus","COMPLETE","正常系","COMPLETE値が40であること","なし","なし","40","低","ステータスコード値"
"136","UT-BLD-136","build.status_codes.BuildStatusGroups","ACTIVE_CODES","正常系","アクティブコードが正しく定義されていること","なし","なし","[10, 25, 20]（PENDING, ON_HOLD, PRODUCTION）","中","アクティブコード定義"
"137","UT-BLD-137","build.validators.generate_next_build_reference","","正常系","次のビルド参照番号が生成されること","既存ビルドが存在","なし","Build.generate_reference()の結果","中","参照番号生成"
"138","UT-BLD-138","build.validators.validate_build_order_reference_pattern","","正常系","有効なパターンでエラーなしになること","有効なパターン","pattern=""BO-{####}""","エラーなし","中","パターン検証"
"139","UT-BLD-139","build.validators.validate_build_order_reference","","正常系","有効な参照番号でエラーなしになること","有効な参照番号","value=""BO-0001""","エラーなし","中","参照番号検証"
"140","UT-BLD-140","build.tasks.auto_allocate_build","","正常系","ビルドの自動割当が実行されること","有効なbuild_id","build_id","build_order.auto_allocate_stock()が呼ばれる","中","自動割当タスク"
"141","UT-BLD-141","build.tasks.auto_allocate_build","","異常系","存在しないbuild_idで警告ログが出力されること","存在しないbuild_id","build_id=999999","警告ログ出力、処理終了","低","自動割当タスク（不存在）"
"142","UT-BLD-142","build.tasks.consume_build_item","","正常系","BuildItemの消費が実行されること","有効なitem_id","item_id, quantity, notes, user_id","item.complete_allocation()が呼ばれる","中","アイテム消費タスク"
"143","UT-BLD-143","build.tasks.consume_build_item","","異常系","存在しないitem_idで警告ログが出力されること","存在しないitem_id","item_id=999999","警告ログ出力、処理終了","低","アイテム消費タスク（不存在）"
"144","UT-BLD-144","build.tasks.consume_build_line","","正常系","BuildLineの全割当が消費されること","有効なline_id、複数allocations","line_id, notes, user_id","全allocationsのcomplete_allocation()が呼ばれる","中","ライン消費タスク"
"145","UT-BLD-145","build.tasks.consume_build_line","","異常系","存在しないline_idで警告ログが出力されること","存在しないline_id","line_id=999999","警告ログ出力、処理終了","低","ライン消費タスク（不存在）"
"146","UT-BLD-146","build.tasks.complete_build_allocations","","正常系","ビルドの割当完了が実行されること","有効なbuild_id, user_id","build_id, user_id","build_order.complete_allocations()が呼ばれる","中","割当完了タスク"
"147","UT-BLD-147","build.tasks.complete_build_allocations","","異常系","存在しないbuild_idで警告ログが出力されること","存在しないbuild_id","build_id=999999, user_id","警告ログ出力、処理終了","低","割当完了タスク（不存在）"
"148","UT-BLD-148","build.tasks.update_build_order_lines","","正常系","BomItem更新でBuildLineが更新されること","有効なbom_item_pk、関連ビルドが存在","bom_item_pk","関連BuildLineのquantityが更新される","中","ライン更新タスク"
"149","UT-BLD-149","build.tasks.update_build_order_lines","","正常系","virtualパーツの場合BuildLineが削除されること","bom_item.sub_part.virtual=True","bom_item_pk","BuildLineが削除される","中","ライン更新タスク（virtual）"
"150","UT-BLD-150","build.tasks.update_build_order_lines","","正常系","存在しないBomItemで早期リターンすること","削除されたBomItem","bom_item_pk=削除済み","処理終了（何もしない）","低","ライン更新タスク（不存在）"
"151","UT-BLD-151","build.tasks.check_build_stock","","正常系","在庫不足時に通知が送信されること","必要在庫が不足しているビルド","build","trigger_notificationが呼ばれる","中","在庫チェックタスク"
"152","UT-BLD-152","build.tasks.check_build_stock","","正常系","在庫充足時に通知が送信されないこと","必要在庫が充足しているビルド","build","通知なし、早期リターン","中","在庫チェックタスク（充足）"
"153","UT-BLD-153","build.tasks.notify_overdue_build_order","","正常系","期限超過通知が送信されること","有効な期限超過ビルド","bo","trigger_notificationが呼ばれる","中","期限超過通知タスク"
"154","UT-BLD-154","build.tasks.check_overdue_build_orders","","正常系","昨日期限超過になったビルドに通知が送信されること","target_date=昨日のアクティブビルドが存在","なし","該当ビルドにnotify_overdue_build_orderが呼ばれる","中","期限超過チェックタスク"
"155","UT-BLD-155","build.filters.annotate_required_quantity","","正常系","必要数量アノテーションが正しく計算されること","quantity=10, consumed=3のBuildLine","なし","7（Greatest(quantity - consumed, 0)）","中","必要数量アノテーション"
"156","UT-BLD-156","build.filters.annotate_required_quantity","","境界値","consumed > quantityの場合0が返されること","quantity=5, consumed=8のBuildLine","なし","0","中","必要数量アノテーション（超過）"
"157","UT-BLD-157","build.filters.annotate_allocated_quantity","","正常系","割当数量アノテーションが正しく計算されること","allocations合計=15のBuildLine","なし","15","中","割当数量アノテーション"
"158","UT-BLD-158","build.filters.annotate_allocated_quantity","","境界値","allocationsが0件の場合0が返されること","allocationsが0件のBuildLine","なし","0","中","割当数量アノテーション（空）"
"159","UT-BLD-159","build.events.BuildEvents","HOLD","正常系","HOLDイベント値が正しいこと","なし","なし","build.hold","低","イベント値"
"160","UT-BLD-160","build.events.BuildEvents","ISSUED","正常系","ISSUEDイベント値が正しいこと","なし","なし","build.issued","低","イベント値"
"161","UT-BLD-161","build.events.BuildEvents","CANCELLED","正常系","CANCELLEDイベント値が正しいこと","なし","なし","build.cancelled","低","イベント値"
"162","UT-BLD-162","build.events.BuildEvents","COMPLETED","正常系","COMPLETEDイベント値が正しいこと","なし","なし","build.completed","低","イベント値"
"163","UT-BLD-163","build.events.BuildEvents","OVERDUE","正常系","OVERDUEイベント値が正しいこと","なし","なし","build.overdue_build_order","低","イベント値"
"164","UT-BLD-164","build.events.BuildEvents","OUTPUT_COMPLETED","正常系","OUTPUT_COMPLETEDイベント値が正しいこと","なし","なし","buildoutput.completed","低","イベント値"
"165","UT-BLD-165","build.serializers.BuildSerializer","validate_reference","正常系","有効な参照番号でバリデーション成功すること","有効な参照番号","reference=""BO-0001""","reference=""BO-0001""","中","シリアライザバリデーション"
"166","UT-BLD-166","build.serializers.BuildSerializer","annotate_queryset","正常系","overdueアノテーションが追加されること","期限超過のビルドが存在","queryset","overdue=True/Falseがアノテーションされる","中","クエリセットアノテーション"
"167","UT-BLD-167","build.serializers.BuildOutputSerializer","validate_output","正常系","有効な出力でバリデーション成功すること","output.build==context[build]","output=有効なStockItem","バリデーション成功","中","出力バリデーション"
"168","UT-BLD-168","build.serializers.BuildOutputSerializer","validate_output","異常系","別ビルドの出力でエラーになること","output.build!=context[build]","output=別ビルドの出力","ValidationError(Build output does not match the parent build)","中","出力バリデーション（不一致）"
"169","UT-BLD-169","build.serializers.BuildOutputSerializer","validate_output","異常系","パーツ不一致でエラーになること","output.part!=build.part","output=別パーツの出力","ValidationError(Output part does not match BuildOrder part)","中","出力バリデーション（パーツ不一致）"
"170","UT-BLD-170","build.serializers.BuildOutputSerializer","validate_output","異常系","既に完了した出力でエラーになること","output.is_building=False","output=完了済み出力","ValidationError(This build output has already been completed)","中","出力バリデーション（完了済み）"
"171","UT-BLD-171","build.serializers.BuildOutputCreateSerializer","validate_quantity","正常系","有効な数量でバリデーション成功すること","quantity > 0","quantity=5","quantity=5","中","数量バリデーション"
"172","UT-BLD-172","build.serializers.BuildOutputCreateSerializer","validate_quantity","異常系","quantity <= 0でエラーになること","quantity <= 0","quantity=0","ValidationError(Quantity must be greater than zero)","中","数量バリデーション（ゼロ以下）"
"173","UT-BLD-173","build.serializers.BuildOutputCreateSerializer","validate_quantity","異常系","trackableパーツで非整数の場合エラーになること","part.trackable=True","quantity=1.5","ValidationError(Integer quantity required for trackable parts)","中","数量バリデーション（非整数）"
"174","UT-BLD-174","build.serializers.BuildOutputCreateSerializer","validate","正常系","シリアル番号が正しく抽出されること","trackableパーツ","serial_numbers=""1-3"", quantity=3","self.serials=[""1"", ""2"", ""3""]","中","シリアル番号抽出"
"175","UT-BLD-175","build.serializers.BuildOutputCreateSerializer","validate","異常系","trackableパーツでシリアル未指定の場合エラーになること","part.trackable=True","serial_numbers=""""","ValidationError(serial_numbers: Serial numbers must be provided for trackable parts)","高","シリアル必須エラー"
"176","UT-BLD-176","build.serializers.BuildOutputCreateSerializer","validate","異常系","重複シリアル番号でエラーになること","既に使用されているシリアル番号","serial_numbers=""存在するシリアル""","ValidationError(serial_numbers: The following serial numbers already exist or are invalid)","高","シリアル重複エラー"
"177","UT-BLD-177","build.serializers.BuildCompleteSerializer","validate_accept_overallocated","正常系","過剰割当許可でバリデーション成功すること","is_overallocated=True","accept_overallocated=ACCEPT","バリデーション成功","中","過剰割当バリデーション"
"178","UT-BLD-178","build.serializers.BuildCompleteSerializer","validate_accept_overallocated","異常系","過剰割当拒否でエラーになること","is_overallocated=True","accept_overallocated=REJECT","ValidationError(Some stock items have been overallocated)","中","過剰割当バリデーション（拒否）"
"179","UT-BLD-179","build.serializers.BuildCompleteSerializer","validate_accept_unallocated","正常系","未割当許可でバリデーション成功すること","fully_allocated=False","accept_unallocated=True","バリデーション成功","中","未割当バリデーション"
"180","UT-BLD-180","build.serializers.BuildCompleteSerializer","validate_accept_unallocated","異常系","未割当拒否でエラーになること","fully_allocated=False","accept_unallocated=False","ValidationError(Required stock has not been fully allocated)","中","未割当バリデーション（拒否）"
"181","UT-BLD-181","build.serializers.BuildCompleteSerializer","validate_accept_incomplete","正常系","未完了許可でバリデーション成功すること","remaining > 0","accept_incomplete=True","バリデーション成功","中","未完了バリデーション"
"182","UT-BLD-182","build.serializers.BuildCompleteSerializer","validate_accept_incomplete","異常系","未完了拒否でエラーになること","remaining > 0","accept_incomplete=False","ValidationError(Required build quantity has not been completed)","中","未完了バリデーション（拒否）"
"183","UT-BLD-183","build.serializers.BuildCompleteSerializer","validate","異常系","オープン子ビルドがある場合エラーになること","BUILDORDER_REQUIRE_CLOSED_CHILDS=True, has_open_child_builds=True","なし","ValidationError(Build order has open child build orders)","中","完了バリデーション（子ビルド）"
"184","UT-BLD-184","build.serializers.BuildCompleteSerializer","validate","異常系","status!=PRODUCTIONでエラーになること","status=PENDING","なし","ValidationError(Build order must be in production state)","中","完了バリデーション（ステータス）"
"185","UT-BLD-185","build.serializers.BuildAllocationItemSerializer","validate_build_line","正常系","有効なbuild_lineでバリデーション成功すること","build_line.bom_item.part==build.part","build_line=有効なBuildLine","バリデーション成功","中","BuildLineバリデーション"
"186","UT-BLD-186","build.serializers.BuildAllocationItemSerializer","validate_build_line","異常系","パーツ不一致でエラーになること","build_line.bom_item.part!=build.part, inherited=False","build_line=不一致BuildLine","ValidationError(bom_item.part must point to the same part as the build order)","中","BuildLineバリデーション（不一致）"
"187","UT-BLD-187","build.serializers.BuildAllocationItemSerializer","validate_stock_item","正常系","在庫中のstock_itemでバリデーション成功すること","stock_item.in_stock=True","stock_item=在庫中アイテム","バリデーション成功","中","StockItemバリデーション"
"188","UT-BLD-188","build.serializers.BuildAllocationItemSerializer","validate_stock_item","異常系","在庫外のstock_itemでエラーになること","stock_item.in_stock=False","stock_item=在庫外アイテム","ValidationError(Item must be in stock)","中","StockItemバリデーション（在庫外）"
"189","UT-BLD-189","build.serializers.BuildAllocationItemSerializer","validate_quantity","正常系","有効な数量でバリデーション成功すること","quantity > 0","quantity=5","quantity=5","中","数量バリデーション"
"190","UT-BLD-190","build.serializers.BuildAllocationItemSerializer","validate_quantity","異常系","quantity <= 0でエラーになること","quantity <= 0","quantity=0","ValidationError(Quantity must be greater than zero)","中","数量バリデーション（ゼロ以下）"
"191","UT-BLD-191","build.serializers.BuildAllocationItemSerializer","validate","異常系","利用可能数量を超過した場合エラーになること","quantity > stock_item.unallocated_quantity()","quantity=100, available=5","ValidationError(quantity: Available quantity (5) exceeded)","高","数量超過バリデーション"
"192","UT-BLD-192","build.serializers.BuildAllocationItemSerializer","validate","異常系","trackableパーツでoutput未設定の場合エラーになること","sub_part.trackable=True, output=None","output=None","ValidationError(output: Build output must be specified for allocation of tracked parts)","高","trackable出力必須"
"193","UT-BLD-193","build.serializers.BuildAllocationItemSerializer","validate","異常系","非trackableパーツでoutput設定の場合エラーになること","sub_part.trackable=False, output設定","output=StockItem","ValidationError(output: Build output cannot be specified for allocation of untracked parts)","中","非trackable出力禁止"
"194","UT-BLD-194","build.serializers.BuildLineSerializer","annotate_queryset","正常系","allocated, on_order等がアノテーションされること","有効なqueryset","queryset, build","allocated, in_production, on_order等がアノテーションされる","中","BuildLineアノテーション"
"195","UT-BLD-195","build.serializers.BuildConsumeSerializer","validate","正常系","items/linesいずれかがあればバリデーション成功すること","items or lines が存在","items=[{...}]","バリデーション成功","中","消費バリデーション"
"196","UT-BLD-196","build.serializers.BuildConsumeSerializer","validate","異常系","items/lines両方空の場合エラーになること","items=[], lines=[]","items=[], lines=[]","ValidationError(At least one item or line must be provided)","中","消費バリデーション（空）"
"197","UT-BLD-197","build.api.BuildFilter","filter_status","正常系","ステータスでフィルタされること","status=10のビルドが存在","status=10","status=10のビルドのみ","中","ステータスフィルタ"
"198","UT-BLD-198","build.api.BuildFilter","filter_active","正常系","active=Trueでアクティブビルドがフィルタされること","アクティブ・非アクティブビルドが存在","active=True","アクティブビルドのみ","中","アクティブフィルタ"
"199","UT-BLD-199","build.api.BuildFilter","filter_overdue","正常系","overdue=Trueで期限超過ビルドがフィルタされること","期限超過・期限内ビルドが存在","overdue=True","期限超過ビルドのみ","中","期限超過フィルタ"
"200","UT-BLD-200","build.api.BuildDetail","destroy","異常系","CANCELLED以外でエラーになること","status=PRODUCTION","DELETE","ValidationError(Build must be cancelled before it can be deleted)","高","削除制限"
"201","UT-COM-001","common.models.BaseInvenTreeSetting","save","正常系","設定値が正常に保存されること","データベースが利用可能","key=""TEST_KEY"", value=""test_value""","設定値がデータベースに保存される","高","設定保存の基本機能"
"202","UT-COM-002","common.models.BaseInvenTreeSetting","save","正常系","キーが大文字に変換されること","データベースが利用可能","key=""test_key""","キーが""TEST_KEY""に変換されて保存される","中","キーの正規化処理"
"203","UT-COM-003","common.models.BaseInvenTreeSetting","save","正常系","before_saveアクションが呼び出されること","設定にbefore_save関数が定義されている","設定保存","before_save関数が実行される","中","フック関数の実行確認"
"204","UT-COM-004","common.models.BaseInvenTreeSetting","save","正常系","after_saveアクションが呼び出されること","設定にafter_save関数が定義されている","設定保存","after_save関数が実行される","中","フック関数の実行確認"
"205","UT-COM-005","common.models.BaseInvenTreeSetting","save","正常系","キャッシュに保存されること","cache=True（デフォルト）","設定保存","設定がキャッシュに保存される","中","キャッシュ機能"
"206","UT-COM-006","common.models.BaseInvenTreeSetting","build_default_values","正常系","未設定のキーにデフォルト値が設定されること","一部の設定が未登録","なし","不足している設定がデフォルト値で作成される","高","デフォルト値の初期化"
"207","UT-COM-007","common.models.BaseInvenTreeSetting","get_setting_object","正常系","キャッシュから設定が取得できること","設定がキャッシュに存在する","key=""TEST_KEY""","キャッシュから設定オブジェクトが返却される","高","キャッシュ取得の高速化"
"208","UT-COM-008","common.models.BaseInvenTreeSetting","get_setting_object","正常系","データベースから設定が取得できること","設定がDBに存在しキャッシュにない","key=""TEST_KEY""","DBから設定オブジェクトが返却される","高","DB取得機能"
"209","UT-COM-009","common.models.BaseInvenTreeSetting","get_setting_object","正常系","存在しない設定が作成されること","設定が存在しない, create=True","key=""NEW_KEY""","新しい設定がデフォルト値で作成される","高","自動作成機能"
"210","UT-COM-010","common.models.BaseInvenTreeSetting","get_setting_object","異常系","存在しない設定でcreate=Falseの場合Noneが返却されること","設定が存在しない","key=""NONEXISTENT"", create=False","Noneが返却される","中","存在しない設定の処理"
"211","UT-COM-011","common.models.BaseInvenTreeSetting","get_setting","正常系","設定値が正しく取得できること","設定が存在する","key=""TEST_KEY""","設定値が返却される","高","値取得の基本機能"
"212","UT-COM-012","common.models.BaseInvenTreeSetting","get_setting","正常系","ブール値が正しく変換されること","設定がbool型","key=""BOOL_KEY"", value=""True""","Trueが返却される","高","型変換機能"
"213","UT-COM-013","common.models.BaseInvenTreeSetting","get_setting","正常系","整数値が正しく変換されること","設定がint型","key=""INT_KEY"", value=""42""","42が返却される","高","型変換機能"
"214","UT-COM-014","common.models.BaseInvenTreeSetting","get_setting","異常系","存在しない設定でバックアップ値が返却されること","設定が存在しない","key=""NONEXISTENT"", backup_value=""default""","defaultが返却される","中","バックアップ値の処理"
"215","UT-COM-015","common.models.BaseInvenTreeSetting","set_setting","正常系","設定値が正しく設定されること","データベースが利用可能","key=""TEST_KEY"", value=""new_value""","設定値が更新される","高","値設定の基本機能"
"216","UT-COM-016","common.models.BaseInvenTreeSetting","set_setting","正常系","ブール値がTrue/Falseに正規化されること","設定がbool型","value=""yes""","Trueとして保存される","中","ブール値の正規化"
"217","UT-COM-017","common.models.BaseInvenTreeSetting","set_setting","異常系","非スタッフユーザーで設定変更が無視されること","change_userが非スタッフ","change_user=non_staff_user","設定が変更されない","高","権限チェック"
"218","UT-COM-018","common.models.BaseInvenTreeSetting","set_setting","異常系","ValidationErrorが発生した場合に例外がスローされること","バリデーションエラーが発生","不正な値","ValidationErrorがスローされる","中","エラーハンドリング"
"219","UT-COM-019","common.models.BaseInvenTreeSetting","clean","正常系","バリデータが正しく実行されること","validatorが定義されている","設定保存","バリデータが実行される","高","バリデーション機能"
"220","UT-COM-020","common.models.BaseInvenTreeSetting","clean","異常系","無効な選択肢でValidationErrorがスローされること","choicesが定義されている","無効な選択肢","ValidationErrorがスローされる","中","選択肢バリデーション"
"221","UT-COM-021","common.models.BaseInvenTreeSetting","run_validator","正常系","boolバリデータが正しく動作すること","validator=bool","value=""True""","値がブール値に変換される","中","boolバリデータ"
"222","UT-COM-022","common.models.BaseInvenTreeSetting","run_validator","正常系","intバリデータが正しく動作すること","validator=int","value=""123""","値が整数に変換される","中","intバリデータ"
"223","UT-COM-023","common.models.BaseInvenTreeSetting","run_validator","正常系","floatバリデータが正しく動作すること","validator=float","value=""3.14""","値が浮動小数点数に変換される","中","floatバリデータ"
"224","UT-COM-024","common.models.BaseInvenTreeSetting","run_validator","異常系","無効なブール値でValidationErrorがスローされること","validator=bool","value=""invalid""","ValidationErrorがスローされる","中","無効値のエラー処理"
"225","UT-COM-025","common.models.BaseInvenTreeSetting","run_validator","異常系","無効な整数値でValidationErrorがスローされること","validator=int","value=""abc""","ValidationErrorがスローされる","中","無効値のエラー処理"
"226","UT-COM-026","common.models.BaseInvenTreeSetting","validate_unique","正常系","一意なキーで保存できること","キーが一意","key=""UNIQUE_KEY""","正常に保存される","高","ユニーク制約"
"227","UT-COM-027","common.models.BaseInvenTreeSetting","validate_unique","異常系","重複キーでValidationErrorがスローされること","同じキーが既に存在","key=""DUPLICATE_KEY""","ValidationErrorがスローされる","高","ユニーク制約違反"
"228","UT-COM-028","common.models.BaseInvenTreeSetting","is_bool","正常系","ブール設定でTrueが返却されること","validator=bool","設定参照","Trueが返却される","中","型判定機能"
"229","UT-COM-029","common.models.BaseInvenTreeSetting","is_int","正常系","整数設定でTrueが返却されること","validator=int","設定参照","Trueが返却される","中","型判定機能"
"230","UT-COM-030","common.models.BaseInvenTreeSetting","is_float","正常系","浮動小数点設定でTrueが返却されること","validator=float","設定参照","Trueが返却される","中","型判定機能"
"231","UT-COM-031","common.models.BaseInvenTreeSetting","as_bool","正常系","文字列がブール値に変換されること","設定値=""True""","なし","Trueが返却される","中","型変換機能"
"232","UT-COM-032","common.models.BaseInvenTreeSetting","as_int","正常系","文字列が整数に変換されること","設定値=""42""","なし","42が返却される","中","型変換機能"
"233","UT-COM-033","common.models.BaseInvenTreeSetting","as_int","異常系","無効な値でデフォルト値が返却されること","設定値=""invalid""","raise_error=False","デフォルト値が返却される","中","エラー時のフォールバック"
"234","UT-COM-034","common.models.BaseInvenTreeSetting","as_float","正常系","文字列が浮動小数点数に変換されること","設定値=""3.14""","なし","3.14が返却される","中","型変換機能"
"235","UT-COM-035","common.models.BaseInvenTreeSetting","as_float","異常系","無効な値でデフォルト値が返却されること","設定値=""invalid""","raise_error=False","デフォルト値が返却される","中","エラー時のフォールバック"
"236","UT-COM-036","common.models.BaseInvenTreeSetting","model_class","正常系","モデルクラスが正しく返却されること","model=app.modelが有効","設定参照","モデルクラスが返却される","中","モデル参照機能"
"237","UT-COM-037","common.models.BaseInvenTreeSetting","model_class","異常系","無効なモデル名でNoneが返却されること","model=invalid.model","設定参照","Noneが返却される","中","無効モデルの処理"
"238","UT-COM-038","common.models.InvenTreeSetting","save","正常系","環境変数オーバーライドが適用されること","環境変数でオーバーライドが設定","設定保存","オーバーライド値が使用される","高","環境変数オーバーライド"
"239","UT-COM-039","common.models.InvenTreeSetting","save","正常系","再起動必要フラグが設定されること","requires_restart=True","設定変更","SERVER_RESTART_REQUIREDがTrueになる","高","再起動通知機能"
"240","UT-COM-040","common.models.InvenTreeSetting","requires_restart","正常系","再起動が必要な設定でTrueが返却されること","設定にrequires_restart=True","設定参照","Trueが返却される","中","再起動必要判定"
"241","UT-COM-041","common.models.InvenTreeUserSetting","get_setting_object","正常系","ユーザー固有の設定が取得できること","ユーザー設定が存在","key=""USER_KEY"", user=user","ユーザー固有の設定が返却される","高","ユーザー設定機能"
"242","UT-COM-042","common.models.InvenTreeUserSetting","get_setting_object","正常系","異なるユーザーで独立した設定が取得できること","複数ユーザーで同一キー","user=user1, user=user2","それぞれ独立した設定が返却される","高","ユーザー分離"
"243","UT-COM-043","common.models.ProjectCode","__str__","正常系","コードが文字列として返却されること","ProjectCodeが存在","なし","コード文字列が返却される","低","文字列表現"
"244","UT-COM-044","common.models.ProjectCode","get_api_url","正常系","APIエンドポイントURLが返却されること","なし","なし","api-project-code-listのURLが返却される","低","API URL取得"
"245","UT-COM-045","common.models.PriceBreak","convert_to","正常系","通貨変換が正しく行われること","為替レートが存在","currency_code=""USD""","変換後の金額が返却される","高","通貨変換機能"
"246","UT-COM-046","common.models.PriceBreak","convert_to","異常系","為替レートがない場合に元の金額が返却されること","為替レートが存在しない","currency_code=""XXX""","元の金額が返却される","中","為替レート不在時の処理"
"247","UT-COM-047","common.models.WebhookEndpoint","init","正常系","検証方法が設定されること","なし","request","verify属性が設定される","中","初期化処理"
"248","UT-COM-048","common.models.WebhookEndpoint","process_webhook","正常系","トークンが存在する場合にTOKEN検証が設定されること","token属性が設定されている","なし","verify=VerificationMethod.TOKEN","中","トークン検証設定"
"249","UT-COM-049","common.models.WebhookEndpoint","process_webhook","正常系","シークレットが存在する場合にHMAC検証が設定されること","secret属性が設定されている","なし","verify=VerificationMethod.HMAC","中","HMAC検証設定"
"250","UT-COM-050","common.models.WebhookEndpoint","validate_token","正常系","正しいトークンで検証が成功すること","token検証が有効","正しいトークン","Trueが返却される","高","トークン検証"
"251","UT-COM-051","common.models.WebhookEndpoint","validate_token","異常系","不正なトークンでPermissionDeniedがスローされること","token検証が有効","不正なトークン","PermissionDeniedがスローされる","高","トークン検証失敗"
"252","UT-COM-052","common.models.WebhookEndpoint","validate_token","正常系","正しいHMACで検証が成功すること","HMAC検証が有効","正しいHMAC署名","Trueが返却される","高","HMAC検証"
"253","UT-COM-053","common.models.WebhookEndpoint","validate_token","異常系","不正なHMACでPermissionDeniedがスローされること","HMAC検証が有効","不正なHMAC署名","PermissionDeniedがスローされる","高","HMAC検証失敗"
"254","UT-COM-054","common.models.WebhookEndpoint","save_data","正常系","WebhookMessageが作成されること","WebhookEndpointが存在","payload, headers, request","WebhookMessageが作成される","中","データ保存機能"
"255","UT-COM-055","common.models.WebhookEndpoint","process_payload","正常系","ペイロードが処理されること","WebhookMessageが存在","message, payload, headers","Trueが返却される","中","ペイロード処理"
"256","UT-COM-056","common.models.NotificationEntry","check_recent","正常系","最近の通知が存在する場合Trueが返却されること","通知が24時間以内に送信済み","key, uid, delta=1day","Trueが返却される","高","重複通知防止"
"257","UT-COM-057","common.models.NotificationEntry","check_recent","正常系","最近の通知が存在しない場合Falseが返却されること","通知が送信されていない","key, uid, delta=1day","Falseが返却される","高","重複通知防止"
"258","UT-COM-058","common.models.NotificationEntry","notify","正常系","通知エントリが作成されること","なし","key, uid","NotificationEntryが作成される","高","通知記録機能"
"259","UT-COM-059","common.models.NotificationEntry","notify","正常系","既存エントリが更新されること","同じkey, uidのエントリが存在","key, uid","updatedが更新される","中","通知記録更新"
"260","UT-COM-060","common.models.NotificationMessage","age","正常系","メッセージの経過秒数が返却されること","NotificationMessageが存在","なし","秒数が返却される","低","経過時間計算"
"261","UT-COM-061","common.models.NotificationMessage","age_human","正常系","人間可読な経過時間が返却されること","NotificationMessageが存在","なし","""X minutes ago""等が返却される","低","経過時間の人間可読表示"
"262","UT-COM-062","common.models.NotesImage","save","正常系","画像ファイルがnotes/に保存されること","画像ファイルがアップロード","image=file","notes/配下に保存される","中","画像保存機能"
"263","UT-COM-063","common.models.CustomUnit","fmt_string","正常系","単位定義文字列が正しく生成されること","name, definition, symbolが設定","なし","name = definition = symbolが返却される","中","フォーマット文字列生成"
"264","UT-COM-064","common.models.CustomUnit","validate_unique","正常系","一意なシンボルで保存できること","シンボルが一意","symbol=""kg""","正常に保存される","高","ユニーク制約"
"265","UT-COM-065","common.models.CustomUnit","validate_unique","異常系","重複シンボルでValidationErrorがスローされること","同じシンボルが既に存在","symbol=""kg""","ValidationErrorがスローされる","高","ユニーク制約違反"
"266","UT-COM-066","common.models.CustomUnit","clean","正常系","有効な単位定義で保存できること","name, definitionが有効","name=""dog_year"", definition=""52 * day""","正常に保存される","高","単位定義バリデーション"
"267","UT-COM-067","common.models.CustomUnit","clean","異常系","無効なname識別子でValidationErrorがスローされること","nameが無効な識別子","name=""123invalid""","ValidationErrorがスローされる","高","識別子バリデーション"
"268","UT-COM-068","common.models.CustomUnit","clean","異常系","無効なdefinitionでValidationErrorがスローされること","definitionが無効","definition=""invalid_unit""","ValidationErrorがスローされる","高","定義バリデーション"
"269","UT-COM-069","common.models.Attachment","save","正常系","ファイル添付が保存されること","ファイルがアップロード","attachment=file","ファイルが保存される","高","添付ファイル保存"
"270","UT-COM-070","common.models.Attachment","save","正常系","外部リンクが保存されること","リンクが指定","link=""https://example.com""","リンクが保存される","高","外部リンク保存"
"271","UT-COM-071","common.models.Attachment","save","異常系","ファイルもリンクもない場合ValidationErrorがスローされること","どちらも未指定","attachment=None, link=None","ValidationErrorがスローされる","高","必須フィールドチェック"
"272","UT-COM-072","common.models.Attachment","save","正常系","SVGファイルがサニタイズされること","SVGファイルがアップロード","attachment=svg_file","SVGがサニタイズされて保存される","高","SVGセキュリティ"
"273","UT-COM-073","common.models.Attachment","save","正常系","ファイルサイズが記録されること","ファイルがアップロード","attachment=file","file_sizeが設定される","中","ファイルサイズ記録"
"274","UT-COM-074","common.models.Attachment","clean_svg","正常系","SVGが正しくサニタイズされること","SVGコンテンツ","悪意のあるSVG","サニタイズされたSVGが返却される","高","SVGサニタイズ"
"275","UT-COM-075","common.models.Attachment","basename","正常系","ファイルのベース名が返却されること","attachmentが設定されている","なし","ファイル名が返却される","低","ファイル名取得"
"276","UT-COM-076","common.models.Attachment","fully_qualified_url","正常系","外部リンクの場合リンクがそのまま返却されること","link属性が設定されている","なし","リンクURLが返却される","中","完全修飾URL取得"
"277","UT-COM-077","common.models.Attachment","fully_qualified_url","正常系","添付ファイルの場合メディアURLが返却されること","attachment属性が設定されている","なし","メディアURLが返却される","中","完全修飾URL取得"
"278","UT-COM-078","common.models.Attachment","check_permission","正常系","ユーザーに権限がある場合Trueが返却されること","ユーザーがchange権限を持つ","permission=""change"", user=user","Trueが返却される","高","権限チェック"
"279","UT-COM-079","common.models.Attachment","check_permission","異常系","無効なモデルタイプでValidationErrorがスローされること","model_typeが無効","model_type=""invalid""","ValidationErrorがスローされる","高","モデルタイプバリデーション"
"280","UT-COM-080","common.models.InvenTreeCustomUserStateModel","__str__","正常系","文字列表現が正しく返却されること","全フィールドが設定されている","なし","model (reference_status): name | key (logical_key)形式","低","文字列表現"
"281","UT-COM-081","common.models.InvenTreeCustomUserStateModel","clean","正常系","有効なカスタム状態で保存できること","全フィールドが有効","有効な値","正常に保存される","高","カスタム状態バリデーション"
"282","UT-COM-082","common.models.InvenTreeCustomUserStateModel","clean","異常系","modelがNullでValidationErrorがスローされること","modelがNone","model=None","ValidationErrorがスローされる","高","必須フィールドチェック"
"283","UT-COM-083","common.models.InvenTreeCustomUserStateModel","clean","異常系","keyがlogical_keyと同じでValidationErrorがスローされること","keyとlogical_keyが同一","key=10, logical_key=10","ValidationErrorがスローされる","高","キー重複チェック"
"284","UT-COM-084","common.models.InvenTreeCustomUserStateModel","clean","異常系","keyが参照ステータスの値と重複でValidationErrorがスローされること","keyが参照ステータスに存在","key=既存の値","ValidationErrorがスローされる","高","キー重複チェック"
"285","UT-COM-085","common.models.InvenTreeCustomUserStateModel","clean","異常系","logical_keyが参照ステータスにないでValidationErrorがスローされること","logical_keyが存在しない","logical_key=無効な値","ValidationErrorがスローされる","高","論理キーバリデーション"
"286","UT-COM-086","common.models.InvenTreeCustomUserStateModel","clean","異常系","nameが参照ステータスと重複でValidationErrorがスローされること","nameが既存の名前と同じ","name=既存の名前","ValidationErrorがスローされる","高","名前重複チェック"
"287","UT-COM-087","common.models.InvenTreeCustomUserStateModel","get_status_class","正常系","ステータスクラスが返却されること","reference_statusが有効","なし","StatusCodeサブクラスが返却される","中","ステータスクラス取得"
"288","UT-COM-088","common.models.InvenTreeCustomUserStateModel","get_status_class","異常系","無効なreference_statusでNoneが返却されること","reference_statusが無効","reference_status=""Invalid""","Noneが返却される","中","無効ステータス処理"
"289","UT-COM-089","common.models.SelectionList","__str__","正常系","アクティブなリストで名前が返却されること","active=True","なし","名前が返却される","低","文字列表現"
"290","UT-COM-090","common.models.SelectionList","__str__","正常系","非アクティブなリストで(Inactive)が付加されること","active=False","なし","name (Inactive)が返却される","低","文字列表現"
"291","UT-COM-091","common.models.SelectionList","get_choices","正常系","アクティブなエントリの値リストが返却されること","複数のエントリが存在","なし","アクティブなエントリのvalue配列が返却される","中","選択肢取得"
"292","UT-COM-092","common.models.SelectionListEntry","__str__","正常系","アクティブなエントリでラベルが返却されること","active=True","なし","ラベルが返却される","低","文字列表現"
"293","UT-COM-093","common.models.SelectionListEntry","__str__","正常系","非アクティブなエントリで(Inactive)が付加されること","active=False","なし","label (Inactive)が返却される","低","文字列表現"
"294","UT-COM-094","common.models.ParameterTemplate","__str__","正常系","単位なしでname のみ返却されること","units未設定","なし","nameが返却される","低","文字列表現"
"295","UT-COM-095","common.models.ParameterTemplate","__str__","正常系","単位ありでname (units)が返却されること","units設定済み","なし","name (units)が返却される","低","文字列表現"
"296","UT-COM-096","common.models.ParameterTemplate","clean","正常系","有効なテンプレートで保存できること","全フィールドが有効","有効な値","正常に保存される","高","テンプレートバリデーション"
"297","UT-COM-097","common.models.ParameterTemplate","clean","異常系","チェックボックスに単位が設定されている場合ValidationErrorがスローされること","checkbox=True, units設定","units=""kg""","ValidationErrorがスローされる","中","チェックボックスバリデーション"
"298","UT-COM-098","common.models.ParameterTemplate","clean","異常系","チェックボックスに選択肢が設定されている場合ValidationErrorがスローされること","checkbox=True, choices設定","choices=""A,B,C""","ValidationErrorがスローされる","中","チェックボックスバリデーション"
"299","UT-COM-099","common.models.ParameterTemplate","clean","異常系","重複した選択肢でValidationErrorがスローされること","重複した選択肢","choices=""A,A,B""","ValidationErrorがスローされる","中","選択肢バリデーション"
"300","UT-COM-100","common.models.ParameterTemplate","validate_unique","異常系","重複した名前（大文字小文字区別なし）でValidationErrorがスローされること","同じ名前が存在","name=""test""（既存はTEST）","ValidationErrorがスローされる","高","名前ユニーク制約"
"301","UT-COM-101","common.models.ParameterTemplate","get_choices","正常系","選択リストから選択肢が返却されること","selectionlistが設定済み","なし","選択リストの値が返却される","中","選択肢取得"
"302","UT-COM-102","common.models.ParameterTemplate","get_choices","正常系","choicesから選択肢が返却されること","choices設定済み","choices=""A,B,C""","[A, B, C]が返却される","中","選択肢取得"
"303","UT-COM-103","common.models.ParameterTemplate","get_choices","境界値","空のchoicesで空配列が返却されること","choices未設定","choices=""""","[]が返却される","中","空の選択肢処理"
"304","UT-COM-104","common.models.Parameter","save","正常系","数値が計算されること","units設定済み","data=""10 kg""","data_numericが設定される","高","数値計算"
"305","UT-COM-105","common.models.Parameter","save","正常系","チェックボックスがTrue/Falseに変換されること","template.checkbox=True","data=""yes""","data=True, data_numeric=1","中","ブール値変換"
"306","UT-COM-106","common.models.Parameter","clean","正常系","有効な選択肢で保存できること","template.choicesが設定済み","dataが有効な選択肢","正常に保存される","高","選択肢バリデーション"
"307","UT-COM-107","common.models.Parameter","clean","異常系","無効な選択肢でValidationErrorがスローされること","template.choicesが設定済み","無効な選択肢","ValidationErrorがスローされる","高","選択肢バリデーション"
"308","UT-COM-108","common.models.Parameter","clean","異常系","単位が不一致でValidationErrorがスローされること","PARAMETER_ENFORCE_UNITS=True, template.units設定済み","不正な単位のdata","ValidationErrorがスローされる","高","単位バリデーション"
"309","UT-COM-109","common.models.Parameter","calculate_numeric_value","正常系","物理単位付きデータが数値変換されること","template.units設定済み","data=""10 km""","data_numericが10000（SI基本単位）","高","単位変換計算"
"310","UT-COM-110","common.models.Parameter","calculate_numeric_value","正常系","単位なしデータがfloat変換されること","template.units未設定","data=""3.14""","data_numeric=3.14","中","数値変換"
"311","UT-COM-111","common.models.Parameter","calculate_numeric_value","異常系","数値変換不可でNoneが設定されること","template.units未設定","data=""not_a_number""","data_numeric=None","中","変換失敗時の処理"
"312","UT-COM-112","common.models.Parameter","calculate_numeric_value","境界値","NaNでNoneが設定されること","計算結果がNaN","特殊な計算","data_numeric=None","中","特殊値の処理"
"313","UT-COM-113","common.models.Parameter","calculate_numeric_value","境界値","InfでNoneが設定されること","計算結果がInf","特殊な計算","data_numeric=None","中","特殊値の処理"
"314","UT-COM-114","common.models.Parameter","check_permission","正常系","ユーザーに権限がある場合Trueが返却されること","ユーザーがchange権限を持つ","permission=""change"", user=user","Trueが返却される","高","権限チェック"
"315","UT-COM-115","common.models.Parameter","check_permission","異常系","無効なモデルタイプでValidationErrorがスローされること","model_typeが無効","model_type=無効","ValidationErrorがスローされる","高","モデルタイプバリデーション"
"316","UT-COM-116","common.models.Parameter","units","正常系","テンプレートの単位が返却されること","template.units設定済み","なし","テンプレートの単位が返却される","低","プロパティ取得"
"317","UT-COM-117","common.models.Parameter","name","正常系","テンプレートの名前が返却されること","template.name設定済み","なし","テンプレートの名前が返却される","低","プロパティ取得"
"318","UT-COM-118","common.models.DataOutput","mark_complete","正常系","出力が完了としてマークされること","DataOutputが存在","progress=100, output=file","complete=True, progress=100, output設定","中","完了マーク"
"319","UT-COM-119","common.models.DataOutput","mark_failure","正常系","エラーメッセージが記録されること","DataOutputが存在","error=""Error message""","complete=False, errors={error: ...}","中","失敗マーク"
"320","UT-COM-120","common.models.DataOutput","mark_failure","正常系","エラー辞書が記録されること","DataOutputが存在","error_dict={...}","complete=False, errors=error_dict","中","失敗マーク"
"321","UT-COM-121","common.models.EmailMessage","save","正常系","スレッドが自動作成されること","thread未設定","保存","threadが作成されリンクされる","高","スレッド自動作成"
"322","UT-COM-122","common.models.EmailMessage","delete","正常系","保護無効時に削除できること","INVENTREE_PROTECT_EMAIL_LOG=False","削除","正常に削除される","中","削除機能"
"323","UT-COM-123","common.models.EmailMessage","delete","異常系","保護有効時にValidationErrorがスローされること","INVENTREE_PROTECT_EMAIL_LOG=True","削除","ValidationErrorがスローされる","高","削除保護"
"324","UT-COM-124","common.validators.validate_attachment_model_type","","正常系","有効なモデルタイプで検証成功","添付をサポートするモデル","value=""part""","例外なし","中","添付モデルバリデーション"
"325","UT-COM-125","common.validators.validate_attachment_model_type","","異常系","無効なモデルタイプでValidationErrorがスローされること","存在しないモデル","value=""invalid""","ValidationErrorがスローされる","中","添付モデルバリデーション"
"326","UT-COM-126","common.validators.validate_notes_model_type","","正常系","有効なモデルタイプで検証成功","ノートをサポートするモデル","value=""part""","例外なし","中","ノートモデルバリデーション"
"327","UT-COM-127","common.validators.validate_notes_model_type","","正常系","空値で検証成功","空文字列","value=""""","例外なし","中","空値許容"
"328","UT-COM-128","common.validators.validate_notes_model_type","","異常系","無効なモデルタイプでValidationErrorがスローされること","存在しないモデル","value=""invalid""","ValidationErrorがスローされる","中","ノートモデルバリデーション"
"329","UT-COM-129","common.validators.validate_decimal_places_min","","正常系","最小値が最大値以下で検証成功","最小値 <= 最大値","value=2（最大値=4）","例外なし","中","小数点桁数バリデーション"
"330","UT-COM-130","common.validators.validate_decimal_places_min","","異常系","最小値が最大値より大きいでValidationErrorがスローされること","最小値 > 最大値","value=5（最大値=4）","ValidationErrorがスローされる","中","小数点桁数バリデーション"
"331","UT-COM-131","common.validators.validate_decimal_places_max","","正常系","最大値が最小値以上で検証成功","最大値 >= 最小値","value=4（最小値=2）","例外なし","中","小数点桁数バリデーション"
"332","UT-COM-132","common.validators.validate_decimal_places_max","","異常系","最大値が最小値より小さいでValidationErrorがスローされること","最大値 < 最小値","value=1（最小値=2）","ValidationErrorがスローされる","中","小数点桁数バリデーション"
"333","UT-COM-133","common.validators.validate_email_domains","","正常系","有効なドメインリストで検証成功","有効なドメイン形式","@example.com,@test.org","例外なし","中","メールドメインバリデーション"
"334","UT-COM-134","common.validators.validate_email_domains","","異常系","空のドメインでValidationErrorがスローされること","空ドメインを含む","@example.com,,@test.org","ValidationErrorがスローされる","中","メールドメインバリデーション"
"335","UT-COM-135","common.validators.validate_email_domains","","異常系","無効なドメイン形式でValidationErrorがスローされること","@で始まらない","example.com","ValidationErrorがスローされる","中","メールドメインバリデーション"
"336","UT-COM-136","common.validators.validate_icon","","正常系","有効なアイコンで検証成功","有効なアイコン形式","ti:home:outline","例外なし","中","アイコンバリデーション"
"337","UT-COM-137","common.validators.validate_icon","","正常系","空文字で検証成功（空は許容）","空文字列","value=""""","例外なし","低","空値許容"
"338","UT-COM-138","common.validators.validate_icon","","正常系","Noneで検証成功（Noneは許容）","None","value=None","例外なし","低","Null許容"
"339","UT-COM-139","common.validators.validate_uppercase","","正常系","大文字で検証成功","大文字文字列","value=""ABC""","例外なし","中","大文字バリデーション"
"340","UT-COM-140","common.validators.validate_uppercase","","異常系","小文字を含むでValidationErrorがスローされること","小文字を含む","value=""abc""","ValidationErrorがスローされる","中","大文字バリデーション"
"341","UT-COM-141","common.validators.validate_variable_string","","正常系","有効な識別子で検証成功","有効な変数名","value=""valid_name""","例外なし","中","識別子バリデーション"
"342","UT-COM-142","common.validators.validate_variable_string","","異常系","数字始まりでValidationErrorがスローされること","数字で始まる","value=""1invalid""","ValidationErrorがスローされる","中","識別子バリデーション"
"343","UT-COM-143","common.validators.validate_variable_string","","異常系","特殊文字を含むでValidationErrorがスローされること","特殊文字を含む","value=""inv@lid""","ValidationErrorがスローされる","中","識別子バリデーション"
"344","UT-COM-144","common.currency.currency_code_default","","正常系","デフォルト通貨コードが返却されること","INVENTREE_DEFAULT_CURRENCY設定済み","create=True","設定された通貨コードが返却される","高","デフォルト通貨取得"
"345","UT-COM-145","common.currency.currency_code_default","","正常系","未設定時にUSDが返却されること","INVENTREE_DEFAULT_CURRENCY未設定","create=True","USDが返却される","中","デフォルト通貨フォールバック"
"346","UT-COM-146","common.currency.currency_codes","","正常系","設定された通貨コードリストが返却されること","CURRENCY_CODES設定済み","なし","設定された通貨コードリストが返却される","高","通貨コードリスト取得"
"347","UT-COM-147","common.currency.currency_codes","","正常系","未設定時にデフォルトリストが返却されること","CURRENCY_CODES未設定","なし","デフォルト通貨コードリストが返却される","中","通貨コードフォールバック"
"348","UT-COM-148","common.currency.currency_codes","","正常系","無効なコードが除外されること","無効なコードを含む","CURRENCY_CODES=""USD,INVALID,EUR""","[USD, EUR]が返却される","中","無効コード除外"
"349","UT-COM-149","common.currency.currency_codes","","正常系","重複コードが除外されること","重複コードを含む","CURRENCY_CODES=""USD,USD,EUR""","[USD, EUR]が返却される","中","重複コード除外"
"350","UT-COM-150","common.currency.validate_currency_codes","","正常系","有効な通貨コードで検証成功","有効なコードのみ","USD,EUR,JPY","[USD, EUR, JPY]が返却される","高","通貨コードバリデーション"
"351","UT-COM-151","common.currency.validate_currency_codes","","異常系","無効な通貨コードでValidationErrorがスローされること","無効なコードを含む","USD,INVALID","ValidationErrorがスローされる","高","通貨コードバリデーション"
"352","UT-COM-152","common.currency.validate_currency_codes","","異常系","重複コードでValidationErrorがスローされること","重複コードを含む","USD,USD","ValidationErrorがスローされる","中","重複コードバリデーション"
"353","UT-COM-153","common.currency.validate_currency_codes","","異常系","空のコードリストでValidationErrorがスローされること","コードリストが空","なし","ValidationErrorがスローされる","中","空リストバリデーション"
"354","UT-COM-154","common.currency.get_price","","正常系","価格帯に基づく価格が計算されること","価格帯が設定済み","quantity=10, currency=""USD""","正しい価格が返却される","高","価格計算"
"355","UT-COM-155","common.currency.get_price","","正常系","最小価格帯が使用されること","数量が最小価格帯未満","quantity=1","最小価格帯の価格が返却される","中","最小価格帯適用"
"356","UT-COM-156","common.currency.get_price","","正常系","最適な価格帯が選択されること","複数の価格帯が存在","quantity=100","最適な価格帯の価格が返却される","高","価格帯選択"
"357","UT-COM-157","common.currency.get_price","","境界値","価格帯がない場合Noneが返却されること","価格帯が存在しない","なし","Noneが返却される","中","価格帯不在時の処理"
"358","UT-COM-158","common.notifications.trigger_notification","","正常系","通知が送信されること","ターゲットユーザーが存在","obj, category, targets","通知が送信される","高","通知送信"
"359","UT-COM-159","common.notifications.trigger_notification","","正常系","最近送信済みの場合スキップされること","同じ通知が24時間以内に送信済み","check_recent=True","通知がスキップされる","高","重複通知防止"
"360","UT-COM-160","common.notifications.trigger_notification","","正常系","非アクティブユーザーが除外されること","非アクティブユーザーをターゲットに含む","targets=[inactive_user]","非アクティブユーザーには通知されない","高","非アクティブユーザー除外"
"361","UT-COM-161","common.notifications.trigger_notification","","正常系","Groupインスタンスがユーザーに展開されること","Groupをターゲットに指定","targets=[group]","グループ内の全ユーザーに通知される","中","グループ展開"
"362","UT-COM-162","common.notifications.trigger_notification","","正常系","Ownerインスタンスがユーザーに展開されること","Ownerをターゲットに指定","targets=[owner]","Ownerの関連ユーザーに通知される","中","Owner展開"
"363","UT-COM-163","common.icons.get_icon_packs","","正常系","アイコンパックが返却されること","アイコンファイルが存在","なし","アイコンパック辞書が返却される","中","アイコンパック取得"
"364","UT-COM-164","common.icons.reload_icon_packs","","正常系","アイコンパックが再読み込みされること","アイコンパックがキャッシュ済み","なし","キャッシュがクリアされ再読み込みされる","低","アイコンパック再読み込み"
"365","UT-COM-165","common.icons.validate_icon","","正常系","有効なアイコンで検証成功","有効なアイコン形式","pack:name:variant","(IconPack, Icon, variant)が返却される","中","アイコンバリデーション"
"366","UT-COM-166","common.icons.validate_icon","","異常系","無効なフォーマットでValidationErrorがスローされること","コロン区切りでない","invalid_format","ValidationErrorがスローされる","中","フォーマットバリデーション"
"367","UT-COM-167","common.icons.validate_icon","","異常系","無効なパックでValidationErrorがスローされること","存在しないパック","invalid_pack:name:variant","ValidationErrorがスローされる","中","パックバリデーション"
"368","UT-COM-168","common.icons.validate_icon","","異常系","無効なアイコン名でValidationErrorがスローされること","存在しないアイコン名","ti:invalid_name:outline","ValidationErrorがスローされる","中","アイコン名バリデーション"
"369","UT-COM-169","common.icons.validate_icon","","異常系","無効なバリアントでValidationErrorがスローされること","存在しないバリアント","ti:home:invalid_variant","ValidationErrorがスローされる","中","バリアントバリデーション"
"370","UT-COM-170","common.settings.get_global_setting","","正常系","設定値が取得できること","設定が存在","key=""TEST_KEY""","設定値が返却される","高","設定取得"
"371","UT-COM-171","common.settings.get_global_setting","","正常系","環境変数からオーバーライド値が取得できること","環境変数が設定済み","environment_key=""ENV_KEY""","環境変数の値が返却される","高","環境変数オーバーライド"
"372","UT-COM-172","common.settings.set_global_setting","","正常系","設定値が設定されること","データベースが利用可能","key=""TEST_KEY"", value=""value""","設定値が更新される","高","設定更新"
"373","UT-COM-173","common.settings.set_global_warning","","正常系","グローバル警告が設定されること","データベースが利用可能","key=""WARNING_CODE""","警告が設定される","中","警告設定"
"374","UT-COM-174","common.settings.set_global_warning","","異常系","キー未指定でValueErrorがスローされること","キーがNone","key=None","ValueErrorがスローされる","中","キーバリデーション"
"375","UT-COM-175","common.settings.stock_expiry_enabled","","正常系","在庫期限機能の有効/無効が返却されること","STOCK_ENABLE_EXPIRY設定済み","なし","True/Falseが返却される","中","機能フラグ取得"
"376","UT-COM-176","common.tasks.cleanup_old_data_outputs","","正常系","5日以上前の出力が削除されること","古いDataOutputが存在","なし","古いDataOutputが削除される","中","古いデータ削除"
"377","UT-COM-177","common.tasks.delete_old_notifications","","正常系","90日以上前の通知エントリが削除されること","古いNotificationEntryが存在","なし","古いNotificationEntryが削除される","中","古い通知削除"
"378","UT-COM-178","common.tasks.update_news_feed","","正常系","ニュースフィードが更新されること","INVENTREE_NEWS_URLが設定済み","なし","新しいニュースエントリが作成される","低","ニュースフィード更新"
"379","UT-COM-179","common.tasks.update_news_feed","","正常系","既存のニュースエントリがスキップされること","同じfeed_idが存在","なし","重複エントリが作成されない","低","重複エントリ防止"
"380","UT-COM-180","common.tasks.delete_old_notes_images","","正常系","リンクされていない古い画像が削除されること","90日以上前の未リンク画像が存在","なし","未リンク画像が削除される","中","未リンク画像削除"
"381","UT-COM-181","common.tasks.delete_old_notes_images","","正常系","存在しないファイルへの参照が削除されること","ファイルが存在しない参照が存在","なし","参照が削除される","中","孤児参照削除"
"382","UT-COM-182","common.tasks.rebuild_parameters","","正常系","テンプレート変更時にパラメータが再計算されること","ParameterTemplateが更新済み","template_id","関連パラメータのdata_numericが更新される","高","パラメータ再計算"
"383","UT-COM-183","common.serializers.SettingsValueField","to_representation","正常系","保護された設定で***が返却されること","protected=True","なし","***が返却される","高","保護値のマスキング"
"384","UT-COM-184","common.serializers.SettingsValueField","to_representation","正常系","ブール値がネイティブ型で返却されること","is_bool=True, value=""True""","なし","Trueが返却される","中","型変換"
"385","UT-COM-185","common.serializers.SettingsValueField","to_representation","正常系","整数値がネイティブ型で返却されること","is_int=True, value=""42""","なし","42が返却される","中","型変換"
"386","UT-COM-186","common.serializers.SettingsValueField","to_internal_value","正常系","Noneが空文字に変換されること","value=None","なし","空文字が返却される","中","Null処理"
"387","UT-COM-187","common.serializers.SettingsSerializer","is_valid","正常系","確認が必要な設定で確認なしでエラーがスローされること","confirm=True, manual_confirm未提供","なし","ValidationErrorがスローされる","高","確認必須バリデーション"
"388","UT-COM-188","common.serializers.AttachmentSerializer","save","正常系","有効なモデルタイプで保存できること","model_typeが有効","model_type=""part""","正常に保存される","高","添付保存"
"389","UT-COM-189","common.serializers.AttachmentSerializer","save","異常系","権限不足でPermissionDeniedがスローされること","change権限がない","user without permission","PermissionDeniedがスローされる","高","権限チェック"
"390","UT-COM-190","common.serializers.SelectionListSerializer","is_valid","正常系","選択肢が個別にバリデーションされること","choices配列が提供","choices=[{...}]","各選択肢がバリデーションされる","中","選択肢バリデーション"
"391","UT-COM-191","common.serializers.SelectionListSerializer","create","正常系","選択リストと選択肢が作成されること","有効なデータ","name, choices","SelectionListとEntryが作成される","中","作成処理"
"392","UT-COM-192","common.serializers.SelectionListSerializer","update","正常系","選択リストと選択肢が更新されること","既存のSelectionList","更新データ","SelectionListとEntryが更新される","中","更新処理"
"393","UT-COM-193","common.serializers.SelectionListSerializer","validate","異常系","ロックされたリストでValidationErrorがスローされること","locked=True","更新データ","ValidationErrorがスローされる","高","ロック状態チェック"
"394","UT-COM-194","common.serializers.ParameterSerializer","save","正常系","パラメータが保存されること","有効なデータ","template, model_type, data","Parameterが保存される","高","パラメータ保存"
"395","UT-COM-195","common.serializers.ParameterSerializer","save","異常系","無効なモデルタイプでPermissionDeniedがスローされること","無効なmodel_type","model_type=無効","PermissionDeniedがスローされる","高","モデルタイプバリデーション"
"396","UT-COM-196","common.serializers.ParameterSerializer","save","異常系","権限不足でPermissionDeniedがスローされること","change権限がない","user without permission","PermissionDeniedがスローされる","高","権限チェック"
"397","UT-COM-001","company.models.Company","__str__","正常系","企業名と説明が正しく連結されること","Companyインスタンスが存在","name=""TestCo"", description=""A test company""","TestCo - A test companyが返却される","低","文字列表現"
"398","UT-COM-002","company.models.Company","get_api_url","正常系","API URLが正しく返却されること","なし","なし","api-company-listのURLが返却される","低","静的メソッド"
"399","UT-COM-003","company.models.Company","report_context","正常系","レポートコンテキストが正しく生成されること","Companyインスタンスが存在","company, name, description, website, phone, email","辞書形式のコンテキストが返却される","中","レポート機能"
"400","UT-COM-004","company.models.Company","address","正常系","プライマリアドレスの文字列が返却されること","Companyにプライマリアドレスが設定済み","なし","プライマリアドレスの文字列表現が返却される","中","後方互換性プロパティ"
"401","UT-COM-005","company.models.Company","address","異常系","プライマリアドレスがない場合Noneが返却されること","Companyにアドレスが未設定","なし","Noneが返却される","中","後方互換性プロパティ"
"402","UT-COM-006","company.models.Company","primary_address","正常系","プライマリアドレスオブジェクトが返却されること","Companyにprimary=Trueのアドレスが存在","なし","Addressオブジェクトが返却される","中","プロパティ"
"403","UT-COM-007","company.models.Company","primary_address","正常系","プリフェッチされたアドレスリストから取得できること","primary_address_list属性が存在","なし","リストの最初の要素が返却される","中","パフォーマンス最適化"
"404","UT-COM-008","company.models.Company","primary_address","境界値","プリフェッチリストが空の場合Noneが返却されること","primary_address_list=[]","なし","Noneが返却される","中","境界値テスト"
"405","UT-COM-009","company.models.Company","currency_code","正常系","設定された通貨コードが返却されること","currency=""USD""","なし","USDが返却される","高","通貨処理"
"406","UT-COM-010","company.models.Company","currency_code","異常系","無効な通貨コードの場合デフォルト通貨が返却されること","currency=""INVALID""","なし","デフォルト通貨コードが返却される","高","通貨バリデーション"
"407","UT-COM-011","company.models.Company","currency_code","境界値","空の通貨コードの場合デフォルト通貨が返却されること","currency=""""","なし","デフォルト通貨コードが返却される","高","通貨バリデーション"
"408","UT-COM-012","company.models.Company","parts","正常系","サプライヤーまたは製造業者のパーツが返却されること","関連するSupplierPartが存在","なし","SupplierPartのQuerySetが返却される","中","リレーションプロパティ"
"409","UT-COM-013","company.models.Company","parts","境界値","関連パーツがない場合空のQuerySetが返却されること","関連するSupplierPartが存在しない","なし","空のQuerySetが返却される","中","リレーションプロパティ"
"410","UT-COM-014","company.models.Company","stock_items","正常系","関連する在庫アイテムが返却されること","関連するStockItemが存在","なし","StockItemのQuerySetが返却される","中","リレーションプロパティ"
"411","UT-COM-015","company.models.Company","get_absolute_url","正常系","詳細ビューのURLが返却されること","Companyインスタンスが存在","pk=1","/purchasing/manufacturer/1を含むURLが返却される","低","URLプロパティ"
"412","UT-COM-016","company.models.Contact","get_api_url","正常系","Contact API URLが正しく返却されること","なし","なし","api-contact-listのURLが返却される","低","静的メソッド"
"413","UT-COM-017","company.models.Contact","company","正常系","関連するCompanyが取得できること","Contactが会社に関連付け済み","なし","Companyオブジェクトが返却される","中","ForeignKeyリレーション"
"414","UT-COM-018","company.models.Address","__str__","正常系","住所の文字列表現が正しく生成されること","すべてのフィールドに値がある","line1, line2, postal_code, postal_city, province, country","カンマ区切りの住所文字列が返却される","低","文字列表現"
"415","UT-COM-019","company.models.Address","__str__","境界値","空のフィールドが除外されること","一部フィールドのみに値がある","line1=""123 Main St"", country=""USA"", 他は空","123 Main St, USAが返却される","低","文字列表現"
"416","UT-COM-020","company.models.Address","save","正常系","最初のアドレスが自動的にプライマリになること","Companyにアドレスが存在しない","primary=False","primary=Trueで保存される","高","データ整合性"
"417","UT-COM-021","company.models.Address","save","正常系","プライマリ設定時に他のアドレスがnon-primaryになること","Companyに既存のプライマリアドレスが存在","primary=True","既存アドレスのprimary=Falseになる","高","データ整合性"
"418","UT-COM-022","company.models.Address","save","正常系","複数アドレスで新規プライマリ設定時の排他制御","複数のアドレスが存在","新しいアドレスでprimary=True","1つのみがprimary=Trueになる","高","データ整合性"
"419","UT-COM-023","company.models.Address","get_api_url","正常系","Address API URLが正しく返却されること","なし","なし","api-address-listのURLが返却される","低","静的メソッド"
"420","UT-COM-024","company.models.ManufacturerPart","get_api_url","正常系","ManufacturerPart API URLが正しく返却されること","なし","なし","api-manufacturer-part-listのURLが返却される","低","静的メソッド"
"421","UT-COM-025","company.models.ManufacturerPart","barcode_model_type_code","正常系","バーコードタイプコードMPが返却されること","なし","なし","MPが返却される","低","クラスメソッド"
"422","UT-COM-026","company.models.ManufacturerPart","create","正常系","新規ManufacturerPartが作成されること","同一のpart, manufacturer, MPNの組み合わせが存在しない","part, manufacturer, mpn, description","新しいManufacturerPartが作成される","高","ファクトリメソッド"
"423","UT-COM-027","company.models.ManufacturerPart","create","正常系","既存のManufacturerPartがある場合は既存を返却すること","同一のpart, manufacturer, MPNの組み合わせが存在","part, manufacturer, mpn, description","既存のManufacturerPartが返却される","高","ファクトリメソッド"
"424","UT-COM-028","company.models.ManufacturerPart","__str__","正常系","製造業者名とMPNが連結されること","manufacturerとMPNが設定済み","manufacturer.name=""Acme"", MPN=""MPN-001""","Acme | MPN-001が返却される","低","文字列表現"
"425","UT-COM-029","company.models.ManufacturerPart","__str__","異常系","manufacturerがnullの場合MPNのみ返却されること","manufacturer=None, MPN=""MPN-001""","なし","MPN-001が返却される","低","文字列表現"
"426","UT-COM-030","company.models.SupplierPart","get_api_url","正常系","SupplierPart API URLが正しく返却されること","なし","なし","api-supplier-part-listのURLが返却される","低","静的メソッド"
"427","UT-COM-031","company.models.SupplierPart","get_absolute_url","正常系","詳細ビューURLが返却されること","SupplierPartインスタンスが存在","pk=1","/purchasing/supplier-part/1を含むURLが返却される","低","URLプロパティ"
"428","UT-COM-032","company.models.SupplierPart","api_instance_filters","正常系","インスタンスフィルタが返却されること","SupplierPartにpartが関連付け済み","part.pk=5","{'manufacturer_part': {'part': 5}}が返却される","中","APIフィルタ"
"429","UT-COM-033","company.models.SupplierPart","barcode_model_type_code","正常系","バーコードタイプコードSPが返却されること","なし","なし","SPが返却される","低","クラスメソッド"
"430","UT-COM-034","company.models.SupplierPart","clean","正常系","空のpack_quantityが1に変換されること","pack_quantity=""""","なし","pack_quantity=1になる","高","バリデーション"
"431","UT-COM-035","company.models.SupplierPart","clean","正常系","pack_quantityの前後空白が除去されること","pack_quantity="" 10 ""","なし","pack_quantity=""10""になる","中","バリデーション"
"432","UT-COM-036","company.models.SupplierPart","clean","異常系","pack_quantityが0以下の場合バリデーションエラー","pack_quantity=""0""","なし","ValidationErrorがスローされる","高","バリデーション"
"433","UT-COM-037","company.models.SupplierPart","clean","異常系","pack_quantityが負の値の場合バリデーションエラー","pack_quantity=""-5""","なし","ValidationErrorがスローされる","高","バリデーション"
"434","UT-COM-038","company.models.SupplierPart","clean","異常系","manufacturer_part.partとpartが異なる場合バリデーションエラー","manufacturer_part.part != part","なし","ValidationErrorがスローされる","高","データ整合性"
"435","UT-COM-039","company.models.SupplierPart","clean","正常系","互換性のある単位のpack_quantityが正しく変換されること","part.units=""kg"", pack_quantity=""500g""","なし","pack_quantity_native=0.5になる","高","単位変換"
"436","UT-COM-040","company.models.SupplierPart","clean","異常系","互換性のない単位でバリデーションエラー","part.units=""kg"", pack_quantity=""5m""","なし","ValidationErrorがスローされる","高","単位変換バリデーション"
"437","UT-COM-041","company.models.SupplierPart","save","正常系","manufacturer情報からManufacturerPartが接続されること","manufacturer, MPNがkwargsで渡される","manufacturer=""Acme"", MPN=""MPN-001""","manufacturer_partが設定される","高","データ連携"
"438","UT-COM-042","company.models.SupplierPart","save","異常系","既にmanufacturer_partが設定済みの場合エラー","manufacturer_part既設定, kwargs含む","manufacturer=""Acme"", MPN=""MPN-001""","ValidationErrorがスローされる","高","データ整合性"
"439","UT-COM-043","company.models.SupplierPart","base_quantity","正常系","基本数量が正しく計算されること","pack_quantity_native=10","quantity=5","50が返却される","高","数量計算"
"440","UT-COM-044","company.models.SupplierPart","base_quantity","境界値","quantity=1の場合pack_quantity_nativeが返却されること","pack_quantity_native=10","quantity=1","10が返却される","中","数量計算"
"441","UT-COM-045","company.models.SupplierPart","base_quantity","境界値","quantity=0の場合0が返却されること","pack_quantity_native=10","quantity=0","0が返却される","中","数量計算"
"442","UT-COM-046","company.models.SupplierPart","name","正常系","nameプロパティが__str__と同じ値を返却すること","SupplierPartインスタンスが存在","なし","__str__と同じ文字列が返却される","低","プロパティ"
"443","UT-COM-047","company.models.SupplierPart","manufacturer_string","正常系","製造業者名とMPNが連結されること","manufacturer_partが設定済み","manufacturer.name=""Acme"", MPN=""MPN-001""","Acme | MPN-001が返却される","低","文字列プロパティ"
"444","UT-COM-048","company.models.SupplierPart","manufacturer_string","異常系","manufacturer_partがnullの場合空文字が返却されること","manufacturer_part=None","なし","空文字が返却される","低","文字列プロパティ"
"445","UT-COM-049","company.models.SupplierPart","has_price_breaks","正常系","価格区分がある場合Trueが返却されること","関連するSupplierPriceBreakが存在","なし","Trueが返却される","中","プロパティ"
"446","UT-COM-050","company.models.SupplierPart","has_price_breaks","境界値","価格区分がない場合Falseが返却されること","関連するSupplierPriceBreakが存在しない","なし","Falseが返却される","中","プロパティ"
"447","UT-COM-051","company.models.SupplierPart","price_breaks","正常系","価格区分が数量順でソートされて返却されること","複数のSupplierPriceBreakが存在","なし","quantity昇順のQuerySetが返却される","中","リレーションプロパティ"
"448","UT-COM-052","company.models.SupplierPart","unit_pricing","正常系","単価（数量1の価格）が返却されること","SupplierPriceBreakが存在","なし","数量1での価格が返却される","高","価格計算"
"449","UT-COM-053","company.models.SupplierPart","add_price_break","正常系","新規価格区分が追加されること","指定数量の価格区分が存在しない","quantity=100, price=Money(10, 'USD')","新しいSupplierPriceBreakが作成される","高","価格管理"
"450","UT-COM-054","company.models.SupplierPart","add_price_break","正常系","同一数量の価格区分が既存の場合追加されないこと","指定数量の価格区分が既存","quantity=100, price=Money(10, 'USD')","新規作成されない","中","重複防止"
"451","UT-COM-055","company.models.SupplierPart","open_orders","正常系","オープン状態の発注明細が返却されること","オープン状態のPurchaseOrderLineItemが存在","なし","PurchaseOrderLineItemのQuerySetが返却される","中","発注管理"
"452","UT-COM-056","company.models.SupplierPart","open_orders","境界値","オープン状態の発注がない場合空のQuerySetが返却されること","オープン状態のPurchaseOrderLineItemが存在しない","なし","空のQuerySetが返却される","中","発注管理"
"453","UT-COM-057","company.models.SupplierPart","on_order","正常系","発注中数量が正しく計算されること","quantity=100, received=30の発注明細が存在","なし","70が返却される","高","在庫管理"
"454","UT-COM-058","company.models.SupplierPart","on_order","境界値","発注明細がない場合0が返却されること","発注明細が存在しない","なし","0が返却される","中","在庫管理"
"455","UT-COM-059","company.models.SupplierPart","on_order","境界値","全数量受領済みの場合0が返却されること","quantity=100, received=100","なし","0が返却される","中","在庫管理"
"456","UT-COM-060","company.models.SupplierPart","purchase_orders","正常系","関連する発注書リストが返却されること","関連するPurchaseOrderが存在","なし","PurchaseOrderのリストが返却される","中","リレーション"
"457","UT-COM-061","company.models.SupplierPart","update_available_quantity","正常系","在庫数量と更新日時が更新されること","SupplierPartインスタンスが存在","quantity=500","available=500, availability_updatedが現在時刻になる","高","在庫更新"
"458","UT-COM-062","company.models.SupplierPart","pretty_name","正常系","pretty_nameが__str__と同じ値を返却すること","SupplierPartインスタンスが存在","なし","__str__と同じ文字列が返却される","低","プロパティ"
"459","UT-COM-063","company.models.SupplierPart","__str__","正常系","IPN、サプライヤー名、SKUが連結されること","part.IPN設定済み","part.IPN=""IPN-001"", supplier.name=""Supplier"", SKU=""SKU-001""","IPN-001 | Supplier | SKU-001が返却される","低","文字列表現"
"460","UT-COM-064","company.models.SupplierPart","__str__","正常系","IPNなしの場合サプライヤー名とSKUのみ","part.IPN未設定","supplier.name=""Supplier"", SKU=""SKU-001""","Supplier | SKU-001が返却される","低","文字列表現"
"461","UT-COM-065","company.models.SupplierPart","__str__","正常系","manufacturer_stringがある場合追加されること","manufacturer_part設定済み","manufacturer_string=""Acme | MPN-001""","末尾に | Acme | MPN-001が追加される","低","文字列表現"
"462","UT-COM-066","company.models.SupplierPriceBreak","get_api_url","正常系","SupplierPriceBreak API URLが正しく返却されること","なし","なし","api-part-supplier-price-listのURLが返却される","低","静的メソッド"
"463","UT-COM-067","company.models.SupplierPriceBreak","__str__","正常系","SKU、価格、数量が正しくフォーマットされること","part.SKU, price, quantity設定済み","SKU=""SKU-001"", price=100, quantity=10","SKU-001 - 100 @ 10が返却される","低","文字列表現"
"464","UT-COM-068","company.models.rename_company_image","","正常系","企業画像のリネームが正しく行われること","Companyインスタンスが存在","instance.pk=1, filename=""image.png""","company_images/company_1_img.pngが返却される","低","ヘルパー関数"
"465","UT-COM-069","company.models.rename_company_image","","境界値","拡張子なしのファイル名の場合拡張子なしで返却されること","Companyインスタンスが存在","instance.pk=1, filename=""image""","company_images/company_1_imgが返却される","低","ヘルパー関数"
"466","UT-COM-070","company.models.after_save_supplier_price","","正常系","価格保存後に部品の価格更新がスケジュールされること","SupplierPriceBreakがpart.partに関連付け済み","created=True","schedule_pricing_updateが呼び出される","高","シグナルハンドラ"
"467","UT-COM-071","company.models.after_delete_supplier_price","","正常系","価格削除後に部品の価格更新がスケジュールされること","SupplierPriceBreakがpart.partに関連付け済み","なし","schedule_pricing_updateが呼び出される","高","シグナルハンドラ"
"468","UT-COM-072","company.serializers.CompanySerializer","annotate_queryset","正常系","parts_manufactured, parts_suppliedアノテーションが追加されること","Companyクエリセット","なし","アノテーション付きクエリセットが返却される","中","クエリ最適化"
"469","UT-COM-073","company.serializers.CompanySerializer","save","正常系","リモート画像がダウンロードされて保存されること","remote_image_fileが設定済み","remote_img.format=""PNG""","画像ファイルが保存される","中","画像処理"
"470","UT-COM-074","company.serializers.SupplierPartSerializer","annotate_queryset","正常系","in_stock, on_orderアノテーションが追加されること","SupplierPartクエリセット","なし","アノテーション付きクエリセットが返却される","中","クエリ最適化"
"471","UT-COM-075","company.serializers.SupplierPartSerializer","update","正常系","available数量が更新されること","has_available_quantity=True","available=100","update_available_quantityが呼び出される","高","更新処理"
"472","UT-COM-076","company.serializers.SupplierPartSerializer","create","正常系","SupplierPartが作成されること","バリデーション済みデータ","validated_data","新しいSupplierPartが作成される","高","作成処理"
"473","UT-COM-077","company.serializers.SupplierPartSerializer","create","正常系","manufacturer, MPN情報でManufacturerPartが接続されること","initial_dataにmanufacturer, MPN含む","manufacturer, MPN","save時にkwargsが渡される","高","作成処理"
"474","UT-COM-078","company.serializers.SupplierPriceBreakSerializer","annotate_queryset","正常系","関連テーブルがselect_relatedされること","SupplierPriceBreakクエリセット","なし","最適化されたクエリセットが返却される","中","クエリ最適化"
"475","UT-COM-079","company.filters.annotate_on_order_quantity","","正常系","発注中数量のアノテーションが正しく計算されること","オープン状態の発注明細が存在","quantity=100, received=30","70が計算される","高","フィルタ関数"
"476","UT-COM-080","company.filters.annotate_on_order_quantity","","境界値","発注明細がない場合Decimal(0)が返却されること","発注明細が存在しない","なし","Decimal(0)が返却される","中","フィルタ関数"
"477","UT-COM-081","company.api.CompanyMixin","get_queryset","正常系","アノテーション付きクエリセットが返却されること","なし","なし","annotate_queryset適用済みクエリセットが返却される","中","APIミックスイン"
"478","UT-COM-082","company.api.SupplierPartFilter","filter_company","正常系","製造業者またはサプライヤーでフィルタされること","company_id指定","company=5","manufacturer_partまたはsupplierが5のレコードが返却される","中","APIフィルタ"
"479","UT-COM-083","company.api.SupplierPartFilter","filter_has_stock","正常系","在庫ありでフィルタされること","value=True","なし","in_stock > 0のレコードが返却される","中","APIフィルタ"
"480","UT-COM-084","company.api.SupplierPartFilter","filter_has_stock","正常系","在庫なしでフィルタされること","value=False","なし","in_stock <= 0のレコードが返却される","中","APIフィルタ"
"481","UT-COM-085","company.models.Company","UniqueConstraint","異常系","同一name,emailの組み合わせでエラーとなること","既存のCompany(name,email)が存在","同じname,email","IntegrityErrorがスローされる","高","一意制約"
"482","UT-COM-086","company.models.ManufacturerPart","unique_together","異常系","同一part,manufacturer,MPNの組み合わせでエラーとなること","既存のManufacturerPartが存在","同じpart,manufacturer,MPN","IntegrityErrorがスローされる","高","一意制約"
"483","UT-COM-087","company.models.SupplierPart","unique_together","異常系","同一part,supplier,SKUの組み合わせでエラーとなること","既存のSupplierPartが存在","同じpart,supplier,SKU","IntegrityErrorがスローされる","高","一意制約"
"484","UT-COM-088","company.models.SupplierPriceBreak","unique_together","異常系","同一part,quantityの組み合わせでエラーとなること","既存のSupplierPriceBreakが存在","同じpart,quantity","IntegrityErrorがスローされる","高","一意制約"
"485","UT-COM-089","company.models.Company","is_customer","正常系","is_customerフラグが正しく保存されること","なし","is_customer=True","is_customer=Trueで保存される","中","フラグフィールド"
"486","UT-COM-090","company.models.Company","is_supplier","正常系","is_supplierフラグが正しく保存されること","なし","is_supplier=True","is_supplier=Trueで保存される","中","フラグフィールド"
"487","UT-COM-091","company.models.Company","is_manufacturer","正常系","is_manufacturerフラグが正しく保存されること","なし","is_manufacturer=True","is_manufacturer=Trueで保存される","中","フラグフィールド"
"488","UT-COM-092","company.models.Company","active","正常系","activeフラグのデフォルト値がTrueであること","新規Company作成","active未指定","active=Trueで保存される","中","フラグフィールド"
"489","UT-COM-093","company.models.SupplierPart","active","正常系","activeフラグのデフォルト値がTrueであること","新規SupplierPart作成","active未指定","active=Trueで保存される","中","フラグフィールド"
"490","UT-COM-094","company.models.SupplierPart","multiple","正常系","multipleのデフォルト値が1であること","新規SupplierPart作成","multiple未指定","multiple=1で保存される","中","数値フィールド"
"491","UT-COM-095","company.models.SupplierPart","multiple","異常系","multiple=0でバリデーションエラーとなること","なし","multiple=0","ValidationErrorがスローされる","高","バリデーション"
"492","UT-COM-096","company.models.SupplierPart","base_cost","正常系","base_costのデフォルト値が0であること","新規SupplierPart作成","base_cost未指定","base_cost=0で保存される","中","数値フィールド"
"493","UT-COM-097","company.models.SupplierPart","base_cost","異常系","負のbase_costでバリデーションエラーとなること","なし","base_cost=-10","ValidationErrorがスローされる","高","バリデーション"
"494","UT-COM-098","company.models.SupplierPart","available","正常系","availableのデフォルト値が0であること","新規SupplierPart作成","available未指定","available=0で保存される","中","数値フィールド"
"495","UT-COM-099","company.models.SupplierPart","available","異常系","負のavailableでバリデーションエラーとなること","なし","available=-10","ValidationErrorがスローされる","高","バリデーション"
"496","UT-COM-100","company.models.Company","contacts","正常系","関連するContactが取得できること","Companyに関連するContactが存在","なし","ContactのQuerySetが返却される","中","リレーション"
"497","UT-COM-101","company.models.Company","addresses","正常系","関連するAddressが取得できること","Companyに関連するAddressが存在","なし","AddressのQuerySetが返却される","中","リレーション"
"498","UT-COM-102","company.models.Company","manufactured_parts","正常系","関連するManufacturerPartが取得できること","Companyに関連するManufacturerPartが存在","なし","ManufacturerPartのQuerySetが返却される","中","リレーション"
"499","UT-COM-103","company.models.Company","supplied_parts","正常系","関連するSupplierPartが取得できること","Companyに関連するSupplierPartが存在","なし","SupplierPartのQuerySetが返却される","中","リレーション"
"500","UT-COM-104","company.models.ManufacturerPart","supplier_parts","正常系","関連するSupplierPartが取得できること","ManufacturerPartに関連するSupplierPartが存在","なし","SupplierPartのQuerySetが返却される","中","リレーション"
"501","UT-COM-105","company.models.SupplierPart","pricebreaks","正常系","関連するSupplierPriceBreakが取得できること","SupplierPartに関連するSupplierPriceBreakが存在","なし","SupplierPriceBreakのQuerySetが返却される","中","リレーション"
"502","UT-IMP-001","importer.models.DataImportSession","save","正常系","新規セッション作成時に初期設定が実行されること","なし","data_file=有効なCSVファイル, model_type=""company""","status=INITIAL, progress=0, extract_columnsが呼び出される","高","初期化ロジックの検証"
"503","UT-IMP-002","importer.models.DataImportSession","save","正常系","既存セッション更新時は初期設定がスキップされること","既存のDataImportSessionが存在","既存セッションを更新","extract_columnsが呼び出されない","中","更新時の挙動確認"
"504","UT-IMP-003","importer.models.DataImportSession","get_api_url","正常系","正しいAPI URLが返却されること","なし","なし","reverse('api-importer-session-list')の値が返却される","低","静的メソッド検証"
"505","UT-IMP-004","importer.models.DataImportSession","field_mapping","正常系","フィールドマッピングが正しく構築されること","column_mappingsに複数のマッピングが存在","なし","{field: column}形式の辞書が返却される","高","プロパティ検証"
"506","UT-IMP-005","importer.models.DataImportSession","field_mapping","境界値","マッピングが空の場合に空辞書が返却されること","column_mappingsが空","なし","空の辞書{}が返却される","中","境界値検証"
"507","UT-IMP-006","importer.models.DataImportSession","model_class","正常系","シリアライザからモデルクラスが取得できること","有効なmodel_typeが設定済み","model_type=""company""","Companyモデルクラスが返却される","中","プロパティ検証"
"508","UT-IMP-007","importer.models.DataImportSession","model_class","異常系","無効なmodel_typeでNoneが返却されること","無効なmodel_typeが設定済み","model_type=""invalid""","Noneが返却される","中","異常系検証"
"509","UT-IMP-008","importer.models.DataImportSession","serializer_class","正常系","サポートされたモデルのシリアライザが返却されること","有効なmodel_typeが設定済み","model_type=""company""","CompanySerializerが返却される","中","プロパティ検証"
"510","UT-IMP-009","importer.models.DataImportSession","extract_columns","正常系","CSVファイルからカラム名が抽出されること","有効なCSVファイルがアップロード済み","CSVファイル(ヘッダー:Name,Description,Active)","columns=[""Name"",""Description"",""Active""]","高","カラム抽出ロジック"
"511","UT-IMP-010","importer.models.DataImportSession","extract_columns","正常系","フィールドとカラムのマッピングが自動生成されること","有効なCSVファイルがアップロード済み","シリアライザフィールドに一致するカラム名","DataImportColumnMapオブジェクトが作成される","高","自動マッピング機能"
"512","UT-IMP-011","importer.models.DataImportSession","extract_columns","正常系","大文字小文字を無視してマッピングされること","有効なCSVファイルがアップロード済み","カラム名=""NAME""(大文字), フィールド名=""name""(小文字)","正しくマッピングされる","中","大文字小文字の無視"
"513","UT-IMP-012","importer.models.DataImportSession","extract_columns","正常系","ステータスがMAPPINGに更新されること","新規セッション","extract_columns実行","status=DataImportStatusCode.MAPPING","高","ステータス遷移"
"514","UT-IMP-013","importer.models.DataImportSession","extract_columns","正常系","field_overridesに含まれるフィールドはマッピングがスキップされること","field_overrides={""name"":""Test""}","extract_columns実行","nameフィールドのマッピングが作成されない","中","オーバーライド動作"
"515","UT-IMP-014","importer.models.DataImportSession","accept_mapping","正常系","全ての必須フィールドがマッピングされている場合にインポートが開始されること","全必須フィールドがマッピング済み","accept_mapping呼び出し","trigger_data_importが呼び出される","高","マッピング受け入れ"
"516","UT-IMP-015","importer.models.DataImportSession","accept_mapping","異常系","必須フィールドが未マッピングの場合にValidationErrorが発生すること","必須フィールドが未マッピング","accept_mapping呼び出し","ValidationError(fields=[未マッピングフィールド])","高","バリデーションエラー"
"517","UT-IMP-016","importer.models.DataImportSession","accept_mapping","正常系","デフォルト値が設定されている場合はマッピング不要であること","必須フィールドにデフォルト値が設定済み","accept_mapping呼び出し","エラーなしでインポート開始","中","デフォルト値による補完"
"518","UT-IMP-017","importer.models.DataImportSession","accept_mapping","正常系","オーバーライド値が設定されている場合はマッピング不要であること","必須フィールドにオーバーライド値が設定済み","accept_mapping呼び出し","エラーなしでインポート開始","中","オーバーライド値による補完"
"519","UT-IMP-018","importer.models.DataImportSession","trigger_data_import","正常系","ステータスがIMPORTINGに更新されること","有効なセッション","trigger_data_import呼び出し","status=DataImportStatusCode.IMPORTING","高","ステータス遷移"
"520","UT-IMP-019","importer.models.DataImportSession","trigger_data_import","正常系","バックグラウンドタスクがオフロードされること","有効なセッション","trigger_data_import呼び出し","offload_taskが呼び出される","高","非同期タスク"
"521","UT-IMP-020","importer.models.DataImportSession","import_data","正常系","データファイルからDataImportRowが作成されること","有効なCSVファイル(12行)","import_data呼び出し","12個のDataImportRowが作成される","高","データインポート"
"522","UT-IMP-021","importer.models.DataImportSession","import_data","正常系","空行がスキップされること","CSVファイルに空行を含む","import_data呼び出し","空行はDataImportRowとして作成されない","中","空行処理"
"523","UT-IMP-022","importer.models.DataImportSession","import_data","正常系","ステータスがPROCESSINGに更新されること","有効なセッション","import_data完了後","status=DataImportStatusCode.PROCESSING","高","ステータス遷移"
"524","UT-IMP-023","importer.models.DataImportSession","import_data","異常系","データファイル読み込み失敗時にログが出力されること","破損したデータファイル","import_data呼び出し","エラーログが出力される","中","エラーハンドリング"
"525","UT-IMP-024","importer.models.DataImportSession","check_complete","正常系","全行完了時にTrueが返却されること","全DataImportRowがcomplete=True","check_complete呼び出し","Trueが返却される","高","完了チェック"
"526","UT-IMP-025","importer.models.DataImportSession","check_complete","正常系","全行完了時にステータスがCOMPLETEに更新されること","全DataImportRowがcomplete=True","check_complete呼び出し","status=DataImportStatusCode.COMPLETE","高","ステータス遷移"
"527","UT-IMP-026","importer.models.DataImportSession","check_complete","正常系","未完了行がある場合にFalseが返却されること","一部のDataImportRowがcomplete=False","check_complete呼び出し","Falseが返却される","中","未完了チェック"
"528","UT-IMP-027","importer.models.DataImportSession","row_count","正常系","正しい行数が返却されること","5行のDataImportRowが存在","row_countプロパティ取得","5が返却される","中","行数カウント"
"529","UT-IMP-028","importer.models.DataImportSession","completed_row_count","正常系","完了行数が正しく返却されること","5行中3行がcomplete=True","completed_row_countプロパティ取得","3が返却される","中","完了行数カウント"
"530","UT-IMP-029","importer.models.DataImportSession","available_fields","正常系","シリアライザのフィールド情報が返却されること","有効なmodel_type","available_fields呼び出し","OrderedDictでフィールド情報が返却される","中","フィールド情報取得"
"531","UT-IMP-030","importer.models.DataImportSession","available_fields","正常系","update_records=Trueの場合にIDフィールドが含まれること","update_records=True","available_fields呼び出し","'id'フィールドが含まれる","高","レコード更新モード"
"532","UT-IMP-031","importer.models.DataImportSession","available_fields","正常系","フィールド情報がキャッシュされること","available_fieldsを2回呼び出し","2回目の呼び出し","キャッシュされた値が返却される","低","キャッシュ機能"
"533","UT-IMP-032","importer.models.DataImportSession","required_fields","正常系","必須フィールドのみが返却されること","required=Trueのフィールドが存在","required_fields呼び出し","required=Trueのフィールドのみ返却される","中","必須フィールド抽出"
"534","UT-IMP-033","importer.models.DataImportSession","required_fields","正常系","update_records=Trueの場合にIDフィールドが必須になること","update_records=True","required_fields呼び出し","'id'フィールドがrequired_fieldsに含まれる","高","レコード更新モード"
"535","UT-IMP-034","importer.models.DataImportColumnMap","save","正常系","バリデーションが実行されること","有効なマッピング","save呼び出し","cleanとvalidate_uniqueが呼び出される","高","保存時バリデーション"
"536","UT-IMP-035","importer.models.DataImportColumnMap","validate_unique","異常系","同一カラムの重複マッピングでエラーが発生すること","同一sessionで同一columnが既にマッピング済み","同じcolumnで新規マッピング作成","ValidationError(column)","高","一意性制約"
"537","UT-IMP-036","importer.models.DataImportColumnMap","validate_unique","異常系","同一フィールドの重複マッピングでエラーが発生すること","同一sessionで同一fieldが既にマッピング済み","同じfieldで新規マッピング作成","ValidationError(field)","高","一意性制約"
"538","UT-IMP-037","importer.models.DataImportColumnMap","validate_unique","正常系","空カラムは重複チェックがスキップされること","column=''のマッピングが複数存在","空カラムで新規マッピング作成","エラーなし","中","空カラム許可"
"539","UT-IMP-038","importer.models.DataImportColumnMap","clean","異常系","sessionがNullの場合にエラーが発生すること","session=None","clean呼び出し","ValidationError(session)","高","必須チェック"
"540","UT-IMP-039","importer.models.DataImportColumnMap","clean","異常系","存在しないカラム名でエラーが発生すること","columnがsession.columnsに存在しない","column=""invalid_column""","ValidationError(column)","高","カラム存在チェック"
"541","UT-IMP-040","importer.models.DataImportColumnMap","clean","異常系","存在しないフィールドでエラーが発生すること","fieldがavailable_fieldsに存在しない","field=""invalid_field""","ValidationError(field)","高","フィールド存在チェック"
"542","UT-IMP-041","importer.models.DataImportColumnMap","clean","異常系","read_onlyフィールドでエラーが発生すること","fieldがread_only=Trueのフィールド","field=""pk""","ValidationError(field)","高","読み取り専用チェック"
"543","UT-IMP-042","importer.models.DataImportColumnMap","get_api_url","正常系","正しいAPI URLが返却されること","なし","なし","reverse('api-importer-mapping-list')の値が返却される","低","静的メソッド検証"
"544","UT-IMP-043","importer.models.DataImportColumnMap","available_fields","正常系","セッションのフィールド情報が返却されること","有効なsession","available_fieldsプロパティ取得","session.available_fields()の値が返却される","中","プロパティ検証"
"545","UT-IMP-044","importer.models.DataImportColumnMap","available_fields","正常系","フィールド情報がキャッシュされること","available_fieldsを2回取得","2回目の取得","キャッシュされた値が返却される","低","キャッシュ機能"
"546","UT-IMP-045","importer.models.DataImportColumnMap","field_definition","正常系","フィールド定義が返却されること","有効なfield名","field=""name""","フィールドの定義辞書が返却される","中","プロパティ検証"
"547","UT-IMP-046","importer.models.DataImportColumnMap","field_definition","境界値","存在しないフィールドでNoneが返却されること","fieldが無効","field=""invalid""","Noneが返却される","中","境界値検証"
"548","UT-IMP-047","importer.models.DataImportColumnMap","label","正常系","フィールドのラベルが返却されること","有効なfield","field=""name""","フィールドのlabel属性値が返却される","低","プロパティ検証"
"549","UT-IMP-048","importer.models.DataImportColumnMap","description","正常系","フィールドの説明が返却されること","有効なfield、help_textが設定済み","field=""name""","help_textの値が返却される","低","プロパティ検証"
"550","UT-IMP-049","importer.models.DataImportColumnMap","description","正常系","help_textがない場合はlabelが返却されること","有効なfield、help_textが未設定","field=""name""","labelの値が返却される","低","フォールバック動作"
"551","UT-IMP-050","importer.models.DataImportRow","save","正常系","保存時にvalidateが実行されること","有効なDataImportRow","save呼び出し","validateが呼び出されvalidフィールドが設定される","高","保存時バリデーション"
"552","UT-IMP-051","importer.models.DataImportRow","get_api_url","正常系","正しいAPI URLが返却されること","なし","なし","reverse('api-importer-row-list')の値が返却される","低","静的メソッド検証"
"553","UT-IMP-052","importer.models.DataImportRow","default_values","正常系","セッションのデフォルト値が返却されること","session.field_defaults={""name"":""Default""}","default_valuesプロパティ取得","{""name"":""Default""}が返却される","中","プロパティ検証"
"554","UT-IMP-053","importer.models.DataImportRow","default_values","境界値","field_defaultsがNoneの場合に空辞書が返却されること","session.field_defaults=None","default_valuesプロパティ取得","{}が返却される","中","Null処理"
"555","UT-IMP-054","importer.models.DataImportRow","default_values","異常系","不正なJSON文字列の場合に空辞書が返却されること","session.field_defaults=""invalid_json""","default_valuesプロパティ取得","{}が返却される","中","エラーハンドリング"
"556","UT-IMP-055","importer.models.DataImportRow","override_values","正常系","セッションのオーバーライド値が返却されること","session.field_overrides={""active"":True}","override_valuesプロパティ取得","{""active"":True}が返却される","中","プロパティ検証"
"557","UT-IMP-056","importer.models.DataImportRow","override_values","境界値","field_overridesがNoneの場合に空辞書が返却されること","session.field_overrides=None","override_valuesプロパティ取得","{}が返却される","中","Null処理"
"558","UT-IMP-057","importer.models.DataImportRow","extract_data","正常系","行データからフィールドデータが抽出されること","有効なrow_dataとfield_mapping","extract_data呼び出し","self.dataにマッピングされたデータが設定される","高","データ抽出"
"559","UT-IMP-058","importer.models.DataImportRow","extract_data","正常系","オーバーライド値が最優先で使用されること","override_values={""name"":""Override""}","extract_data呼び出し","data[""name""]==""Override""","高","オーバーライド優先"
"560","UT-IMP-059","importer.models.DataImportRow","extract_data","正常系","デフォルト値が使用されること","default_values={""active"":True}、row_dataにactiveがない","extract_data呼び出し","data[""active""]==True","中","デフォルト値適用"
"561","UT-IMP-060","importer.models.DataImportRow","extract_data","正常系","booleanフィールドが正しく変換されること","field_type=""boolean""","row_data={""active"":""true""}","data[""active""]==True","中","型変換"
"562","UT-IMP-061","importer.models.DataImportRow","extract_data","正常系","dateフィールドでNone値が保持されること","field_type=""date""","row_data={""date"":""""}","data[""date""]==None","中","日付型処理"
"563","UT-IMP-062","importer.models.DataImportRow","extract_data","正常系","choiceフィールドで値がマッチすること","field_type=""choice""、choices=[{value:1,display_name:""Active""}]","row_data={""status"":""Active""}","data[""status""]==1","中","選択肢マッチング"
"564","UT-IMP-063","importer.models.DataImportRow","extract_data","正常系","choiceフィールドで大文字小文字を無視してマッチすること","field_type=""choice""","row_data={""status"":""ACTIVE""}","正しい値にマッチする","中","大文字小文字無視"
"565","UT-IMP-064","importer.models.DataImportRow","extract_data","正常系","commit=Trueの場合に保存されること","有効なデータ","extract_data(commit=True)","self.saveが呼び出される","中","コミットオプション"
"566","UT-IMP-065","importer.models.DataImportRow","extract_data","正常系","commit=Falseの場合は保存されないこと","有効なデータ","extract_data(commit=False)","self.saveが呼び出されない","中","コミットオプション"
"567","UT-IMP-066","importer.models.DataImportRow","serializer_data","正常系","シリアライザ用データが正しく構築されること","default_values、data、override_valuesが設定済み","serializer_data呼び出し","default→data→overrideの順でマージされた辞書","高","データ構築"
"568","UT-IMP-067","importer.models.DataImportRow","serializer_data","正常系","オーバーライド値が最優先されること","override_values={""name"":""Override""}、data={""name"":""Data""}","serializer_data呼び出し","name==""Override""","高","優先順位検証"
"569","UT-IMP-068","importer.models.DataImportRow","construct_serializer","正常系","シリアライザインスタンスが作成されること","有効なsession.serializer_class","construct_serializer呼び出し","シリアライザインスタンスが返却される","中","シリアライザ生成"
"570","UT-IMP-069","importer.models.DataImportRow","construct_serializer","正常系","update時にinstanceが渡されること","instance引数あり","construct_serializer(instance=obj)","シリアライザにinstanceが設定される","中","更新モード"
"571","UT-IMP-070","importer.models.DataImportRow","construct_serializer","異常系","serializer_classがNoneの場合Noneが返却されること","session.serializer_class=None","construct_serializer呼び出し","Noneが返却される","中","異常系検証"
"572","UT-IMP-071","importer.models.DataImportRow","validate","正常系","有効なデータでTrueが返却されること","有効なデータ","validate呼び出し","Trueが返却される、errors=None","高","バリデーション成功"
"573","UT-IMP-072","importer.models.DataImportRow","validate","正常系","complete=Trueの場合にTrueが即座に返却されること","complete=True","validate呼び出し","Trueが返却される","中","完了済みスキップ"
"574","UT-IMP-073","importer.models.DataImportRow","validate","異常系","バリデーションエラー時にFalseが返却されること","無効なデータ","validate呼び出し","Falseが返却される、errorsにエラー詳細","高","バリデーション失敗"
"575","UT-IMP-074","importer.models.DataImportRow","validate","異常系","シリアライザがない場合にFalseが返却されること","session.serializer_class=None","validate呼び出し","Falseが返却される、non_field_errorsにエラー","中","異常系検証"
"576","UT-IMP-075","importer.models.DataImportRow","validate","正常系","commit=Trueでシリアライザが保存されること","有効なデータ","validate(commit=True)","serializer.saveが呼び出される、complete=True","高","コミット処理"
"577","UT-IMP-076","importer.models.DataImportRow","validate","正常系","commit=True完了後にcheck_completeが呼び出されること","有効なデータ","validate(commit=True)","session.check_completeが呼び出される","中","完了チェック連携"
"578","UT-IMP-077","importer.models.DataImportRow","validate","異常系","update_records時にIDが必須であること","session.update_records=True、data.id=None","validate呼び出し","ValidationError(ID is required)","高","レコード更新モード"
"579","UT-IMP-078","importer.models.DataImportRow","validate","異常系","update_records時に存在しないIDでエラーになること","session.update_records=True、data.id=99999(存在しない)","validate呼び出し","Falseが返却される、errors[non_field_errors]","高","存在チェック"
"580","UT-IMP-079","importer.models.DataImportRow","validate","異常系","update_records時に不正なID形式でエラーになること","session.update_records=True、data.id=""invalid""","validate呼び出し","Falseが返却される、errors[non_field_errors]","高","ID形式チェック"
"581","UT-IMP-080","importer.mixins.DataImportSerializerMixin","__init__","正常系","importing=Trueでインポート不可フィールドが除外されること","importing=True","シリアライザ初期化","read_onlyフィールドなどが除外される","高","フィールド除外"
"582","UT-IMP-081","importer.mixins.DataImportSerializerMixin","__init__","正常系","importing=Falseでimport_only_fieldsが除外されること","importing=False","シリアライザ初期化","import_only_fieldsが除外される","中","通常モード"
"583","UT-IMP-082","importer.mixins.DataImportSerializerMixin","__init__","正常系","importing=Trueでimport_exclude_fieldsが除外されること","importing=True、import_exclude_fields=[""field1""]","シリアライザ初期化","field1が除外される","中","除外フィールド"
"584","UT-IMP-083","importer.mixins.DataImportSerializerMixin","get_import_only_fields","正常系","import_only_fieldsリストが返却されること","import_only_fields=[""field1""]","get_import_only_fields呼び出し","[""field1""]が返却される","低","メソッド検証"
"585","UT-IMP-084","importer.mixins.DataImportSerializerMixin","get_import_exclude_fields","正常系","import_exclude_fieldsリストが返却されること","import_exclude_fields=[""field1""]","get_import_exclude_fields呼び出し","[""field1""]が返却される","低","メソッド検証"
"586","UT-IMP-085","importer.mixins.DataImportSerializerMixin","get_importable_fields","正常系","インポート可能フィールドが返却されること","複数フィールドを持つシリアライザ","get_importable_fields呼び出し","read_only以外のフィールドが返却される","高","フィールド抽出"
"587","UT-IMP-086","importer.mixins.DataImportSerializerMixin","get_importable_fields","正常系","read_onlyフィールドが除外されること","read_only=Trueのフィールドが存在","get_importable_fields呼び出し","read_onlyフィールドが含まれない","高","除外ロジック"
"588","UT-IMP-087","importer.mixins.DataImportSerializerMixin","get_importable_fields","正常系","Serializerサブクラスフィールドが除外されること","ネストされたシリアライザフィールドが存在","get_importable_fields呼び出し","ネストされたシリアライザが含まれない","中","除外ロジック"
"589","UT-IMP-088","importer.mixins.DataImportSerializerMixin","get_importable_fields","正常系","FileFieldが除外されること","FileFieldが存在","get_importable_fields呼び出し","FileFieldが含まれない","中","除外ロジック"
"590","UT-IMP-089","importer.mixins.DataImportSerializerMixin","get_importable_fields","正常系","TagListSerializerFieldが除外されること","TagListSerializerFieldが存在","get_importable_fields呼び出し","TagListSerializerFieldが含まれない","中","除外ロジック"
"591","UT-IMP-090","importer.validators.validate_data_file","","正常系","有効なファイルでエラーが発生しないこと","有効なCSVファイル","validate_data_file(file)","エラーなし","高","バリデーション成功"
"592","UT-IMP-091","importer.validators.validate_data_file","","異常系","ファイルサイズ超過でエラーが発生すること","ファイルサイズ > IMPORTER_MAX_FILE_SIZE","validate_data_file(large_file)","ValidationError(Data file exceeds maximum size limit)","高","サイズ制限"
"593","UT-IMP-092","importer.validators.validate_data_file","","異常系","ヘッダーがないファイルでエラーが発生すること","ヘッダーのないCSVファイル","validate_data_file(no_header_file)","ValidationError(Data file contains no headers)","高","ヘッダーチェック"
"594","UT-IMP-093","importer.validators.validate_data_file","","異常系","カラム数超過でエラーが発生すること","カラム数 > IMPORTER_MAX_COLS(1000)","validate_data_file(many_cols_file)","ValidationError(Data file contains too many columns)","高","カラム数制限"
"595","UT-IMP-094","importer.validators.validate_data_file","","異常系","行数超過でエラーが発生すること","行数 > IMPORTER_MAX_ROWS(5000)","validate_data_file(many_rows_file)","ValidationError(Data file contains too many rows)","高","行数制限"
"596","UT-IMP-095","importer.validators.validate_importer_model_type","","正常系","サポートされたモデルタイプでエラーが発生しないこと","model_type=""company""","validate_importer_model_type(""company"")","エラーなし","高","モデルタイプ検証"
"597","UT-IMP-096","importer.validators.validate_importer_model_type","","異常系","サポートされていないモデルタイプでエラーが発生すること","model_type=""invalid""","validate_importer_model_type(""invalid"")","ValidationError(Unsupported model type)","高","モデルタイプ検証"
"598","UT-IMP-097","importer.validators.validate_field_defaults","","正常系","有効な辞書でエラーが発生しないこと","value={""name"":""Test""}","validate_field_defaults({""name"":""Test""})","エラーなし","中","辞書検証"
"599","UT-IMP-098","importer.validators.validate_field_defaults","","正常系","Noneでエラーが発生しないこと","value=None","validate_field_defaults(None)","エラーなし","中","Null許可"
"600","UT-IMP-099","importer.validators.validate_field_defaults","","正常系","JSON文字列が受け入れられること","value='{""name"":""Test""}'","validate_field_defaults('{""name"":""Test""}')","エラーなし","中","JSON文字列"
"601","UT-IMP-100","importer.validators.validate_field_defaults","","異常系","不正なJSON文字列でエラーが発生すること","value=""invalid""","validate_field_defaults(""invalid"")","ValidationError(Value must be a valid dictionary object)","中","不正JSON"
"602","UT-IMP-101","importer.operations.load_data_file","","正常系","CSVファイルが正しく読み込まれること","有効なCSVファイル","load_data_file(csv_file)","tablibのDatasetが返却される","高","ファイル読み込み"
"603","UT-IMP-102","importer.operations.load_data_file","","正常系","Excelファイルが正しく読み込まれること","有効なXLSXファイル","load_data_file(xlsx_file)","tablibのDatasetが返却される","高","Excelサポート"
"604","UT-IMP-103","importer.operations.load_data_file","","正常系","ファイル拡張子から形式が判定されること","file.csv","load_data_file(file)","CSV形式として読み込まれる","中","形式判定"
"605","UT-IMP-104","importer.operations.load_data_file","","異常系","サポートされていない形式でエラーが発生すること","file.txt","load_data_file(txt_file)","ValidationError(Unsupported data file format)","高","形式チェック"
"606","UT-IMP-105","importer.operations.load_data_file","","異常系","ファイル読み込みエラー時に例外が発生すること","読み込み不可のファイル","load_data_file(unreadable_file)","ValidationError(Failed to open data file)","中","エラーハンドリング"
"607","UT-IMP-106","importer.operations.load_data_file","","異常系","不正なデータ形式でエラーが発生すること","不正なCSV形式","load_data_file(invalid_csv)","ValidationError(Unsupported data file format/Invalid data file dimensions)","中","データ形式エラー"
"608","UT-IMP-107","importer.operations.extract_column_names","","正常系","カラム名が正しく抽出されること","有効なCSV(ヘッダー:Name,Description)","extract_column_names(file)","[""Name"",""Description""]","高","カラム抽出"
"609","UT-IMP-108","importer.operations.extract_column_names","","正常系","空ヘッダーにデフォルト名が付与されること","ヘッダーに空列を含むCSV","extract_column_names(file)","空列は""Column N""形式になる","中","デフォルト名"
"610","UT-IMP-109","importer.operations.extract_column_names","","正常系","ヘッダーの前後空白がトリムされること","ヘッダーに空白を含むCSV","extract_column_names(file)","空白が除去されたヘッダー名","低","トリム処理"
"611","UT-IMP-110","importer.operations.get_field_label","","正常系","フィールドのラベルが返却されること","field.label=""Name""","get_field_label(field)","Name","低","ラベル取得"
"612","UT-IMP-111","importer.operations.get_field_label","","境界値","ラベルがない場合にNoneが返却されること","field.label=None","get_field_label(field)","None","低","Null処理"
"613","UT-IMP-112","importer.registry.DataImportSerializerRegister","register","正常系","有効なシリアライザが登録されること","DataImportSerializerMixinを継承したシリアライザ","register(serializer)","supported_serializersに追加される","高","シリアライザ登録"
"614","UT-IMP-113","importer.registry.DataImportSerializerRegister","register","異常系","DataImportSerializerMixinを継承していない場合は登録されないこと","通常のシリアライザ","register(serializer)","supported_serializersに追加されない","中","継承チェック"
"615","UT-IMP-114","importer.registry.DataImportSerializerRegister","register","異常系","Serializerを継承していない場合は登録されないこと","Serializer以外のクラス","register(cls)","supported_serializersに追加されない","中","型チェック"
"616","UT-IMP-115","importer.registry.DataImportSerializerRegister","register","正常系","重複登録が防止されること","同じシリアライザを2回登録","register(serializer)×2","1回のみ登録される","中","重複防止"
"617","UT-IMP-116","importer.registry.get_supported_serializers","","正常系","登録済みシリアライザ一覧が返却されること","複数のシリアライザが登録済み","get_supported_serializers()","登録済みシリアライザのリスト","中","一覧取得"
"618","UT-IMP-117","importer.registry.supported_models","","正常系","モデル名とシリアライザのマップが返却されること","複数のシリアライザが登録済み","supported_models()","{model_name: serializer}形式の辞書","中","モデルマップ"
"619","UT-IMP-118","importer.registry.supported_model_options","","正常系","モデル選択肢一覧が返却されること","複数のシリアライザが登録済み","supported_model_options()","[(model_name,verbose_name)]形式のリスト","中","選択肢生成"
"620","UT-IMP-119","importer.registry.register_importer","","正常系","デコレータでシリアライザが登録されること","@register_importer()を付与","デコレータ適用","シリアライザが登録される","高","デコレータ機能"
"621","UT-IMP-120","importer.tasks.import_data","","正常系","セッションのimport_dataが呼び出されること","有効なsession_id","import_data(session_id)","session.import_dataが呼び出される","高","タスク実行"
"622","UT-IMP-121","importer.tasks.import_data","","異常系","存在しないsession_idでエラーログが出力されること","存在しないsession_id","import_data(9999)","エラーログが出力される、例外なし","中","エラーハンドリング"
"623","UT-IMP-122","importer.tasks.cleanup_import_sessions","","正常系","古いセッションが削除されること","5日以上前のセッションが存在","cleanup_import_sessions()","古いセッションが削除される","中","クリーンアップ"
"624","UT-IMP-123","importer.tasks.cleanup_import_sessions","","正常系","新しいセッションは削除されないこと","5日以内のセッションのみ存在","cleanup_import_sessions()","セッションが削除されない","中","保持期間"
"625","UT-IMP-124","importer.tasks.cleanup_import_sessions","","正常系","前回実行から5日未満の場合はスキップされること","前回実行から3日経過","cleanup_import_sessions()","削除処理がスキップされる","低","実行間隔"
"626","UT-IMP-125","importer.serializers.DataImportSessionSerializer","validate_field_defaults","正常系","辞書型がそのまま返却されること","defaults={""name"":""Test""}","validate_field_defaults({""name"":""Test""})","{""name"":""Test""}が返却される","中","辞書検証"
"627","UT-IMP-126","importer.serializers.DataImportSessionSerializer","validate_field_defaults","正常系","Noneがそのまま返却されること","defaults=None","validate_field_defaults(None)","Noneが返却される","中","Null許可"
"628","UT-IMP-127","importer.serializers.DataImportSessionSerializer","validate_field_defaults","正常系","JSON文字列がパースされること","defaults='{""name"":""Test""}'","validate_field_defaults('string')","{""name"":""Test""}が返却される","中","JSON変換"
"629","UT-IMP-128","importer.serializers.DataImportSessionSerializer","validate_field_defaults","異常系","不正なJSON文字列でエラーが発生すること","defaults=""invalid""","validate_field_defaults(""invalid"")","ValidationError(Invalid field defaults)","中","バリデーション"
"630","UT-IMP-129","importer.serializers.DataImportSessionSerializer","validate_field_overrides","正常系","辞書型がそのまま返却されること","overrides={""active"":True}","validate_field_overrides({""active"":True})","{""active"":True}が返却される","中","辞書検証"
"631","UT-IMP-130","importer.serializers.DataImportSessionSerializer","validate_field_overrides","異常系","不正なJSON文字列でエラーが発生すること","overrides=""invalid""","validate_field_overrides(""invalid"")","ValidationError(Invalid field overrides)","中","バリデーション"
"632","UT-IMP-131","importer.serializers.DataImportSessionSerializer","validate_field_filters","正常系","辞書型がそのまま返却されること","filters={""status"":1}","validate_field_filters({""status"":1})","{""status"":1}が返却される","中","辞書検証"
"633","UT-IMP-132","importer.serializers.DataImportSessionSerializer","validate_field_filters","異常系","不正なJSON文字列でエラーが発生すること","filters=""invalid""","validate_field_filters(""invalid"")","ValidationError(Invalid field filters)","中","バリデーション"
"634","UT-IMP-133","importer.serializers.DataImportSessionSerializer","create","正常系","セッションにユーザーが設定されること","request.user=authenticated_user","create(validated_data)","session.user=request.userが設定される","高","ユーザー設定"
"635","UT-IMP-134","importer.serializers.DataImportSessionSerializer","create","正常系","requestがない場合もセッションが作成されること","request=None","create(validated_data)","セッションが作成される、user=None","中","リクエストなし"
"636","UT-IMP-135","importer.serializers.DataImportAcceptRowSerializer","validate_rows","異常系","空のrowsリストでエラーが発生すること","rows=[]","validate_rows([])","ValidationError(No rows provided)","高","空チェック"
"637","UT-IMP-136","importer.serializers.DataImportAcceptRowSerializer","validate_rows","異常系","別セッションの行でエラーが発生すること","row.session!=context.session","validate_rows([row])","ValidationError(Row does not belong to this session)","高","セッションチェック"
"638","UT-IMP-137","importer.serializers.DataImportAcceptRowSerializer","validate_rows","異常系","無効な行でエラーが発生すること","row.valid=False","validate_rows([row])","ValidationError(Row contains invalid data)","高","有効性チェック"
"639","UT-IMP-138","importer.serializers.DataImportAcceptRowSerializer","validate_rows","異常系","完了済み行でエラーが発生すること","row.complete=True","validate_rows([row])","ValidationError(Row has already been completed)","高","完了チェック"
"640","UT-IMP-139","importer.serializers.DataImportAcceptRowSerializer","save","正常系","全行のvalidateがcommit=Trueで呼び出されること","有効なrows","save()","各rowでvalidate(commit=True)が呼び出される","高","保存処理"
"641","UT-IMP-140","importer.serializers.DataImportAcceptRowSerializer","save","正常系","完了後にcheck_completeが呼び出されること","有効なrows、session存在","save()","session.check_completeが呼び出される","中","完了チェック連携"
"642","UT-IMP-141","importer.status_codes.DataImportStatusCode","INITIAL","正常系","初期状態の値が正しいこと","なし","DataImportStatusCode.INITIAL.value","0","低","ステータスコード"
"643","UT-IMP-142","importer.status_codes.DataImportStatusCode","MAPPING","正常系","マッピング状態の値が正しいこと","なし","DataImportStatusCode.MAPPING.value","10","低","ステータスコード"
"644","UT-IMP-143","importer.status_codes.DataImportStatusCode","IMPORTING","正常系","インポート状態の値が正しいこと","なし","DataImportStatusCode.IMPORTING.value","20","低","ステータスコード"
"645","UT-IMP-144","importer.status_codes.DataImportStatusCode","PROCESSING","正常系","処理状態の値が正しいこと","なし","DataImportStatusCode.PROCESSING.value","30","低","ステータスコード"
"646","UT-IMP-145","importer.status_codes.DataImportStatusCode","COMPLETE","正常系","完了状態の値が正しいこと","なし","DataImportStatusCode.COMPLETE.value","40","低","ステータスコード"
"647","UT-INV-001","InvenTree.models.DiffMixin","get_db_instance","正常系","データベースに保存されたインスタンスが取得できること","pkが存在するインスタンス","self.pk=1","データベースから取得したインスタンスが返却される","中","変更検知用Mixin"
"648","UT-INV-002","InvenTree.models.DiffMixin","get_db_instance","異常系","pkがNoneの場合Noneが返却されること","新規インスタンス（未保存）","self.pk=None","Noneが返却される","中",""
"649","UT-INV-003","InvenTree.models.DiffMixin","get_db_instance","異常系","存在しないpkの場合Noneが返却されること","削除されたインスタンス","self.pk=9999（存在しない）","Noneが返却される","中",""
"650","UT-INV-004","InvenTree.models.DiffMixin","get_field_deltas","正常系","フィールドの変更差分が正しく検出されること","既存インスタンスのフィールドを変更","name='old' -> 'new'","{'name': {'old': 'old', 'new': 'new'}}が返却される","高","データ変更追跡の重要機能"
"651","UT-INV-005","InvenTree.models.DiffMixin","get_field_deltas","境界値","変更がない場合空の辞書が返却されること","フィールド変更なし","変更なし","{}が返却される","中",""
"652","UT-INV-006","InvenTree.models.DiffMixin","has_field_changed","正常系","特定フィールドの変更有無が正しく判定されること","nameフィールドを変更","field_name='name'","Trueが返却される","中",""
"653","UT-INV-007","InvenTree.models.PluginValidationMixin","run_plugin_validation","正常系","プラグインバリデーションが正常に実行されること","ValidationMixinを持つプラグインが登録済み","有効なモデルインスタンス","例外なく完了する","高","プラグイン連携"
"654","UT-INV-008","InvenTree.models.PluginValidationMixin","run_plugin_validation","異常系","プラグインがValidationErrorを発生させた場合に伝播すること","バリデーションエラーを返すプラグイン","無効なモデルインスタンス","ValidationErrorが発生する","高",""
"655","UT-INV-009","InvenTree.models.PluginValidationMixin","full_clean","正常系","full_clean時にプラグインバリデーションが実行されること","プラグインが登録済み","有効なモデルインスタンス","プラグインバリデーションが実行される","高",""
"656","UT-INV-010","InvenTree.models.PluginValidationMixin","save","正常系","save時にプラグインバリデーションが実行されること","プラグインが登録済み","有効なモデルインスタンス","保存前にプラグインバリデーションが実行される","高",""
"657","UT-INV-011","InvenTree.models.PluginValidationMixin","delete","正常系","delete時にプラグインによる削除防止チェックが実行されること","ValidationMixinを持つプラグイン","削除対象インスタンス","validate_model_deletionが呼ばれる","高",""
"658","UT-INV-012","InvenTree.models.MetadataMixin","validate_metadata","正常系","metadataがdict型の場合検証が通ること","metadata={'key': 'value'}","dict型のmetadata","例外なく完了する","中","メタデータ管理"
"659","UT-INV-013","InvenTree.models.MetadataMixin","validate_metadata","異常系","metadataがdict型でない場合ValidationErrorが発生すること","metadata='invalid'","文字列型のmetadata","ValidationErrorが発生する","高",""
"660","UT-INV-014","InvenTree.models.MetadataMixin","validate_metadata","境界値","metadataがNoneの場合空の辞書に初期化されること","metadata=None","None","metadataが{}に設定される","中",""
"661","UT-INV-015","InvenTree.models.MetadataMixin","get_metadata","正常系","指定キーのメタデータが取得できること","metadata={'plugin_a': {'setting': 'value'}}","key='plugin_a'","{'setting': 'value'}が返却される","中",""
"662","UT-INV-016","InvenTree.models.MetadataMixin","get_metadata","境界値","存在しないキーの場合バックアップ値が返却されること","metadata={'plugin_a': {}}","key='plugin_b', backup_value='default'","'default'が返却される","中",""
"663","UT-INV-017","InvenTree.models.MetadataMixin","set_metadata","正常系","メタデータが正しく保存されること","空のmetadata","key='plugin_a', data={'setting': 'value'}","metadata['plugin_a']に値が設定される","中",""
"664","UT-INV-018","InvenTree.models.MetadataMixin","set_metadata","正常系","overwrite=Trueで既存メタデータが上書きされること","既存のmetadata","overwrite=True","metadataが初期化後に新しい値が設定される","中",""
"665","UT-INV-019","InvenTree.models.ReferenceIndexingMixin","get_reference_pattern","正常系","参照パターンが正しく取得できること","REFERENCE_PATTERN_SETTINGが設定済み","なし","設定されたパターン文字列が返却される","中","参照番号管理"
"666","UT-INV-020","InvenTree.models.ReferenceIndexingMixin","get_next_reference","正常系","次の参照番号が正しく計算されること","既存アイテムが存在","なし","インクリメントされた参照番号が返却される","高",""
"667","UT-INV-021","InvenTree.models.ReferenceIndexingMixin","get_next_reference","境界値","アイテムが存在しない場合1が返却されること","アイテムなし","なし","1が返却される","中",""
"668","UT-INV-022","InvenTree.models.ReferenceIndexingMixin","generate_reference","正常系","参照番号が正しく生成されること","パターンとコンテキストが設定済み","なし","パターンに従った参照番号が生成される","高",""
"669","UT-INV-023","InvenTree.models.ReferenceIndexingMixin","validate_reference_pattern","正常系","有効なパターンが検証を通過すること","なし","pattern='PO-{ref:04d}'","例外なく完了する","高",""
"670","UT-INV-024","InvenTree.models.ReferenceIndexingMixin","validate_reference_pattern","異常系","refキーがないパターンでValidationErrorが発生すること","なし","pattern='PO-{other}'","ValidationErrorが発生する","高",""
"671","UT-INV-025","InvenTree.models.ReferenceIndexingMixin","validate_reference_field","正常系","有効な参照値が検証を通過すること","パターン='PO-{ref}'","value='PO-123'","例外なく完了する","高",""
"672","UT-INV-026","InvenTree.models.ReferenceIndexingMixin","validate_reference_field","異常系","空の参照値でValidationErrorが発生すること","なし","value=''","ValidationErrorが発生する","高",""
"673","UT-INV-027","InvenTree.models.ReferenceIndexingMixin","rebuild_reference_field","正常系","参照値から整数部分が正しく抽出されること","なし","reference='PO-123-ABC'","123が返却される","中",""
"674","UT-INV-028","InvenTree.models.ReferenceIndexingMixin","rebuild_reference_field","境界値","BigIntegerFieldの最大値を超える場合ValidationErrorが発生すること","validate=True","reference='99999999999999999999'","ValidationErrorが発生する","高",""
"675","UT-INV-029","InvenTree.models.InvenTreeParameterMixin","parameters","正常系","パラメータ一覧が正しく取得できること","パラメータが関連付けられている","なし","パラメータのQuerySetが返却される","中","パラメータ管理"
"676","UT-INV-030","InvenTree.models.InvenTreeParameterMixin","copy_parameters_from","正常系","他のインスタンスからパラメータがコピーされること","コピー元にパラメータが存在","other=別のインスタンス","パラメータがコピーされる","中",""
"677","UT-INV-031","InvenTree.models.InvenTreeParameterMixin","copy_parameters_from","正常系","clear=Trueで既存パラメータが削除されること","既存パラメータあり","clear=True","既存パラメータが削除後にコピーされる","中",""
"678","UT-INV-032","InvenTree.models.InvenTreeParameterMixin","get_parameter","正常系","名前でパラメータが取得できること","パラメータ'weight'が存在","name='weight'","対応するParameterインスタンスが返却される","中",""
"679","UT-INV-033","InvenTree.models.InvenTreeParameterMixin","get_parameter","境界値","存在しないパラメータ名でNoneが返却されること","パラメータ'weight'が存在しない","name='weight'","Noneが返却される","中",""
"680","UT-INV-034","InvenTree.models.InvenTreeParameterMixin","parameters_map","正常系","パラメータのマップが正しく生成されること","複数パラメータが存在","なし","{'name1': 'value1', 'name2': 'value2'}形式の辞書が返却される","中",""
"681","UT-INV-035","InvenTree.models.InvenTreeAttachmentMixin","attachments","正常系","添付ファイル一覧が取得できること","添付ファイルが関連付けられている","なし","AttachmentのQuerySetが返却される","中","添付ファイル管理"
"682","UT-INV-036","InvenTree.models.InvenTreeAttachmentMixin","create_attachment","正常系","添付ファイルが作成されること","なし","attachment=ファイル, comment='test'","Attachmentインスタンスが作成される","中",""
"683","UT-INV-037","InvenTree.models.InvenTreeAttachmentMixin","delete","正常系","削除時に関連添付ファイルも削除されること","添付ファイルが関連付けられている","なし","インスタンスと添付ファイルが削除される","高",""
"684","UT-INV-038","InvenTree.models.InvenTreeTree","save","正常系","ツリーノードが正しく保存されること","親ノードが存在","parent=親ノード","tree_idとlevelが正しく設定される","高","MPTTツリー管理"
"685","UT-INV-039","InvenTree.models.InvenTreeTree","save","異常系","無効な親への移動でValidationErrorが発生すること","自身を親に設定","parent=self","ValidationErrorが発生する","高",""
"686","UT-INV-040","InvenTree.models.InvenTreeTree","delete","正常系","delete_children=Trueで子ノードも削除されること","子ノードが存在","delete_children=True","子ノードも削除される","高",""
"687","UT-INV-041","InvenTree.models.InvenTreeTree","delete","正常系","delete_children=Falseで子ノードが親に移動すること","子ノードが存在","delete_children=False","子ノードの親が更新される","高",""
"688","UT-INV-042","InvenTree.models.InvenTreeTree","delete","正常系","delete_items=Trueで関連アイテムも削除されること","関連アイテムが存在","delete_items=True","関連アイテムも削除される","高",""
"689","UT-INV-043","InvenTree.models.InvenTreeTree","getNextTreeID","正常系","次のtree_idが正しく計算されること","既存ツリーが存在","なし","最大tree_id + 1が返却される","中",""
"690","UT-INV-044","InvenTree.models.InvenTreeTree","getNextTreeID","境界値","ツリーが存在しない場合1が返却されること","ツリーなし","なし","1が返却される","中",""
"691","UT-INV-045","InvenTree.models.InvenTreeTree","partial_rebuild","正常系","部分的なツリー再構築が成功すること","有効なtree_id","tree_id=1","Trueが返却される","中",""
"692","UT-INV-046","InvenTree.models.InvenTreeTree","partial_rebuild","異常系","再構築失敗時にFalseが返却されエラーログが記録されること","無効なtree_id","tree_id=None","Falseが返却される","中",""
"693","UT-INV-047","InvenTree.models.PathStringMixin","construct_pathstring","正常系","パス文字列が正しく構築されること","親ノードが存在","refresh=True","'Parent/Child'形式の文字列が返却される","中","パス文字列管理"
"694","UT-INV-048","InvenTree.models.PathStringMixin","validate_unique","正常系","ユニーク制約が検証されること","同名の兄弟ノードなし","name='unique'","例外なく完了する","高",""
"695","UT-INV-049","InvenTree.models.PathStringMixin","validate_unique","異常系","同じ親の下に同名ノードが存在する場合ValidationErrorが発生すること","同名の兄弟ノードあり","name='duplicate'","ValidationErrorが発生する","高",""
"696","UT-INV-050","InvenTree.models.PathStringMixin","path","正常系","ルートからのパスリストが正しく取得できること","3階層のノード","なし","[root, parent, self]のリストが返却される","中",""
"697","UT-INV-051","InvenTree.models.InvenTreeNotesMixin","delete","正常系","削除時に関連するNotesImageも削除されること","NotesImageが関連付けられている","なし","インスタンスとNotesImageが削除される","中","ノート管理"
"698","UT-INV-052","InvenTree.models.InvenTreeBarcodeMixin","barcode_model_type","正常系","モデルタイプ名が小文字で返却されること","なし","なし","クラス名の小文字が返却される","中","バーコード管理"
"699","UT-INV-053","InvenTree.models.InvenTreeBarcodeMixin","format_barcode","正常系","バーコード文字列が正しく生成されること","有効なインスタンス","なし","バーコード文字列が返却される","高",""
"700","UT-INV-054","InvenTree.models.InvenTreeBarcodeMixin","lookup_barcode","正常系","バーコードハッシュでインスタンスが検索できること","barcode_hash='abc123'のインスタンスが存在","barcode_hash='abc123'","対応するインスタンスが返却される","高",""
"701","UT-INV-055","InvenTree.models.InvenTreeBarcodeMixin","lookup_barcode","境界値","存在しないバーコードハッシュでNoneが返却されること","該当インスタンスなし","barcode_hash='notexist'","Noneが返却される","中",""
"702","UT-INV-056","InvenTree.models.InvenTreeBarcodeMixin","assign_barcode","正常系","バーコードが正しく割り当てられること","重複なし","barcode_data='123456'","barcode_hashが設定される","高",""
"703","UT-INV-057","InvenTree.models.InvenTreeBarcodeMixin","assign_barcode","異常系","既存バーコードと重複する場合ValidationErrorが発生すること","同じbarcode_hashが存在","barcode_hash='duplicate'","ValidationErrorが発生する","高",""
"704","UT-INV-058","InvenTree.models.InvenTreeBarcodeMixin","unassign_barcode","正常系","バーコードが正しく解除されること","バーコードが割り当て済み","なし","barcode_dataとbarcode_hashが空になる","中",""
"705","UT-INV-059","InvenTree.models.InvenTreeImageMixin","get_image_url","正常系","画像URLが正しく返却されること","画像が設定済み","なし","画像のURLが返却される","中","画像管理"
"706","UT-INV-060","InvenTree.models.InvenTreeImageMixin","get_image_url","境界値","画像が未設定の場合ブランク画像URLが返却されること","画像なし","なし","blank_image.pngのURLが返却される","中",""
"707","UT-INV-061","InvenTree.models.InvenTreeImageMixin","get_thumbnail_url","正常系","サムネイルURLが正しく返却されること","画像が設定済み","なし","サムネイルのURLが返却される","中",""
"708","UT-INV-062","InvenTree.helpers.extract_int","","正常系","文字列から整数が正しく抽出されること","なし","reference='ABC123'","123が返却される","高","ヘルパー関数"
"709","UT-INV-063","InvenTree.helpers.extract_int","","境界値","空文字列の場合0が返却されること","なし","reference=''","0が返却される","中",""
"710","UT-INV-064","InvenTree.helpers.extract_int","","正常系","16進数文字列が正しく変換されること","なし","reference='0xFF', try_hex=True","255が返却される","中",""
"711","UT-INV-065","InvenTree.helpers.extract_int","","境界値","clipパラメータで最大値が制限されること","なし","reference='99999', clip=100","100が返却される","中",""
"712","UT-INV-066","InvenTree.helpers.increment","","正常系","数値文字列が正しくインクリメントされること","なし","value='001'","'002'が返却される","高",""
"713","UT-INV-067","InvenTree.helpers.increment","","正常系","プレフィックス付き文字列がインクリメントされること","なし","value='AB01'","'AB02'が返却される","高",""
"714","UT-INV-068","InvenTree.helpers.increment","","境界値","空文字列の場合'1'が返却されること","なし","value=''","'1'が返却される","中",""
"715","UT-INV-069","InvenTree.helpers.increment","","境界値","数値なし文字列の場合そのまま返却されること","なし","value='QQQ'","'QQQ'が返却される","中",""
"716","UT-INV-070","InvenTree.helpers.str2bool","","正常系","真を表す文字列がTrueと判定されること","なし","text='yes', test=True","Trueが返却される","中",""
"717","UT-INV-071","InvenTree.helpers.str2bool","","正常系","偽を表す文字列がTrueと判定されること（test=False）","なし","text='no', test=False","Trueが返却される","中",""
"718","UT-INV-072","InvenTree.helpers.normalize","","正常系","Decimal値が正規化されること","なし","d=Decimal('1.000')","Decimal('1')が返却される","中",""
"719","UT-INV-073","InvenTree.helpers.normalize","","正常系","roundingパラメータで桁数が制限されること","なし","d=Decimal('1.23456'), rounding=2","Decimal('1.23')が返却される","中",""
"720","UT-INV-074","InvenTree.helpers.clean_decimal","","正常系","カンマ区切り数値が正しく変換されること","なし","number='1,234.56'","Decimal('1234.56')が返却される","中",""
"721","UT-INV-075","InvenTree.helpers.clean_decimal","","正常系","ヨーロッパ形式の数値が正しく変換されること","なし","number='1.234,56'","Decimal('1234.56')が返却される","中",""
"722","UT-INV-076","InvenTree.helpers.clean_decimal","","異常系","無効な文字列の場合Decimal(0)が返却されること","なし","number='invalid'","Decimal('0')が返却される","中",""
"723","UT-INV-077","InvenTree.helpers.hash_barcode","","正常系","バーコードデータのハッシュが生成されること","なし","barcode_data='12345'","MD5ハッシュ文字列が返却される","高",""
"724","UT-INV-078","InvenTree.helpers.strip_html_tags","","正常系","HTMLタグが除去されること","なし","value='<b>test</b>'","'test'が返却される","高","セキュリティ関連"
"725","UT-INV-079","InvenTree.helpers.strip_html_tags","","異常系","HTMLタグ検出時にValidationErrorが発生すること","raise_error=True","value='<script>alert()</script>'","ValidationErrorが発生する","高",""
"726","UT-INV-080","InvenTree.helpers.validateFilterString","","正常系","有効なフィルター文字列が解析されること","なし","value='category=6, IPN=12'","{'category': '6', 'IPN': '12'}が返却される","高","フィルター処理"
"727","UT-INV-081","InvenTree.helpers.validateFilterString","","異常系","不正なフィルター文字列でValidationErrorが発生すること","なし","value='invalid'","ValidationErrorが発生する","高",""
"728","UT-INV-082","InvenTree.helpers.extract_serial_numbers","","正常系","シリアル番号リストが正しく抽出されること","なし","input_string='1,2,3', expected_quantity=3","['1','2','3']が返却される","高","シリアル番号管理"
"729","UT-INV-083","InvenTree.helpers.extract_serial_numbers","","正常系","範囲指定が正しく展開されること","なし","input_string='1-5', expected_quantity=5","['1','2','3','4','5']が返却される","高",""
"730","UT-INV-084","InvenTree.helpers.extract_serial_numbers","","正常系","プラス記号による連続生成が正しく動作すること","なし","input_string='1+', expected_quantity=3","['1','2','3']が返却される","高",""
"731","UT-INV-085","InvenTree.helpers.extract_serial_numbers","","異常系","重複シリアル番号でValidationErrorが発生すること","なし","input_string='1,1,2', expected_quantity=3","ValidationErrorが発生する","高",""
"732","UT-INV-086","InvenTree.helpers.extract_serial_numbers","","異常系","数量不一致でValidationErrorが発生すること","なし","input_string='1,2', expected_quantity=3","ValidationErrorが発生する","高",""
"733","UT-INV-087","InvenTree.helpers.extract_serial_numbers","","境界値","1000件を超える場合ValidationErrorが発生すること","なし","expected_quantity=1001","ValidationErrorが発生する","高",""
"734","UT-INV-088","InvenTree.helpers_model.get_base_url","","正常系","リクエストからベースURLが取得できること","リクエストオブジェクトあり","request=HttpRequest","リクエストのベースURLが返却される","中","URL構築"
"735","UT-INV-089","InvenTree.helpers_model.get_base_url","","正常系","設定からベースURLが取得できること","SITE_URL設定あり","request=None","設定のベースURLが返却される","中",""
"736","UT-INV-090","InvenTree.helpers_model.construct_absolute_url","","正常系","絶対URLが正しく構築されること","ベースURLあり","relative_url='/api/part/'","完全なURLが返却される","中",""
"737","UT-INV-091","InvenTree.helpers_model.download_image_from_url","","正常系","リモートURLから画像がダウンロードされること","有効な画像URL","remote_url='https://example.com/image.png'","PILイメージが返却される","中","画像ダウンロード"
"738","UT-INV-092","InvenTree.helpers_model.download_image_from_url","","異常系","無効なURLでValidationErrorが発生すること","無効なURL","remote_url='invalid'","例外が発生する","高",""
"739","UT-INV-093","InvenTree.helpers_model.download_image_from_url","","異常系","サイズ超過でValueErrorが発生すること","大きすぎる画像","remote_url（大きな画像）","ValueErrorが発生する","高",""
"740","UT-INV-094","InvenTree.helpers_model.render_currency","","正常系","Money値が正しくフォーマットされること","なし","money=Money(100, 'USD')","フォーマットされた文字列が返却される","高","通貨処理"
"741","UT-INV-095","InvenTree.helpers_model.render_currency","","異常系","無効な値でValidationErrorが発生すること","なし","money='invalid'","ValidationErrorが発生する","高",""
"742","UT-INV-096","InvenTree.helpers_mixin.ClassValidationMixin","validate","正常系","必須属性がある場合検証が通過すること","required_attributesを定義","属性が定義済み","例外なく完了する","中","クラスバリデーション"
"743","UT-INV-097","InvenTree.helpers_mixin.ClassValidationMixin","validate","異常系","必須属性がない場合NotImplementedErrorが発生すること","required_attributes=['NAME']","NAMEが未定義","NotImplementedErrorが発生する","高",""
"744","UT-INV-098","InvenTree.tasks.schedule_task","","正常系","スケジュールタスクが正しく登録されること","Django-Qが利用可能","taskname='my_task'","Scheduleオブジェクトが作成される","中","タスクスケジューリング"
"745","UT-INV-099","InvenTree.tasks.schedule_task","","正常系","既存タスクが更新されること","同名タスクが存在","taskname='existing_task'","既存のScheduleが更新される","中",""
"746","UT-INV-100","InvenTree.tasks.offload_task","","正常系","ワーカー実行中の場合非同期タスクが作成されること","ワーカーが実行中","taskname='my_task'","AsyncTaskが作成される","高","タスク実行"
"747","UT-INV-101","InvenTree.tasks.offload_task","","正常系","ワーカー停止中の場合同期実行されること","ワーカーが停止中","taskname='my_task'","同期的に関数が実行される","高",""
"748","UT-INV-102","InvenTree.tasks.offload_task","","異常系","関数パスが不正な場合Falseが返却されること","なし","taskname='invalid.path'","Falseが返却される","中",""
"749","UT-INV-103","InvenTree.tasks.check_daily_holdoff","","正常系","前回成功から十分な時間が経過した場合Trueが返却されること","前回成功が2日前","task_name='test', n_days=1","Trueが返却される","中","定期タスク制御"
"750","UT-INV-104","InvenTree.tasks.check_daily_holdoff","","正常系","前回成功が最近の場合Falseが返却されること","前回成功が今日","task_name='test', n_days=1","Falseが返却される","中",""
"751","UT-INV-105","InvenTree.tasks.check_daily_holdoff","","境界値","n_days<=0の場合Falseが返却されること","なし","task_name='test', n_days=0","Falseが返却される","中",""
"752","UT-INV-106","InvenTree.tasks.heartbeat","","正常系","ハートビートタスクが正常に実行されること","Django-Qが利用可能","なし","古いハートビート結果が削除される","中","定期タスク"
"753","UT-INV-107","InvenTree.tasks.delete_successful_tasks","","正常系","古い成功タスクが削除されること","閾値より古いタスクが存在","なし","古いSuccessレコードが削除される","中",""
"754","UT-INV-108","InvenTree.tasks.delete_failed_tasks","","正常系","古い失敗タスクが削除されること","閾値より古いタスクが存在","なし","古いFailureレコードが削除される","中",""
"755","UT-INV-109","InvenTree.tasks.check_for_migrations","","正常系","マイグレーションがない場合Trueが返却されること","マイグレーション適用済み","なし","Trueが返却される","高","マイグレーション"
"756","UT-INV-110","InvenTree.tasks.check_for_migrations","","正常系","マイグレーションがある場合自動更新が実行されること","未適用マイグレーションあり, auto_update=True","なし","migrateコマンドが実行される","高",""
"757","UT-INV-111","InvenTree.serializers.InvenTreeModelSerializer","run_validation","正常系","モデルバリデーションが実行されること","有効なデータ","data={'name': 'test'}","検証済みデータが返却される","高","シリアライザ"
"758","UT-INV-112","InvenTree.serializers.InvenTreeModelSerializer","run_validation","異常系","無効なデータでValidationErrorが発生すること","無効なデータ","data={'name': ''}","ValidationErrorが発生する","高",""
"759","UT-INV-113","InvenTree.serializers.InvenTreeModelSerializer","skip_create_fields","正常系","スキップフィールドがcreate時に除外されること","skip_create_fields=['temp']","data={'temp': 'value'}","tempフィールドが除外される","中",""
"760","UT-INV-114","InvenTree.serializers.InvenTreeMoneySerializer","get_value","正常系","Money値が正しく取得されること","なし","data={'price': '100'}","Money(100, currency)が返却される","高","金額処理"
"761","UT-INV-115","InvenTree.serializers.InvenTreeMoneySerializer","get_value","異常系","無効な数値でValidationErrorが発生すること","なし","data={'price': 'invalid'}","ValidationErrorが発生する","高",""
"762","UT-INV-116","InvenTree.serializers.InvenTreeDecimalField","to_internal_value","正常系","Decimal値に正しく変換されること","なし","data='123.45'","Decimal('123.45')が返却される","中","数値処理"
"763","UT-INV-117","InvenTree.serializers.InvenTreeDecimalField","to_internal_value","異常系","無効な値でValidationErrorが発生すること","なし","data='invalid'","ValidationErrorが発生する","中",""
"764","UT-INV-118","InvenTree.serializers.ContentTypeField","to_internal_value","正常系","文字列からContentTypeが解決されること","なし","data='part.part'","Part ContentTypeが返却される","中","ContentType処理"
"765","UT-INV-119","InvenTree.serializers.ContentTypeField","to_internal_value","異常系","無効なContentTypeでValidationErrorが発生すること","なし","data='invalid.model'","ValidationErrorが発生する","中",""
"766","UT-INV-120","InvenTree.validators.validate_physical_units","","正常系","有効な物理単位が検証を通過すること","なし","unit='kg'","例外なく完了する","高","バリデータ"
"767","UT-INV-121","InvenTree.validators.validate_physical_units","","異常系","無効な物理単位でValidationErrorが発生すること","なし","unit='invalid_unit'","ValidationErrorが発生する","高",""
"768","UT-INV-122","InvenTree.validators.validate_currency_code","","正常系","有効な通貨コードが検証を通過すること","なし","code='USD'","例外なく完了する","高",""
"769","UT-INV-123","InvenTree.validators.validate_currency_code","","異常系","無効な通貨コードでValidationErrorが発生すること","なし","code='INVALID'","ValidationErrorが発生する","高",""
"770","UT-INV-124","InvenTree.validators.AllowedURLValidator","__call__","正常系","有効なURLが検証を通過すること","なし","value='https://example.com'","例外なく完了する","高",""
"771","UT-INV-125","InvenTree.validators.AllowedURLValidator","__call__","正常系","スキーマなしURLがstrict_urls=Falseで通過すること","INVENTREE_STRICT_URLS=False","value='example.com'","例外なく完了する","中",""
"772","UT-INV-126","InvenTree.fields.InvenTreeModelMoneyField","to_python","正常系","値がPython型に正しく変換されること","なし","value='100.123456'","丸められたDecimalが返却される","中","フィールド"
"773","UT-INV-127","InvenTree.fields.RoundingDecimalField","to_python","正常系","小数点以下が正しく丸められること","decimal_places=2","value='1.2345'","1.23が返却される","中",""
"774","UT-INV-128","InvenTree.fields.round_decimal","","正常系","指定桁数で丸められること","なし","value=1.23456, places=2","1.23が返却される","中",""
"775","UT-INV-129","InvenTree.fields.round_decimal","","異常系","無効な値でValidationErrorが発生すること","なし","value='invalid'","ValidationErrorが発生する","中",""
"776","UT-INV-130","InvenTree.permissions.RolePermission","has_permission","正常系","スーパーユーザーは常にTrueが返却されること","user.is_superuser=True","request.method='DELETE'","Trueが返却される","高","パーミッション"
"777","UT-INV-131","InvenTree.permissions.RolePermission","has_permission","正常系","適切なロールを持つユーザーにTrueが返却されること","ユーザーがpart.viewロールを持つ","request.method='GET'","Trueが返却される","高",""
"778","UT-INV-132","InvenTree.permissions.RolePermission","has_permission","異常系","ロールがないユーザーにFalseが返却されること","ユーザーがロールを持たない","request.method='DELETE'","Falseが返却される","高",""
"779","UT-INV-133","InvenTree.conversion.get_unit_registry","","正常系","単位レジストリが取得できること","なし","なし","UnitRegistryインスタンスが返却される","中","単位変換"
"780","UT-INV-134","InvenTree.conversion.convert_physical_value","","正常系","物理値が正しく変換されること","なし","value='1kg', unit='g'","1000.0が返却される","高",""
"781","UT-INV-135","InvenTree.conversion.convert_physical_value","","異常系","互換性のない単位でValidationErrorが発生すること","なし","value='1kg', unit='m'","ValidationErrorが発生する","高",""
"782","UT-INV-136","InvenTree.conversion.from_engineering_notation","","正常系","エンジニアリング記法が正しく変換されること","なし","value='1K2'","'1.2K'が返却される","中",""
"783","UT-INV-137","InvenTree.format.parse_format_string","","正常系","フォーマット文字列が正しく解析されること","なし","fmt_string='PO-{ref:04d}'","{'ref': {...}}が返却される","中","フォーマット処理"
"784","UT-INV-138","InvenTree.format.parse_format_string","","異常系","重複グループでValueErrorが発生すること","なし","fmt_string='{ref}{ref}'","ValueErrorが発生する","中",""
"785","UT-INV-139","InvenTree.format.validate_string","","正常系","値がフォーマットに一致する場合Trueが返却されること","なし","value='PO-123', fmt_string='PO-{ref}'","Trueが返却される","高",""
"786","UT-INV-140","InvenTree.format.validate_string","","正常系","値がフォーマットに一致しない場合Falseが返却されること","なし","value='SO-123', fmt_string='PO-{ref}'","Falseが返却される","中",""
"787","UT-INV-141","InvenTree.format.extract_named_group","","正常系","名前付きグループが正しく抽出されること","なし","name='ref', value='PO-123', fmt_string='PO-{ref}'","'123'が返却される","高",""
"788","UT-INV-142","InvenTree.format.extract_named_group","","異常系","存在しないグループ名でNameErrorが発生すること","なし","name='other', value='PO-123', fmt_string='PO-{ref}'","NameErrorが発生する","中",""
"789","UT-INV-143","InvenTree.backends.InvenTreeMaintenanceModeBackend","get_value","正常系","メンテナンスモード状態が取得できること","タイムスタンプが未来","なし","Trueが返却される","中","メンテナンスモード"
"790","UT-INV-144","InvenTree.backends.InvenTreeMaintenanceModeBackend","get_value","正常系","タイムスタンプが過去の場合Falseが返却されること","タイムスタンプが過去","なし","Falseが返却される","中",""
"791","UT-INV-145","InvenTree.backends.InvenTreeMaintenanceModeBackend","set_value","正常系","メンテナンスモードが有効化されること","なし","value=True","タイムスタンプが保存される","高",""
"792","UT-INV-146","InvenTree.backends.InvenTreeMaintenanceModeBackend","set_value","正常系","メンテナンスモードが無効化されること","メンテナンスモード有効","value=False","タイムスタンプが空になる","高",""
"793","UT-INV-147","InvenTree.models.notify_staff_users_of_error","","正常系","スタッフユーザーにエラー通知が送信されること","is_staff=Trueのユーザーが存在","instance, label, context","通知がトリガーされる","中","通知処理"
"794","UT-INV-148","InvenTree.models.after_failed_task","","正常系","最大試行回数到達時に通知が送信されること","max_attempts=5, attempt_count=5","Task instance","スタッフユーザーに通知される","中",""
"795","UT-INV-149","InvenTree.models.after_error_logged","","正常系","エラーログ作成時に通知が送信されること","created=True","Error instance","スタッフユーザーに通知される","中",""
"796","UT-INV-150","InvenTree.helpers.constructPathString","","正常系","パスリストが文字列に変換されること","なし","path=['A','B','C']","'A/B/C'が返却される","中","パス処理"
"797","UT-INV-151","InvenTree.helpers.constructPathString","","境界値","長すぎるパスが省略されること","なし","path=[...], max_chars=10","省略された文字列が返却される","中",""
"798","UT-INV-152","InvenTree.helpers.generateTestKey","","正常系","テストキーが正しく生成されること","なし","test_name='My Test'","'mytest'が返却される","中","テストキー生成"
"799","UT-INV-153","InvenTree.helpers.generateTestKey","","境界値","Noneの場合空文字列が返却されること","なし","test_name=None","''が返却される","中",""
"800","UT-INV-154","InvenTree.helpers.getMediaUrl","","正常系","メディアURLが正しく構築されること","ファイルフィールドあり","file=FieldFile","メディアURLが返却される","中","URL生成"
"801","UT-INV-155","InvenTree.helpers.getMediaUrl","","異常系","無効なファイル型でTypeErrorが発生すること","なし","file='string'","TypeErrorが発生する","中",""
"802","UT-INV-156","InvenTree.helpers.TestIfImage","","正常系","有効な画像でTrueが返却されること","有効な画像ファイル","img=valid_image","Trueが返却される","中","画像検証"
"803","UT-INV-157","InvenTree.helpers.TestIfImage","","正常系","無効なファイルでFalseが返却されること","テキストファイル","img=text_file","Falseが返却される","中",""
"804","UT-INV-158","InvenTree.helpers.decimal2string","","正常系","Decimalが文字列に正しく変換されること","なし","d=Decimal('1.000')","'1'が返却される","中","数値変換"
"805","UT-INV-159","InvenTree.helpers.decimal2money","","正常系","DecimalがMoneyに正しく変換されること","なし","d=Decimal('100'), currency='USD'","Money(100, 'USD')が返却される","中",""
"806","UT-INV-160","InvenTree.helpers.current_time","","正常系","現在時刻が返却されること","USE_TZ=True","local=True","ローカルタイムゾーンの現在時刻","中","日時処理"
"807","UT-INV-161","InvenTree.helpers.to_local_time","","正常系","時刻がローカルタイムゾーンに変換されること","なし","time=datetime, target_tz_str='UTC'","UTC時刻が返却される","中",""
"808","UT-INV-162","InvenTree.helpers.to_local_time","","異常系","無効な型でTypeErrorが発生すること","なし","time='string'","TypeErrorが発生する","中",""
"809","UT-INV-163","InvenTree.helpers.clean_markdown","","正常系","安全なMarkdownが検証を通過すること","なし","value='**bold**'","同じ値が返却される","高","セキュリティ"
"810","UT-INV-164","InvenTree.helpers.clean_markdown","","異常系","危険なコンテンツでValidationErrorが発生すること","なし","value='<script>...'","ValidationErrorが発生する","高",""
"811","UT-INV-165","InvenTree.serializers.FilterableSerializerMixin","gather_filters","正常系","フィルター対象フィールドが収集されること","フィルター可能フィールドあり","kwargs","filter_targetsが設定される","中","シリアライザフィルタ"
"812","UT-INV-166","InvenTree.serializers.FilterableSerializerMixin","do_filtering","正常系","指定フィールドがフィルタリングされること","フィルター値指定","filter_target_values","対象フィールドが除外される","中",""
"813","UT-INV-167","InvenTree.serializers.RemoteImageMixin","validate_remote_image","正常系","リモート画像URLが検証されること","INVENTREE_DOWNLOAD_FROM_URL=True","url='https://example.com/image.png'","画像がダウンロードされる","中","リモート画像"
"814","UT-INV-168","InvenTree.serializers.RemoteImageMixin","validate_remote_image","異常系","ダウンロード無効時にValidationErrorが発生すること","INVENTREE_DOWNLOAD_FROM_URL=False","url='https://...'","ValidationErrorが発生する","高",""
"815","UT-MCH-001","machine.models.MachineConfig","__str__","正常系","文字列表現でマシン名が返却されること","MachineConfigインスタンスが存在","name=""TestMachine""","TestMachineが返却される","低","表示用メソッド"
"816","UT-MCH-002","machine.models.MachineConfig","save","正常系","新規作成時にレジストリへ追加されること","MachineConfigが新規作成される","name=""NewMachine"", machine_type=""label-printer"", driver=""test-driver""","registry.add_machineが呼ばれる","高","レジストリ連携"
"817","UT-MCH-003","machine.models.MachineConfig","save","正常系","更新時にレジストリ更新フックが呼ばれること","既存MachineConfigが存在","activeをTrueからFalseに変更","registry.update_machineが呼ばれる","高","レジストリ連携"
"818","UT-MCH-004","machine.models.MachineConfig","delete","正常系","削除時にレジストリから削除されること","MachineConfigとmachineインスタンスが存在","MachineConfig.delete()を呼び出し","registry.remove_machineが呼ばれる","高","レジストリ連携"
"819","UT-MCH-005","machine.models.MachineConfig","to_dict","正常系","設定を含むdictが返却されること","MachineConfigとMachineSettingが存在","to_dict()を呼び出し","フィールドとsettingsを含むdictが返却される","中","シリアライズ"
"820","UT-MCH-006","machine.models.MachineConfig","machine","正常系","レジストリからマシンインスタンスが取得できること","MachineConfigがレジストリに登録済み","machineプロパティにアクセス","BaseMachineTypeインスタンスが返却される","中","プロパティ"
"821","UT-MCH-007","machine.models.MachineConfig","machine","異常系","レジストリに未登録の場合Noneが返却されること","MachineConfigがレジストリ未登録","machineプロパティにアクセス","Noneが返却される","中","プロパティ"
"822","UT-MCH-008","machine.models.MachineConfig","errors","正常系","マシンエラー一覧が取得できること","machineインスタンスにエラーが存在","errorsプロパティにアクセス","エラーリストが返却される","中","プロパティ"
"823","UT-MCH-009","machine.models.MachineConfig","errors","異常系","machineがNoneの場合空リストが返却されること","machineインスタンスが存在しない","errorsプロパティにアクセス","空リストが返却される","中","プロパティ"
"824","UT-MCH-010","machine.models.MachineConfig","is_driver_available","正常系","ドライバーが利用可能な場合Trueが返却されること","machineとdriverが存在","is_driver_available()を呼び出し","Trueが返却される","中","ステータス確認"
"825","UT-MCH-011","machine.models.MachineConfig","is_driver_available","異常系","machineがNoneの場合Falseが返却されること","machineが存在しない","is_driver_available()を呼び出し","Falseが返却される","中","ステータス確認"
"826","UT-MCH-012","machine.models.MachineConfig","is_driver_available","異常系","driverがNoneの場合Falseが返却されること","machineは存在するがdriverがない","is_driver_available()を呼び出し","Falseが返却される","中","ステータス確認"
"827","UT-MCH-013","machine.models.MachineConfig","no_errors","正常系","エラーがない場合Trueが返却されること","errorsが空リスト","no_errors()を呼び出し","Trueが返却される","中","ステータス確認"
"828","UT-MCH-014","machine.models.MachineConfig","no_errors","異常系","エラーがある場合Falseが返却されること","errorsに要素が存在","no_errors()を呼び出し","Falseが返却される","中","ステータス確認"
"829","UT-MCH-015","machine.models.MachineConfig","initialized","正常系","初期化済みの場合Trueが返却されること","machineが初期化済み","initialized()を呼び出し","Trueが返却される","中","ステータス確認"
"830","UT-MCH-016","machine.models.MachineConfig","initialized","異常系","未初期化の場合Falseが返却されること","machineが未初期化","initialized()を呼び出し","Falseが返却される","中","ステータス確認"
"831","UT-MCH-017","machine.models.MachineConfig","get_admin_errors","正常系","HTML形式でエラーが表示されること","errorsに複数のエラーが存在","get_admin_errors()を呼び出し","HTMLフォーマットのエラー文字列が返却される","低","管理画面表示"
"832","UT-MCH-018","machine.models.MachineConfig","get_admin_errors","境界値","エラーがない場合「No errors」が表示されること","errorsが空リスト","get_admin_errors()を呼び出し","「No errors」のHTML文字列が返却される","低","管理画面表示"
"833","UT-MCH-019","machine.models.MachineConfig","get_machine_status","正常系","ステータスがHTML形式で表示されること","machineにステータスが設定済み","get_machine_status()を呼び出し","HTMLフォーマットのステータス文字列が返却される","低","管理画面表示"
"834","UT-MCH-020","machine.models.MachineConfig","get_machine_status","異常系","machineがNoneの場合Noneが返却されること","machineが存在しない","get_machine_status()を呼び出し","Noneが返却される","低","管理画面表示"
"835","UT-MCH-021","machine.models.MachineSetting","to_native_value","正常系","ネイティブ値が正しく返却されること","MachineSettingが存在","to_native_value()を呼び出し","設定の実際の値が返却される","中","値変換"
"836","UT-MCH-022","machine.models.MachineSetting","save","正常系","保存時にレジストリ更新が呼ばれること","MachineSettingが存在","MachineSettingを保存","registry.update_machineが呼ばれる","高","レジストリ連携"
"837","UT-MCH-023","machine.models.MachineSetting","get_config_type","正常系","Mを渡すとMACHINEが返却されること","なし","config_type_str=""M""","ConfigType.MACHINEが返却される","中","ヘルパーメソッド"
"838","UT-MCH-024","machine.models.MachineSetting","get_config_type","正常系","Dを渡すとDRIVERが返却されること","なし","config_type_str=""D""","ConfigType.DRIVERが返却される","中","ヘルパーメソッド"
"839","UT-MCH-025","machine.models.MachineSetting","get_setting_definition","正常系","ドライバー設定が取得できること","machine_configとdriverが存在","key=""DRIVER_KEY"", config_type=DRIVER","ドライバー設定定義が返却される","中","設定定義取得"
"840","UT-MCH-026","machine.models.MachineSetting","get_setting_definition","正常系","マシン設定が取得できること","machine_configとmachine_settingsが存在","key=""MACHINE_KEY"", config_type=MACHINE","マシン設定定義が返却される","中","設定定義取得"
"841","UT-MCH-027","machine.models.MachineSetting","Meta.unique_together","制約","同一machine_config, config_type, keyの重複が禁止されること","同一組み合わせのMachineSettingが存在","同一組み合わせで新規作成を試行","IntegrityErrorが発生する","高","データ整合性"
"842","UT-MCH-028","machine.machine_type.BaseDriver","__init__","正常系","ドライバーインスタンスが正しく初期化されること","BaseDriverのサブクラスが定義済み","BaseDriverサブクラスをインスタンス化","インスタンスが生成される","中","初期化"
"843","UT-MCH-029","machine.machine_type.BaseDriver","init_driver","正常系","ドライバー初期化メソッドが呼び出せること","BaseDriverのサブクラスが定義済み","init_driver()を呼び出し","エラーなく完了する","中","初期化"
"844","UT-MCH-030","machine.machine_type.BaseDriver","init_machine","正常系","マシン初期化メソッドが呼び出せること","BaseDriverのサブクラスが定義済み","init_machine(machine)を呼び出し","エラーなく完了する","中","初期化"
"845","UT-MCH-031","machine.machine_type.BaseDriver","update_machine","正常系","マシン更新メソッドが呼び出せること","BaseDriverのサブクラスが定義済み","update_machine(old_state, machine)を呼び出し","エラーなく完了する","中","更新処理"
"846","UT-MCH-032","machine.machine_type.BaseDriver","restart_machine","正常系","マシン再起動メソッドが呼び出せること","BaseDriverのサブクラスが定義済み","restart_machine(machine)を呼び出し","エラーなく完了する","中","再起動処理"
"847","UT-MCH-033","machine.machine_type.BaseDriver","get_machines","正常系","ドライバーを使用するマシン一覧が取得できること","複数のマシンがドライバーを使用","get_machines()を呼び出し","マシンリストが返却される","中","マシン取得"
"848","UT-MCH-034","machine.machine_type.BaseDriver","get_machines","境界値","マシンがない場合空リストが返却されること","ドライバーを使用するマシンがない","get_machines()を呼び出し","空リストが返却される","中","マシン取得"
"849","UT-MCH-035","machine.machine_type.BaseDriver","handle_error","正常系","エラーがエラーリストに追加されること","errorsが空","handle_error(""test error"")を呼び出し","errorsにエラーが追加される","中","エラー処理"
"850","UT-MCH-036","machine.machine_type.BaseDriver","handle_error","境界値","同一エラーが重複追加されないこと","errorsに同一エラーが存在","同一エラーでhandle_error()を呼び出し","errorsの要素数が変わらない","中","エラー処理"
"851","UT-MCH-037","machine.machine_type.BaseDriver","errors","正常系","エラーリストが取得できること","errorsにエラーが存在","errorsプロパティにアクセス","エラーリストが返却される","中","プロパティ"
"852","UT-MCH-038","machine.machine_type.BaseMachineType","__init__","正常系","マシンインスタンスが正しく初期化されること","MachineConfigが存在","BaseMachineTypeサブクラス(machine_config)をインスタンス化","インスタンスが生成される","高","初期化"
"853","UT-MCH-039","machine.machine_type.BaseMachineType","__init__","異常系","ドライバーが見つからない場合エラーが登録されること","存在しないドライバー名のMachineConfig","BaseMachineTypeサブクラス(machine_config)をインスタンス化","errorsにドライバー未発見エラーが追加される","高","初期化エラー"
"854","UT-MCH-040","machine.machine_type.BaseMachineType","__init__","異常系","互換性のないドライバーの場合エラーが登録されること","base_driverと異なるドライバーのMachineConfig","BaseMachineTypeサブクラス(machine_config)をインスタンス化","errorsに互換性エラーが追加される","高","初期化エラー"
"855","UT-MCH-041","machine.machine_type.BaseMachineType","__str__","正常系","マシン名が文字列表現で返却されること","machine_configが存在","str(machine)を呼び出し","マシン名が返却される","低","表示用メソッド"
"856","UT-MCH-042","machine.machine_type.BaseMachineType","__repr__","正常系","Python表現が返却されること","machine_configが存在","repr(machine)を呼び出し","<クラス名: マシン名>形式が返却される","低","表示用メソッド"
"857","UT-MCH-043","machine.machine_type.BaseMachineType","machine_config","正常系","MachineConfigインスタンスが取得できること","データベースにMachineConfigが存在","machine_configプロパティにアクセス","MachineConfigインスタンスが返却される","中","プロパティ"
"858","UT-MCH-044","machine.machine_type.BaseMachineType","name","正常系","マシン名が取得できること","machine_configが存在","nameプロパティにアクセス","マシン名が返却される","中","プロパティ"
"859","UT-MCH-045","machine.machine_type.BaseMachineType","name","異常系","machine_configがNoneの場合Noneが返却されること","machine_configが存在しない","nameプロパティにアクセス","Noneが返却される","中","プロパティ"
"860","UT-MCH-046","machine.machine_type.BaseMachineType","active","正常系","アクティブ状態が取得できること","machine_configが存在しactiveがTrue","activeプロパティにアクセス","Trueが返却される","中","プロパティ"
"861","UT-MCH-047","machine.machine_type.BaseMachineType","active","異常系","machine_configがNoneの場合Falseが返却されること","machine_configが存在しない","activeプロパティにアクセス","Falseが返却される","中","プロパティ"
"862","UT-MCH-048","machine.machine_type.BaseMachineType","initialize","正常系","ドライバーのinit_machineが呼ばれること","driverが存在し設定が完備","initialize()を呼び出し","driver.init_machineが呼ばれinitializedがTrueになる","高","初期化"
"863","UT-MCH-049","machine.machine_type.BaseMachineType","initialize","異常系","ドライバーがNoneの場合処理がスキップされること","driverがNone","initialize()を呼び出し","処理がreturnで終了する","中","初期化"
"864","UT-MCH-050","machine.machine_type.BaseMachineType","initialize","異常系","必須設定が未定義の場合エラーが登録されること","必須設定が未定義","initialize()を呼び出し","errorsにMissing settingsエラーが追加される","高","初期化エラー"
"865","UT-MCH-051","machine.machine_type.BaseMachineType","initialize","異常系","init_machineで例外発生時エラーが登録されること","init_machineが例外をスロー","initialize()を呼び出し","errorsに例外が追加される","高","初期化エラー"
"866","UT-MCH-052","machine.machine_type.BaseMachineType","update","正常系","ドライバーのupdate_machineが呼ばれること","driverが存在","update(old_state)を呼び出し","driver.update_machineが呼ばれる","中","更新処理"
"867","UT-MCH-053","machine.machine_type.BaseMachineType","update","正常系","非アクティブからアクティブになった場合初期化されること","activeがFalseからTrueに変更","update(old_state)を呼び出し","initialize()が呼ばれる","高","状態遷移"
"868","UT-MCH-054","machine.machine_type.BaseMachineType","update","正常系","アクティブから非アクティブになった場合initializedがFalseになること","activeがTrueからFalseに変更","update(old_state)を呼び出し","initializedがFalseになる","高","状態遷移"
"869","UT-MCH-055","machine.machine_type.BaseMachineType","update","異常系","driverがNoneの場合処理がスキップされること","driverがNone","update(old_state)を呼び出し","処理がreturnで終了する","中","更新処理"
"870","UT-MCH-056","machine.machine_type.BaseMachineType","update","異常系","update_machineで例外発生時エラーが登録されること","update_machineが例外をスロー","update(old_state)を呼び出し","errorsに例外が追加される","中","更新エラー"
"871","UT-MCH-057","machine.machine_type.BaseMachineType","restart","正常系","状態がリセットされドライバーのrestart_machineが呼ばれること","driverが存在","restart()を呼び出し","restart_required=False, errors=[], statusがデフォルト, driver.restart_machineが呼ばれる","高","再起動処理"
"872","UT-MCH-058","machine.machine_type.BaseMachineType","restart","異常系","driverがNoneの場合処理がスキップされること","driverがNone","restart()を呼び出し","処理がreturnで終了する","中","再起動処理"
"873","UT-MCH-059","machine.machine_type.BaseMachineType","restart","異常系","restart_machineで例外発生時エラーが登録されること","restart_machineが例外をスロー","restart()を呼び出し","errorsに例外が追加される","中","再起動エラー"
"874","UT-MCH-060","machine.machine_type.BaseMachineType","handle_error","正常系","エラーがエラーリストに追加されること","errorsが空","handle_error(""test error"")を呼び出し","errorsにエラーが追加される","中","エラー処理"
"875","UT-MCH-061","machine.machine_type.BaseMachineType","handle_error","境界値","同一エラーが重複追加されないこと","errorsに同一エラーが存在","同一エラーでhandle_error()を呼び出し","errorsの要素数が変わらない","中","エラー処理"
"876","UT-MCH-062","machine.machine_type.BaseMachineType","reset_errors","正常系","エラーリストが空にリセットされること","errorsにエラーが存在","reset_errors()を呼び出し","errorsが空リストになる","中","エラー処理"
"877","UT-MCH-063","machine.machine_type.BaseMachineType","get_setting","正常系","マシン設定値が取得できること","MachineSettingが存在","get_setting(""KEY"", ""M"")を呼び出し","設定値が返却される","中","設定取得"
"878","UT-MCH-064","machine.machine_type.BaseMachineType","get_setting","正常系","ドライバー設定値が取得できること","MachineSettingが存在","get_setting(""KEY"", ""D"")を呼び出し","設定値が返却される","中","設定取得"
"879","UT-MCH-065","machine.machine_type.BaseMachineType","set_setting","正常系","マシン設定値が保存できること","なし","set_setting(""KEY"", ""M"", ""value"")を呼び出し","設定値が保存される","中","設定保存"
"880","UT-MCH-066","machine.machine_type.BaseMachineType","set_setting","正常系","ドライバー設定値が保存できること","なし","set_setting(""KEY"", ""D"", ""value"")を呼び出し","設定値が保存される","中","設定保存"
"881","UT-MCH-067","machine.machine_type.BaseMachineType","check_settings","正常系","全必須設定が定義済みの場合(True, 空dict)が返却されること","全必須設定が定義済み","check_settings()を呼び出し","(True, {MACHINE: [], DRIVER: []})が返却される","高","設定検証"
"882","UT-MCH-068","machine.machine_type.BaseMachineType","check_settings","異常系","必須設定が未定義の場合(False, 未定義キー)が返却されること","必須設定が未定義","check_settings()を呼び出し","(False, {config_type: [missing_keys]})が返却される","高","設定検証"
"883","UT-MCH-069","machine.machine_type.BaseMachineType","set_status","正常系","ステータスコードが設定されること","なし","set_status(MachineStatus.CONNECTED)を呼び出し","statusがCONNECTEDに設定される","中","ステータス設定"
"884","UT-MCH-070","machine.machine_type.BaseMachineType","set_status_text","正常系","ステータステキストが設定されること","なし","set_status_text(""Processing"")を呼び出し","status_textが""Processing""に設定される","中","ステータス設定"
"885","UT-MCH-071","machine.machine_type.BaseMachineType","set_properties","正常系","プロパティが設定されること","なし","set_properties([{""key"": ""model"", ""value"": ""ABC""}])を呼び出し","propertiesが設定される","中","プロパティ設定"
"886","UT-MCH-072","machine.machine_type.BaseMachineType","set_properties","正常系","typeが未指定の場合strがデフォルト設定されること","なし","set_properties([{""key"": ""k"", ""value"": ""v""}])を呼び出し","type=""str""が設定される","中","プロパティ設定"
"887","UT-MCH-073","machine.machine_type.BaseMachineType","set_properties","正常系","progressタイプでmax_progress未指定の場合100がデフォルト設定されること","なし","set_properties([{""key"": ""k"", ""value"": 50, ""type"": ""progress""}])を呼び出し","max_progress=100が設定される","中","プロパティ設定"
"888","UT-MCH-074","machine.machine_type.BaseMachineType","initialized","正常系","初期化状態が取得・設定できること","なし","initialized = True後にアクセス","Trueが返却される","中","状態プロパティ"
"889","UT-MCH-075","machine.machine_type.BaseMachineType","restart_required","正常系","再起動要求状態が取得・設定できること","なし","restart_required = True後にアクセス","Trueが返却される","中","状態プロパティ"
"890","UT-MCH-076","machine.machine_type.BaseMachineType","errors","正常系","エラーリストが取得できること","errorsにエラーが存在","errorsプロパティにアクセス","エラーリストが返却される","中","状態プロパティ"
"891","UT-MCH-077","machine.machine_type.BaseMachineType","status","正常系","現在のステータスが取得できること","statusが設定済み","statusプロパティにアクセス","MachineStatusインスタンスが返却される","中","状態プロパティ"
"892","UT-MCH-078","machine.machine_type.BaseMachineType","status_text","正常系","ステータステキストが取得できること","status_textが設定済み","status_textプロパティにアクセス","設定された文字列が返却される","中","状態プロパティ"
"893","UT-MCH-079","machine.machine_type.BaseMachineType","properties","正常系","プロパティリストが取得できること","propertiesが設定済み","propertiesプロパティにアクセス","プロパティリストが返却される","中","状態プロパティ"
"894","UT-MCH-080","machine.machine_type.BaseMachineType","properties_dict","正常系","keyをキーとしたdictが取得できること","propertiesが設定済み","properties_dictプロパティにアクセス","{key: MachineProperty}形式のdictが返却される","中","状態プロパティ"
"895","UT-MCH-081","machine.registry.MachineRegistry","__init__","正常系","レジストリが正しく初期化されること","なし","MachineRegistry()をインスタンス化","空のdict/listが初期化される","中","初期化"
"896","UT-MCH-082","machine.registry.MachineRegistry","errors","正常系","エラーリストが取得できること","errorsにエラーが存在","errorsプロパティにアクセス","エラーリストが返却される","中","プロパティ"
"897","UT-MCH-083","machine.registry.MachineRegistry","is_ready","正常系","レジストリ準備状態が取得できること","readyがTrue","is_readyプロパティにアクセス","Trueが返却される","中","プロパティ"
"898","UT-MCH-084","machine.registry.MachineRegistry","handle_error","正常系","エラーがエラーリストに追加されること","errorsが空","handle_error(""test error"")を呼び出し","errorsにエラーが追加される","中","エラー処理"
"899","UT-MCH-085","machine.registry.MachineRegistry","handle_error","境界値","同一エラーが重複追加されないこと","errorsに同一エラーが存在","同一エラーでhandle_error()を呼び出し","errorsの要素数が変わらない","中","エラー処理"
"900","UT-MCH-086","machine.registry.MachineRegistry","initialize","正常系","レジストリが初期化されマシンがロードされること","なし","initialize(main=True)を呼び出し","ready=Trueになりマシンがロードされる","高","初期化"
"901","UT-MCH-087","machine.registry.MachineRegistry","discover_machine_types","正常系","プラグインからマシンタイプが発見されること","Machineミックスインを持つプラグインが存在","discover_machine_types()を呼び出し","machine_typesにタイプが登録される","高","ディスカバリ"
"902","UT-MCH-088","machine.registry.MachineRegistry","discover_machine_types","異常系","無効なマシンタイプがスキップされること","無効なマシンタイプを返すプラグインが存在","discover_machine_types()を呼び出し","無効なタイプがスキップされログ出力される","中","ディスカバリ"
"903","UT-MCH-089","machine.registry.MachineRegistry","discover_machine_types","異常系","重複SLUGのマシンタイプでエラーが登録されること","同一SLUGのマシンタイプが複数存在","discover_machine_types()を呼び出し","errorsにValueErrorが追加される","高","ディスカバリ"
"904","UT-MCH-090","machine.registry.MachineRegistry","discover_drivers","正常系","プラグインからドライバーが発見されること","Machineミックスインを持つプラグインが存在","discover_drivers()を呼び出し","driversにドライバーが登録される","高","ディスカバリ"
"905","UT-MCH-091","machine.registry.MachineRegistry","discover_drivers","異常系","無効なドライバーがスキップされること","無効なドライバーを返すプラグインが存在","discover_drivers()を呼び出し","無効なドライバーがスキップされログ出力される","中","ディスカバリ"
"906","UT-MCH-092","machine.registry.MachineRegistry","discover_drivers","異常系","重複SLUGのドライバーでエラーが登録されること","同一SLUGのドライバーが複数存在","discover_drivers()を呼び出し","errorsにValueErrorが追加される","高","ディスカバリ"
"907","UT-MCH-093","machine.registry.MachineRegistry","get_driver_instance","正常系","ドライバーインスタンスが取得または作成されること","driversにドライバーが登録済み","get_driver_instance(""driver-slug"")を呼び出し","ドライバーインスタンスが返却される","中","インスタンス取得"
"908","UT-MCH-094","machine.registry.MachineRegistry","get_driver_instance","異常系","存在しないドライバーの場合Noneが返却されること","driversにドライバーが未登録","get_driver_instance(""nonexistent"")を呼び出し","Noneが返却される","中","インスタンス取得"
"909","UT-MCH-095","machine.registry.MachineRegistry","load_machines","正常系","データベースから全マシンがロードされること","MachineConfigがデータベースに存在","load_machines(main=True)を呼び出し","machinesにマシンが登録され初期化される","高","マシンロード"
"910","UT-MCH-096","machine.registry.MachineRegistry","load_machines","異常系","データベース未準備の場合警告ログが出力されること","データベースが未準備","load_machines()を呼び出し","警告ログが出力される","中","マシンロード"
"911","UT-MCH-097","machine.registry.MachineRegistry","reload_machines","正常系","レジストリがリセットされマシンが再ロードされること","machinesにマシンが存在","reload_machines()を呼び出し","machines/drivers/driver_instancesが空になり再ロードされる","高","リロード"
"912","UT-MCH-098","machine.registry.MachineRegistry","add_machine","正常系","マシンがレジストリに追加されること","machine_typesにタイプが登録済み","add_machine(machine_config)を呼び出し","machinesにマシンが追加される","高","マシン追加"
"913","UT-MCH-099","machine.registry.MachineRegistry","add_machine","異常系","存在しないマシンタイプの場合エラーが登録されること","machine_typesにタイプが未登録","add_machine(machine_config)を呼び出し","errorsにエラーが追加される","高","マシン追加"
"914","UT-MCH-100","machine.registry.MachineRegistry","update_machine","正常系","マシンの更新フックが呼ばれること","machinesにマシンが存在","update_machine(old_state, machine_config)を呼び出し","machine.update()が呼ばれる","中","マシン更新"
"915","UT-MCH-101","machine.registry.MachineRegistry","restart_machine","正常系","マシンの再起動メソッドが呼ばれること","machinesにマシンが存在","restart_machine(machine)を呼び出し","machine.restart()が呼ばれる","中","マシン再起動"
"916","UT-MCH-102","machine.registry.MachineRegistry","remove_machine","正常系","マシンがレジストリから削除されること","machinesにマシンが存在","remove_machine(machine)を呼び出し","machinesからマシンが削除される","高","マシン削除"
"917","UT-MCH-103","machine.registry.MachineRegistry","get_machines","正常系","フィルター条件に合うマシンリストが返却されること","複数のマシンが存在","get_machines(active=True)を呼び出し","activeなマシンのみ返却される","中","マシン取得"
"918","UT-MCH-104","machine.registry.MachineRegistry","get_machines","正常系","initialized=Noneで全マシンが返却されること","初期化済み・未初期化のマシンが混在","get_machines(initialized=None)を呼び出し","全マシンが返却される","中","マシン取得"
"919","UT-MCH-105","machine.registry.MachineRegistry","get_machines","異常系","無効なフィルターフィールドでValueErrorが発生すること","なし","get_machines(invalid_field=True)を呼び出し","ValueErrorが発生する","中","マシン取得"
"920","UT-MCH-106","machine.registry.MachineRegistry","get_machine_types","正常系","マシンタイプリストが返却されること","machine_typesにタイプが登録済み","get_machine_types()を呼び出し","マシンタイプリストが返却される","中","タイプ取得"
"921","UT-MCH-107","machine.registry.MachineRegistry","get_machine","正常系","pkでマシンが取得できること","machinesにマシンが存在","get_machine(pk)を呼び出し","マシンインスタンスが返却される","中","マシン取得"
"922","UT-MCH-108","machine.registry.MachineRegistry","get_machine","異常系","存在しないpkの場合Noneが返却されること","machinesにマシンが未存在","get_machine(""nonexistent-pk"")を呼び出し","Noneが返却される","中","マシン取得"
"923","UT-MCH-109","machine.registry.MachineRegistry","get_driver_types","正常系","ドライバータイプリストが返却されること","driversにドライバーが登録済み","get_driver_types()を呼び出し","ドライバータイプリストが返却される","中","ドライバー取得"
"924","UT-MCH-110","machine.registry.MachineRegistry","get_driver_types","正常系","machine_typeでフィルターできること","複数タイプのドライバーが存在","get_driver_types(machine_type=""label-printer"")を呼び出し","指定タイプのドライバーのみ返却される","中","ドライバー取得"
"925","UT-MCH-111","machine.registry.MachineRegistry","get_drivers","正常系","ドライバーインスタンスリストが返却されること","driver_instancesにドライバーが存在","get_drivers()を呼び出し","ドライバーインスタンスリストが返却される","中","ドライバー取得"
"926","UT-MCH-112","machine.registry.MachineRegistry","call_machine_function","正常系","マシンのドライバー関数が呼び出されること","マシンとドライバーが存在","call_machine_function(machine_id, ""function_name"")を呼び出し","関数の戻り値が返却される","高","関数呼び出し"
"927","UT-MCH-113","machine.registry.MachineRegistry","call_machine_function","異常系","マシンが存在しない場合AttributeErrorが発生すること","マシンが存在しない","call_machine_function(""invalid-id"", ""func"")を呼び出し","AttributeErrorが発生する","高","関数呼び出し"
"928","UT-MCH-114","machine.registry.MachineRegistry","call_machine_function","異常系","ドライバーがない場合AttributeErrorが発生すること","マシンは存在するがドライバーがない","call_machine_function(machine_id, ""func"")を呼び出し","AttributeErrorが発生する","高","関数呼び出し"
"929","UT-MCH-115","machine.registry.MachineRegistry","call_machine_function","異常系","関数が存在しない場合AttributeErrorが発生すること","マシンとドライバーは存在するが関数がない","call_machine_function(machine_id, ""nonexistent"")を呼び出し","AttributeErrorが発生する","高","関数呼び出し"
"930","UT-MCH-116","machine.registry.MachineRegistry","call_machine_function","正常系","raise_error=Falseの場合エラー時にNoneが返却されること","マシンが存在しない","call_machine_function(""invalid-id"", ""func"", raise_error=False)を呼び出し","Noneが返却される","中","関数呼び出し"
"931","UT-MCH-117","machine.registry.MachineRegistry","_calculate_registry_hash","正常系","レジストリ状態のハッシュが計算されること","machinesにマシンが存在","_calculate_registry_hash()を呼び出し","MD5ハッシュ文字列が返却される","中","ハッシュ計算"
"932","UT-MCH-118","machine.registry.MachineRegistry","_check_reload","正常系","ハッシュ変更時にリロードが実行されること","保存済みハッシュと現在のハッシュが異なる","_check_reload()を呼び出し","reload_machinesが呼ばれTrueが返却される","中","リロードチェック"
"933","UT-MCH-119","machine.registry.MachineRegistry","_update_registry_hash","正常系","レジストリハッシュが保存されること","なし","_update_registry_hash()を呼び出し","グローバル設定にハッシュが保存される","中","ハッシュ更新"
"934","UT-MCH-120","machine.tasks.ping_machines","","正常系","全ドライバーのping_machinesが呼ばれること","MACHINE_PING_ENABLEDがTrue","ping_machines()を呼び出し","各ドライバーのping_machinesが呼ばれる","中","定期タスク"
"935","UT-MCH-121","machine.tasks.ping_machines","","異常系","MACHINE_PING_ENABLEDがFalseの場合処理がスキップされること","MACHINE_PING_ENABLEDがFalse","ping_machines()を呼び出し","何も実行されずreturnする","中","定期タスク"
"936","UT-MCH-122","machine.machine_types.label_printer.LabelPrinterBaseDriver","print_label","正常系","ラベル印刷メソッドが呼び出せること","LabelPrinterBaseDriverのサブクラス","print_label(machine, label, item)を呼び出し","エラーなく完了する","高","印刷処理"
"937","UT-MCH-123","machine.machine_types.label_printer.LabelPrinterBaseDriver","print_labels","正常系","複数アイテムに対してprint_labelが呼ばれること","LabelPrinterBaseDriverのサブクラス","print_labels(machine, label, items)を呼び出し","各アイテムに対してprint_labelが呼ばれる","高","印刷処理"
"938","UT-MCH-124","machine.machine_types.label_printer.LabelPrinterBaseDriver","get_printers","正常系","ドライバーを使用するプリンターリストが返却されること","複数のLabelPrinterMachineが存在","get_printers(label, items)を呼び出し","LabelPrinterMachineリストが返却される","中","プリンター取得"
"939","UT-MCH-125","machine.machine_types.label_printer.LabelPrinterBaseDriver","get_printing_options_serializer","正常系","PrintingOptionsSerializerインスタンスが返却されること","なし","get_printing_options_serializer(request)を呼び出し","PrintingOptionsSerializerインスタンスが返却される","中","シリアライザ取得"
"940","UT-MCH-126","machine.machine_types.label_printer.LabelPrinterBaseDriver","machine_plugin","正常系","ラベル印刷プラグインが取得できること","inventreelabelmachineプラグインが登録済み","machine_pluginプロパティにアクセス","LabelPrintingMixinインスタンスが返却される","中","プロパティ"
"941","UT-MCH-127","machine.machine_types.label_printer.LabelPrinterBaseDriver","render_to_pdf","正常系","PDF形式でラベルがレンダリングされること","ラベルテンプレートとアイテムが存在","render_to_pdf(label, item)を呼び出し","HttpResponseが返却される","中","レンダリング"
"942","UT-MCH-128","machine.machine_types.label_printer.LabelPrinterBaseDriver","render_to_html","正常系","HTML形式でラベルがレンダリングされること","ラベルテンプレートとアイテムが存在","render_to_html(label, item)を呼び出し","HTML文字列が返却される","中","レンダリング"
"943","UT-MCH-129","machine.machine_types.label_printer.LabelPrinterBaseDriver","render_to_png","正常系","PNG形式でラベルがレンダリングされること","ラベルテンプレートとアイテムが存在","render_to_png(label, item)を呼び出し","PIL Imageオブジェクトが返却される","中","レンダリング"
"944","UT-MCH-130","machine.machine_types.label_printer.LabelPrinterMachine","__init__","正常系","LabelPrinterMachineが正しく初期化されること","MachineConfigが存在","LabelPrinterMachine(machine_config)をインスタンス化","インスタンスが生成されMACHINE_SETTINGSが設定される","高","初期化"
"945","UT-MCH-131","machine.machine_types.label_printer.LabelPrinterMachine","location","正常系","設定されたStockLocationが取得できること","LOCATION設定が存在","locationプロパティにアクセス","StockLocationインスタンスが返却される","中","プロパティ"
"946","UT-MCH-132","machine.machine_types.label_printer.LabelPrinterMachine","location","境界値","LOCATION未設定の場合Noneが返却されること","LOCATION設定が未設定","locationプロパティにアクセス","Noneが返却される","中","プロパティ"
"947","UT-MCH-133","machine.machine_types.label_printer.LabelPrinterStatus","Enum値","正常系","CONNECTEDが100であること","なし","LabelPrinterStatus.CONNECTED.valueを確認","100が返却される","低","Enum定義"
"948","UT-MCH-134","machine.machine_types.label_printer.LabelPrinterStatus","Enum値","正常系","UNKNOWNが101であること","なし","LabelPrinterStatus.UNKNOWN.valueを確認","101が返却される","低","Enum定義"
"949","UT-MCH-135","machine.machine_types.label_printer.LabelPrinterStatus","Enum値","正常系","PRINTINGが110であること","なし","LabelPrinterStatus.PRINTING.valueを確認","110が返却される","低","Enum定義"
"950","UT-MCH-136","machine.machine_types.label_printer.LabelPrinterStatus","Enum値","正常系","DISCONNECTEDが400であること","なし","LabelPrinterStatus.DISCONNECTED.valueを確認","400が返却される","低","Enum定義"
"951","UT-MCH-137","machine.machine_types.label_printer.LabelPrinterStatus","Enum値","正常系","ERRORが500であること","なし","LabelPrinterStatus.ERROR.valueを確認","500が返却される","低","Enum定義"
"952","UT-MCH-138","machine.serializers.MachineConfigSerializer","get_initialized","正常系","マシンの初期化状態が返却されること","machineが初期化済み","get_initialized(obj)を呼び出し","Trueが返却される","中","シリアライザ"
"953","UT-MCH-139","machine.serializers.MachineConfigSerializer","get_status","正常系","マシンステータスコードが返却されること","machineにステータスが設定済み","get_status(obj)を呼び出し","ステータスコード(int)が返却される","中","シリアライザ"
"954","UT-MCH-140","machine.serializers.MachineConfigSerializer","get_status","異常系","machineがNoneの場合-1が返却されること","machineが存在しない","get_status(obj)を呼び出し","-1が返却される","中","シリアライザ"
"955","UT-MCH-141","machine.serializers.MachineConfigSerializer","get_status_model","正常系","ステータスモデル名が返却されること","machineにMACHINE_STATUSが設定済み","get_status_model(obj)を呼び出し","ステータスクラス名(str)が返却される","中","シリアライザ"
"956","UT-MCH-142","machine.serializers.MachineConfigSerializer","get_status_text","正常系","ステータステキストが返却されること","machineにstatus_textが設定済み","get_status_text(obj)を呼び出し","ステータステキストが返却される","中","シリアライザ"
"957","UT-MCH-143","machine.serializers.MachineConfigSerializer","get_errors","正常系","エラーリストが文字列リストで返却されること","errorsにエラーが存在","get_errors(obj)を呼び出し","文字列リストが返却される","中","シリアライザ"
"958","UT-MCH-144","machine.serializers.MachineConfigSerializer","get_is_driver_available","正常系","ドライバー利用可否が返却されること","machineとdriverが存在","get_is_driver_available(obj)を呼び出し","Trueが返却される","中","シリアライザ"
"959","UT-MCH-145","machine.serializers.MachineConfigSerializer","get_restart_required","正常系","再起動要求状態が返却されること","machineにrestart_required=True","get_restart_required(obj)を呼び出し","Trueが返却される","中","シリアライザ"
"960","UT-MCH-146","machine.serializers.MachineDriverSerializer","get_errors","正常系","ドライバーエラーが文字列リストで返却されること","driver_instanceにエラーが存在","get_errors(obj)を呼び出し","文字列リストが返却される","中","シリアライザ"
"961","UT-MCH-147","machine.serializers.MachineDriverSerializer","get_errors","境界値","driver_instanceがNoneの場合空リストが返却されること","driver_instanceが存在しない","get_errors(obj)を呼び出し","空リストが返却される","中","シリアライザ"
"962","UT-MCH-148","machine.serializers.BaseMachineClassSerializer","get_provider_file","正常系","クラス定義ファイルパスが返却されること","BaseMachineTypeサブクラス","get_provider_file(obj)を呼び出し","ファイルパス文字列が返却される","低","シリアライザ"
"963","UT-MCH-149","machine.serializers.BaseMachineClassSerializer","get_provider_plugin","正常系","プラグイン情報dictが返却されること","プラグインがクラスを提供","get_provider_plugin(obj)を呼び出し","{slug, name, pk}のdictが返却される","低","シリアライザ"
"964","UT-MCH-150","machine.serializers.BaseMachineClassSerializer","get_provider_plugin","境界値","プラグインがない場合Noneが返却されること","ビルトインクラス","get_provider_plugin(obj)を呼び出し","Noneが返却される","低","シリアライザ"
"965","UT-MCH-151","machine.serializers.BaseMachineClassSerializer","get_is_builtin","正常系","ビルトインフラグが返却されること","ビルトインクラス","get_is_builtin(obj)を呼び出し","Trueが返却される","低","シリアライザ"
"966","UT-MCH-152","machine.api.get_machine","","正常系","レジストリからマシンが取得できること","machineがレジストリに存在","get_machine(pk)を呼び出し","BaseMachineTypeインスタンスが返却される","中","API関数"
"967","UT-MCH-153","machine.api.get_machine","","異常系","マシンが存在しない場合NotFoundが発生すること","machineがレジストリに未存在","get_machine(""invalid-pk"")を呼び出し","NotFound例外が発生する","中","API関数"
"968","UT-MCH-154","machine.api.MachineList","get","正常系","マシン一覧が返却されること","MachineConfigが複数存在","GET /api/machine/","マシン一覧がJSON形式で返却される","中","APIエンドポイント"
"969","UT-MCH-155","machine.api.MachineList","post","正常系","新規マシンが作成されること","有効なパラメータ","POST /api/machine/ {name, machine_type, driver}","201とマシン情報が返却される","高","APIエンドポイント"
"970","UT-MCH-156","machine.api.MachineDetail","get","正常系","マシン詳細が返却されること","MachineConfigが存在","GET /api/machine/{pk}/","マシン詳細がJSON形式で返却される","中","APIエンドポイント"
"971","UT-MCH-157","machine.api.MachineDetail","put","正常系","マシンが更新されること","MachineConfigが存在","PUT /api/machine/{pk}/ {name, active}","200と更新後のマシン情報が返却される","中","APIエンドポイント"
"972","UT-MCH-158","machine.api.MachineDetail","delete","正常系","マシンが削除されること","MachineConfigが存在","DELETE /api/machine/{pk}/","204が返却される","高","APIエンドポイント"
"973","UT-MCH-159","machine.api.MachineSettingList","get","正常系","マシン設定一覧が返却されること","MachineSettingが存在","GET /api/machine/{pk}/settings/","設定一覧がJSON形式で返却される","中","APIエンドポイント"
"974","UT-MCH-160","machine.api.MachineSettingDetail","get","正常系","マシン設定詳細が返却されること","MachineSettingが存在","GET /api/machine/{pk}/settings/{config_type}/{key}/","設定詳細がJSON形式で返却される","中","APIエンドポイント"
"975","UT-MCH-161","machine.api.MachineSettingDetail","get","異常系","存在しない設定の場合NotFoundが発生すること","設定が未定義","GET /api/machine/{pk}/settings/M/NONEXISTENT/","NotFound例外が発生する","中","APIエンドポイント"
"976","UT-MCH-162","machine.api.MachineRestart","post","正常系","マシン再起動が実行されること","マシンが存在","POST /api/machine/{pk}/restart/","{ok: true}が返却される","高","APIエンドポイント"
"977","UT-MCH-163","machine.api.MachineTypesList","get","正常系","マシンタイプ一覧が返却されること","マシンタイプが登録済み","GET /api/machine/types/","タイプ一覧がJSON形式で返却される","中","APIエンドポイント"
"978","UT-MCH-164","machine.api.MachineDriverList","get","正常系","ドライバー一覧が返却されること","ドライバーが登録済み","GET /api/machine/drivers/","ドライバー一覧がJSON形式で返却される","中","APIエンドポイント"
"979","UT-MCH-165","machine.api.MachineDriverList","get","正常系","machine_typeでフィルターできること","複数タイプのドライバーが存在","GET /api/machine/drivers/?machine_type=label-printer","指定タイプのドライバーのみ返却される","中","APIエンドポイント"
"980","UT-MCH-166","machine.api.RegistryStatusView","get","正常系","レジストリステータスが返却されること","なし","GET /api/machine/status/","{registry_errors: [...]}が返却される","中","APIエンドポイント"
"981","UT-ORD-001","order.models.TotalPriceMixin","save","正常系","保存時に総価格が自動更新されること","注文とline itemsが存在","なし","total_priceが再計算されて保存される","高","金額計算の重要なロジック"
"982","UT-ORD-002","order.models.TotalPriceMixin","currency","正常系","order_currency設定時にその通貨が返却されること","order_currency=USD","なし","USDが返却される","中","通貨優先順位: order_currency > company.currency > default"
"983","UT-ORD-003","order.models.TotalPriceMixin","currency","正常系","order_currency未設定時にcompanyの通貨が返却されること","order_currency=None, company.currency_code=EUR","なし","EURが返却される","中",""
"984","UT-ORD-004","order.models.TotalPriceMixin","currency","正常系","通貨未設定時にデフォルト通貨が返却されること","order_currency=None, company=None","なし","currency_code_default()の値が返却される","中",""
"985","UT-ORD-005","order.models.TotalPriceMixin","update_total_price","正常系","総価格が正しく更新されること","複数のline itemsが存在","commit=True","total_priceが更新され保存される","高",""
"986","UT-ORD-006","order.models.TotalPriceMixin","calculate_total_price","正常系","全line itemsの価格合計が返却されること","line items: qty=2, price=100; qty=3, price=200","target_currency=USD","800 USDが返却される","高","金額計算の重要なロジック"
"987","UT-ORD-007","order.models.TotalPriceMixin","calculate_total_price","正常系","extra_linesを含めた価格合計が返却されること","lines + extra_linesが存在","target_currency=USD","合計金額が正しく計算される","高",""
"988","UT-ORD-008","order.models.TotalPriceMixin","calculate_total_price","異常系","為替レート未設定時にNoneが返却されること","異なる通貨のline itemsあり、為替レートなし","target_currency=JPY","Noneが返却される","中","MissingRate例外処理"
"989","UT-ORD-009","order.models.TotalPriceMixin","calculate_total_price","境界値","PKがNoneの場合に0が返却されること","未保存のインスタンス","target_currency=USD","Money(0, USD)が返却される","中",""
"990","UT-ORD-010","order.models.Order","save","正常系","保存時にreference_intが再構築されること","reference='PO-0001'","なし","reference_intが設定される","中",""
"991","UT-ORD-011","order.models.Order","save","正常系","creation_date未設定時に現在日付が設定されること","新規作成","creation_date=None","current_date()が設定される","中",""
"992","UT-ORD-012","order.models.Order","save","異常系","ロックされた注文の変更でValidationErrorが発生すること","完了済みかつロック設定有効","status以外のフィールド変更","ValidationError発生","高","データ整合性保護"
"993","UT-ORD-013","order.models.Order","check_locked","正常系","未完了の注文でFalseが返却されること","status=PENDING","db=False","Falseが返却される","中",""
"994","UT-ORD-014","order.models.Order","check_locked","正常系","完了注文でUNLOCK_SETTING有効時にFalseが返却されること","status=COMPLETE, UNLOCK_SETTING=True","db=False","Falseが返却される","中",""
"995","UT-ORD-015","order.models.Order","check_complete","正常系","完了ステータス時にTrueが返却されること","status in STATUS_CLASS.COMPLETE","db=False","Trueが返却される","中",""
"996","UT-ORD-016","order.models.Order","clean","異常系","responsibleが必須で未設定時にValidationErrorが発生すること","REQUIRE_RESPONSIBLE_SETTING=True, responsible=None","なし","ValidationError発生","高","認証・認可関連"
"997","UT-ORD-017","order.models.Order","clean","異常系","contactがcompanyと一致しない場合にValidationErrorが発生すること","company=A, contact.company=B","なし","ValidationError発生","中","データ整合性"
"998","UT-ORD-018","order.models.Order","clean","異常系","target_dateがstart_dateより前の場合にValidationErrorが発生すること","start_date=2024-01-10, target_date=2024-01-05","なし","ValidationError発生","中",""
"999","UT-ORD-019","order.models.Order","clean","異常系","addressがcompanyと一致しない場合にValidationErrorが発生すること","company=A, address.company=B","なし","ValidationError発生","中",""
"1000","UT-ORD-020","order.models.Order","overdue_filter","正常系","期限切れフィルタが正しいQueryを返すこと","なし","なし","status in OPEN, target_date < today のQ objectが返却される","中",""
"1001","UT-ORD-021","order.models.Order","is_overdue","正常系","期限切れ注文でTrueが返却されること","target_date < today, status=OPEN","なし","Trueが返却される","中",""
"1002","UT-ORD-022","order.models.Order","is_overdue","正常系","期限内注文でFalseが返却されること","target_date >= today","なし","Falseが返却される","中",""
"1003","UT-ORD-023","order.models.Order","report_context","正常系","レポートコンテキストが正しく生成されること","注文が存在","なし","description, extra_lines, lines, order, reference, titleを含むdictが返却される","低",""
"1004","UT-ORD-024","order.models.PurchaseOrder","__str__","正常系","文字列表現が正しいフォーマットで返却されること","reference='PO-001', supplier.name='Supplier A'","なし","'PO-001 - Supplier A'が返却される","低",""
"1005","UT-ORD-025","order.models.PurchaseOrder","__str__","異常系","supplier削除時に'deleted'が表示されること","supplier=None","なし","'PO-001 - deleted'が返却される","低",""
"1006","UT-ORD-026","order.models.PurchaseOrder","get_absolute_url","正常系","正しいURLが返却されること","pk=123","なし","'/purchasing/purchase-order/123'を含むURLが返却される","低",""
"1007","UT-ORD-027","order.models.PurchaseOrder","get_api_url","正常系","API URLが返却されること","なし","なし","'api-po-list'のreverse URLが返却される","低",""
"1008","UT-ORD-028","order.models.PurchaseOrder","get_status_class","正常系","PurchaseOrderStatusGroupsが返却されること","なし","なし","PurchaseOrderStatusGroupsクラスが返却される","低",""
"1009","UT-ORD-029","order.models.PurchaseOrder","api_defaults","正常系","デフォルト値に次のreferenceが含まれること","なし","request=None","{'reference': 'PO-XXX'}形式のdictが返却される","低",""
"1010","UT-ORD-030","order.models.PurchaseOrder","barcode_model_type_code","正常系","'PO'が返却されること","なし","なし","'PO'が返却される","低",""
"1011","UT-ORD-031","order.models.PurchaseOrder","subscribed_users","正常系","購読ユーザーリストが返却されること","line itemsにpartあり、partに購読者あり","なし","購読ユーザーのリストが返却される","中",""
"1012","UT-ORD-032","order.models.PurchaseOrder","status_text","正常系","ステータステキストが返却されること","status=PENDING","なし","'Pending'が返却される","低",""
"1013","UT-ORD-033","order.models.PurchaseOrder","company","正常系","supplierが返却されること","supplier=CompanyA","なし","CompanyAが返却される","低","Order基底クラスとの互換性"
"1014","UT-ORD-034","order.models.PurchaseOrder","add_line_item","正常系","新規line itemが作成されること","supplier_part, quantity=10","group=False","PurchaseOrderLineItemが作成される","高",""
"1015","UT-ORD-035","order.models.PurchaseOrder","add_line_item","正常系","既存line itemに数量が追加されること","同じsupplier_partのline itemが存在","group=True, quantity=5","既存line itemのquantityが増加","中",""
"1016","UT-ORD-036","order.models.PurchaseOrder","add_line_item","異常系","数量が0以下でValidationErrorが発生すること","supplier_part","quantity=0","ValidationError発生","高","バリデーション"
"1017","UT-ORD-037","order.models.PurchaseOrder","add_line_item","異常系","数量が整数でない場合にValidationErrorが発生すること","supplier_part","quantity='abc'","ValidationError発生","中",""
"1018","UT-ORD-038","order.models.PurchaseOrder","add_line_item","異常系","supplier_partのsupplierがPOと異なる場合にValidationErrorが発生すること","PO.supplier=A, supplier_part.supplier=B","quantity=10","ValidationError発生","高","データ整合性"
"1019","UT-ORD-039","order.models.PurchaseOrder","_action_place","正常系","PLACEDステータスに遷移すること","status=PENDING","なし","status=PLACED, issue_dateが設定される","高","状態遷移"
"1020","UT-ORD-040","order.models.PurchaseOrder","_action_place","状態遷移","PENDING以外からは遷移しないこと","status=COMPLETE","なし","ステータス変更なし","中",""
"1021","UT-ORD-041","order.models.PurchaseOrder","_action_complete","正常系","COMPLETEステータスに遷移すること","status=PLACED","なし","status=COMPLETE, complete_dateが設定される","高","状態遷移"
"1022","UT-ORD-042","order.models.PurchaseOrder","can_issue","正常系","PENDING/ON_HOLDでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1023","UT-ORD-043","order.models.PurchaseOrder","can_issue","正常系","COMPLETE/CANCELLEDでFalseが返却されること","status=COMPLETE","なし","Falseが返却される","中",""
"1024","UT-ORD-044","order.models.PurchaseOrder","place_order","正常系","PLACEDへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","高",""
"1025","UT-ORD-045","order.models.PurchaseOrder","complete_order","正常系","COMPLETEへの遷移が実行されること","status=PLACED","なし","handle_transitionが呼ばれる","高",""
"1026","UT-ORD-046","order.models.PurchaseOrder","hold_order","正常系","ON_HOLDへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","中",""
"1027","UT-ORD-047","order.models.PurchaseOrder","cancel_order","正常系","CANCELLEDへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","中",""
"1028","UT-ORD-048","order.models.PurchaseOrder","can_cancel","正常系","OPENステータスでTrueが返却されること","status in OPEN","なし","Trueが返却される","中",""
"1029","UT-ORD-049","order.models.PurchaseOrder","_action_cancel","正常系","CANCELLEDステータスに遷移すること","status=PENDING","なし","status=CANCELLEDになる","中",""
"1030","UT-ORD-050","order.models.PurchaseOrder","can_hold","正常系","PENDING/PLACEDでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1031","UT-ORD-051","order.models.PurchaseOrder","_action_hold","正常系","ON_HOLDステータスに遷移すること","status=PENDING","なし","status=ON_HOLDになる","中",""
"1032","UT-ORD-052","order.models.PurchaseOrder","pending_line_items","正常系","未完了line itemsが返却されること","qty=10, received=5のline itemあり","なし","received < quantityのline itemsが返却される","中",""
"1033","UT-ORD-053","order.models.PurchaseOrder","completed_line_items","正常系","完了line itemsが返却されること","qty=10, received=10のline itemあり","なし","received >= quantityのline itemsが返却される","中",""
"1034","UT-ORD-054","order.models.PurchaseOrder","line_count","正常系","line items数が返却されること","3つのline itemsあり","なし","3が返却される","低",""
"1035","UT-ORD-055","order.models.PurchaseOrder","completed_line_count","正常系","完了line items数が返却されること","2つの完了line itemsあり","なし","2が返却される","低",""
"1036","UT-ORD-056","order.models.PurchaseOrder","pending_line_count","正常系","未完了line items数が返却されること","1つの未完了line itemあり","なし","1が返却される","低",""
"1037","UT-ORD-057","order.models.PurchaseOrder","is_complete","正常系","全line items完了時にTrueが返却されること","全line itemsでreceived >= quantity","なし","Trueが返却される","中",""
"1038","UT-ORD-058","order.models.PurchaseOrder","is_complete","正常系","未完了line items存在時にFalseが返却されること","未完了line itemあり","なし","Falseが返却される","中",""
"1039","UT-ORD-059","order.models.PurchaseOrder","is_pending","正常系","PENDINGステータス時にTrueが返却されること","status=PENDING","なし","Trueが返却される","低",""
"1040","UT-ORD-060","order.models.PurchaseOrder","is_open","正常系","OPENグループステータス時にTrueが返却されること","status=PLACED","なし","Trueが返却される","低",""
"1041","UT-ORD-061","order.models.PurchaseOrder","receive_line_items","正常系","複数line itemsを受領しStockItemsが作成されること","status=PLACED, line items指定","items=[{line_item, quantity}]","StockItemsが作成される","高","在庫数量関連"
"1042","UT-ORD-062","order.models.PurchaseOrder","receive_line_items","異常系","PLACEDステータス以外でValidationErrorが発生すること","status=PENDING","items指定","ValidationError発生","高",""
"1043","UT-ORD-063","order.models.PurchaseOrder","receive_line_items","異常系","負の数量でValidationErrorが発生すること","status=PLACED","quantity=-1","ValidationError発生","高","バリデーション"
"1044","UT-ORD-064","order.models.PurchaseOrder","receive_line_items","正常系","シリアル番号指定時に複数StockItemsが作成されること","status=PLACED","serials=['SN1', 'SN2']","2つのStockItemsが作成される","高",""
"1045","UT-ORD-065","order.models.PurchaseOrder","receive_line_items","正常系","build_orderリンク時に正しく処理されること","status=PLACED, line item with build_order","items指定","build orderとの関連が正しく設定される","高",""
"1046","UT-ORD-066","order.models.PurchaseOrder","receive_line_items","正常系","自動完了設定時に注文が完了すること","PURCHASEORDER_AUTO_COMPLETE=True, 全line items受領","items指定","status=COMPLETEになる","高",""
"1047","UT-ORD-067","order.models.PurchaseOrder","receive_line_item","正常系","単一line itemが受領されること","status=PLACED, line item指定","line, location, quantity, user","receive_line_itemsが呼ばれる","中","ラッパーメソッド"
"1048","UT-ORD-068","order.models.SalesOrder","__str__","正常系","文字列表現が正しいフォーマットで返却されること","reference='SO-001', customer.name='Customer A'","なし","'SO-001 - Customer A'が返却される","低",""
"1049","UT-ORD-069","order.models.SalesOrder","get_absolute_url","正常系","正しいURLが返却されること","pk=456","なし","'/sales/sales-order/456'を含むURLが返却される","低",""
"1050","UT-ORD-070","order.models.SalesOrder","get_api_url","正常系","API URLが返却されること","なし","なし","'api-so-list'のreverse URLが返却される","低",""
"1051","UT-ORD-071","order.models.SalesOrder","barcode_model_type_code","正常系","'SO'が返却されること","なし","なし","'SO'が返却される","低",""
"1052","UT-ORD-072","order.models.SalesOrder","subscribed_users","正常系","購読ユーザーリストが返却されること","line itemsにpartあり","なし","購読ユーザーのリストが返却される","中",""
"1053","UT-ORD-073","order.models.SalesOrder","company","正常系","customerが返却されること","customer=CompanyB","なし","CompanyBが返却される","低",""
"1054","UT-ORD-074","order.models.SalesOrder","is_pending","正常系","PENDINGステータス時にTrueが返却されること","status=PENDING","なし","Trueが返却される","低",""
"1055","UT-ORD-075","order.models.SalesOrder","is_open","正常系","OPENグループステータス時にTrueが返却されること","status=IN_PROGRESS","なし","Trueが返却される","低",""
"1056","UT-ORD-076","order.models.SalesOrder","stock_allocations","正常系","全allocationsが返却されること","allocationsあり","なし","SalesOrderAllocationのQuerySetが返却される","中",""
"1057","UT-ORD-077","order.models.SalesOrder","is_fully_allocated","正常系","全line items割当済みでTrueが返却されること","全line itemsが完全割当済み","なし","Trueが返却される","中",""
"1058","UT-ORD-078","order.models.SalesOrder","is_fully_allocated","正常系","未割当line itemありでFalseが返却されること","未割当line itemあり","なし","Falseが返却される","中",""
"1059","UT-ORD-079","order.models.SalesOrder","is_overallocated","正常系","過剰割当line itemありでTrueが返却されること","過剰割当line itemあり","なし","Trueが返却される","中",""
"1060","UT-ORD-080","order.models.SalesOrder","is_completed","正常系","全line items出荷済みでTrueが返却されること","全line itemsでshipped >= quantity","なし","Trueが返却される","中",""
"1061","UT-ORD-081","order.models.SalesOrder","is_completed","正常系","virtualパーツは無視されること","virtualパーツのみ未出荷","なし","Trueが返却される","中",""
"1062","UT-ORD-082","order.models.SalesOrder","can_complete","正常系","完了可能な場合にTrueが返却されること","全条件満たす","raise_error=False","Trueが返却される","中",""
"1063","UT-ORD-083","order.models.SalesOrder","can_complete","異常系","既に完了済みでValidationErrorが発生すること","status=COMPLETE","raise_error=True","ValidationError発生","中",""
"1064","UT-ORD-084","order.models.SalesOrder","can_complete","異常系","未完了shipmentありでValidationErrorが発生すること","pending_shipment_count > 0","raise_error=True","ValidationError発生","高",""
"1065","UT-ORD-085","order.models.SalesOrder","can_complete","異常系","未完了allocationありでValidationErrorが発生すること","pending_allocation_count > 0","raise_error=True","ValidationError発生","高",""
"1066","UT-ORD-086","order.models.SalesOrder","can_issue","正常系","PENDING/ON_HOLDでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1067","UT-ORD-087","order.models.SalesOrder","_action_place","正常系","IN_PROGRESSステータスに遷移すること","status=PENDING","なし","status=IN_PROGRESS, issue_dateが設定される","高","状態遷移"
"1068","UT-ORD-088","order.models.SalesOrder","can_hold","正常系","PENDING/IN_PROGRESSでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1069","UT-ORD-089","order.models.SalesOrder","_action_hold","正常系","ON_HOLDステータスに遷移すること","status=PENDING","なし","status=ON_HOLDになる","中",""
"1070","UT-ORD-090","order.models.SalesOrder","_action_complete","正常系","SHIPPED/COMPLETEステータスに遷移すること","全条件満たす","user指定","status変更, shipment_date設定","高","状態遷移"
"1071","UT-ORD-091","order.models.SalesOrder","_action_complete","正常系","virtualパーツのshipped数量が更新されること","virtualパーツのline itemあり","user指定","shipped=quantityになる","中",""
"1072","UT-ORD-092","order.models.SalesOrder","can_cancel","正常系","OPENステータスでTrueが返却されること","status=IN_PROGRESS","なし","Trueが返却される","中",""
"1073","UT-ORD-093","order.models.SalesOrder","_action_cancel","正常系","CANCELLEDステータスに遷移しallocationsが削除されること","status=IN_PROGRESS, allocationsあり","なし","status=CANCELLED, allocations削除","高","状態遷移"
"1074","UT-ORD-094","order.models.SalesOrder","issue_order","正常系","IN_PROGRESSへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","高",""
"1075","UT-ORD-095","order.models.SalesOrder","ship_order","正常系","SHIPPEDへの遷移が実行されること","完了可能な状態","user指定","handle_transitionが呼ばれる","高",""
"1076","UT-ORD-096","order.models.SalesOrder","complete_order","正常系","COMPLETEへの遷移が実行されること","完了可能な状態","user指定","handle_transitionが呼ばれる","高",""
"1077","UT-ORD-097","order.models.SalesOrder","pending_line_items","正常系","未完了line itemsが返却されること","shipped < quantityのline itemあり","なし","未完了line itemsが返却される","中",""
"1078","UT-ORD-098","order.models.SalesOrder","completed_line_items","正常系","完了line itemsが返却されること","shipped >= quantityのline itemあり","なし","完了line itemsが返却される","中",""
"1079","UT-ORD-099","order.models.SalesOrder","completed_shipments","正常系","完了shipmentが返却されること","shipment_date設定済みのshipmentあり","なし","完了shipmentsが返却される","中",""
"1080","UT-ORD-100","order.models.SalesOrder","pending_shipments","正常系","未完了shipmentが返却されること","shipment_date=Noneのshipmentあり","なし","未完了shipmentsが返却される","中",""
"1081","UT-ORD-101","order.models.SalesOrder","allocations","正常系","全allocationsが返却されること","allocationsあり","なし","SalesOrderAllocationのQuerySetが返却される","中",""
"1082","UT-ORD-102","order.models.SalesOrder","pending_allocations","正常系","未出荷allocationsが返却されること","未出荷allocationsあり","なし","shipment=None または shipment.shipment_date=Noneのallocationsが返却される","中",""
"1083","UT-ORD-103","order.models.OrderLineItem","save","異常系","ロックされた注文のline item変更でValidationErrorが発生すること","order.check_locked()=True","なし","ValidationError発生","高","データ整合性"
"1084","UT-ORD-104","order.models.OrderLineItem","save","正常系","保存時にorderのsaveが呼ばれること","order存在","update_order=True","order.save()が呼ばれる","中",""
"1085","UT-ORD-105","order.models.OrderLineItem","delete","異常系","ロックされた注文のline item削除でValidationErrorが発生すること","order.check_locked()=True","なし","ValidationError発生","高","データ整合性"
"1086","UT-ORD-106","order.models.OrderLineItem","total_line_price","正常系","quantity * priceが返却されること","quantity=5, price=100","なし","500が返却される","高","金額計算"
"1087","UT-ORD-107","order.models.OrderLineItem","total_line_price","境界値","price未設定時にNoneが返却されること","quantity=5, price=None","なし","Noneが返却される","中",""
"1088","UT-ORD-108","order.models.PurchaseOrderLineItem","clean","異常系","supplier_partのsupplierがorderと異なる場合にValidationErrorが発生すること","order.supplier=A, part.supplier=B","なし","ValidationError発生","高","データ整合性"
"1089","UT-ORD-109","order.models.PurchaseOrderLineItem","clean","異常系","build_orderが外部でない場合にValidationErrorが発生すること","build_order.external=False","なし","ValidationError発生","高",""
"1090","UT-ORD-110","order.models.PurchaseOrderLineItem","clean","異常系","build_orderのpartが一致しない場合にValidationErrorが発生すること","build_order.part != part.part","なし","ValidationError発生","高",""
"1091","UT-ORD-111","order.models.PurchaseOrderLineItem","__str__","正常系","文字列表現が正しいフォーマットで返却されること","quantity=10, part.SKU='SKU-001'","なし","'10 x SKU-001 - PO-001'形式が返却される","低",""
"1092","UT-ORD-112","order.models.PurchaseOrderLineItem","get_base_part","正常系","base partが返却されること","part.part=PartA","なし","PartAが返却される","中",""
"1093","UT-ORD-113","order.models.PurchaseOrderLineItem","get_base_part","境界値","part未設定時にNoneが返却されること","part=None","なし","Noneが返却される","中",""
"1094","UT-ORD-114","order.models.PurchaseOrderLineItem","price","正常系","purchase_priceが返却されること","purchase_price=100","なし","100が返却される","低",""
"1095","UT-ORD-115","order.models.PurchaseOrderLineItem","get_destination","正常系","line itemのdestinationが返却されること","destination=LocationA","なし","LocationAが返却される","中",""
"1096","UT-ORD-116","order.models.PurchaseOrderLineItem","get_destination","正常系","orderのdestinationが返却されること","destination=None, order.destination=LocationB","なし","LocationBが返却される","中",""
"1097","UT-ORD-117","order.models.PurchaseOrderLineItem","get_destination","正常系","partのdefault_locationが返却されること","destination=None, order.destination=None, part.part.default_location=LocationC","なし","LocationCが返却される","中",""
"1098","UT-ORD-118","order.models.PurchaseOrderLineItem","remaining","正常系","残数量が返却されること","quantity=10, received=3","なし","7が返却される","中",""
"1099","UT-ORD-119","order.models.PurchaseOrderLineItem","remaining","境界値","負の値にならないこと","quantity=5, received=10","なし","0が返却される","中",""
"1100","UT-ORD-120","order.models.PurchaseOrderLineItem","is_completed","正常系","received >= quantityでTrueが返却されること","quantity=10, received=10","なし","Trueが返却される","中",""
"1101","UT-ORD-121","order.models.PurchaseOrderLineItem","update_pricing","正常系","supplier partの価格で更新されること","part.get_price()=1000, quantity=10","なし","purchase_price=100に更新される","高","金額計算"
"1102","UT-ORD-122","order.models.SalesOrderLineItem","clean","異常系","salable=Falseのpartが指定された場合にValidationErrorが発生すること","part.salable=False","なし","ValidationError発生","高","バリデーション"
"1103","UT-ORD-123","order.models.SalesOrderLineItem","price","正常系","sale_priceが返却されること","sale_price=150","なし","150が返却される","低",""
"1104","UT-ORD-124","order.models.SalesOrderLineItem","fulfilled_quantity","正常系","出荷済み数量が返却されること","stock_itemsあり","なし","stock_items.quantity合計が返却される","中",""
"1105","UT-ORD-125","order.models.SalesOrderLineItem","fulfilled_quantity","境界値","PK未設定時に0が返却されること","未保存インスタンス","なし","0が返却される","中",""
"1106","UT-ORD-126","order.models.SalesOrderLineItem","allocated_quantity","正常系","割当済み数量が返却されること","allocationsあり","なし","allocations.quantity合計が返却される","中",""
"1107","UT-ORD-127","order.models.SalesOrderLineItem","allocated_quantity","境界値","PK未設定時に0が返却されること","未保存インスタンス","なし","0が返却される","中",""
"1108","UT-ORD-128","order.models.SalesOrderLineItem","is_fully_allocated","正常系","完全割当時にTrueが返却されること","allocated_quantity >= quantity","なし","Trueが返却される","中",""
"1109","UT-ORD-129","order.models.SalesOrderLineItem","is_fully_allocated","正常系","virtualパーツでTrueが返却されること","part.virtual=True","なし","Trueが返却される","中",""
"1110","UT-ORD-130","order.models.SalesOrderLineItem","is_overallocated","正常系","過剰割当時にTrueが返却されること","allocated_quantity > quantity","なし","Trueが返却される","中",""
"1111","UT-ORD-131","order.models.SalesOrderLineItem","is_completed","正常系","shipped >= quantityでTrueが返却されること","shipped=10, quantity=10","なし","Trueが返却される","中",""
"1112","UT-ORD-132","order.models.SalesOrderLineItem","is_completed","正常系","virtualパーツでTrueが返却されること","part.virtual=True","なし","Trueが返却される","中",""
"1113","UT-ORD-133","order.models.SalesOrderShipment","clean","異常系","shipment_addressがcustomerと一致しない場合にValidationErrorが発生すること","order.customer=A, shipment_address.company=B","なし","ValidationError発生","中","データ整合性"
"1114","UT-ORD-134","order.models.SalesOrderShipment","get_api_url","正常系","API URLが返却されること","なし","なし","'api-so-shipment-list'のreverse URLが返却される","低",""
"1115","UT-ORD-135","order.models.SalesOrderShipment","barcode_model_type_code","正常系","'SS'が返却されること","なし","なし","'SS'が返却される","低",""
"1116","UT-ORD-136","order.models.SalesOrderShipment","address","正常系","shipment_addressが返却されること","shipment_address=AddressA","なし","AddressAが返却される","低",""
"1117","UT-ORD-137","order.models.SalesOrderShipment","address","正常系","shipment_address未設定時にorder.addressが返却されること","shipment_address=None, order.address=AddressB","なし","AddressBが返却される","低",""
"1118","UT-ORD-138","order.models.SalesOrderShipment","is_checked","正常系","checked_by設定時にTrueが返却されること","checked_by=User","なし","Trueが返却される","低",""
"1119","UT-ORD-139","order.models.SalesOrderShipment","is_complete","正常系","shipment_date設定時にTrueが返却されること","shipment_date=2024-01-01","なし","Trueが返却される","低",""
"1120","UT-ORD-140","order.models.SalesOrderShipment","is_delivered","正常系","delivery_date設定時にTrueが返却されること","delivery_date=2024-01-05","なし","Trueが返却される","低",""
"1121","UT-ORD-141","order.models.SalesOrderShipment","check_can_complete","正常系","完了可能な場合にTrueが返却されること","allocationsあり, shipment_date=None, checked or check不要","raise_error=True","Trueが返却される","中",""
"1122","UT-ORD-142","order.models.SalesOrderShipment","check_can_complete","異常系","既に出荷済みでValidationErrorが発生すること","shipment_date設定済み","raise_error=True","ValidationError発生","中",""
"1123","UT-ORD-143","order.models.SalesOrderShipment","check_can_complete","異常系","allocationsなしでValidationErrorが発生すること","allocations.count()=0","raise_error=True","ValidationError発生","高",""
"1124","UT-ORD-144","order.models.SalesOrderShipment","check_can_complete","異常系","チェック必須で未チェック時にValidationErrorが発生すること","SALESORDER_SHIPMENT_REQUIRES_CHECK=True, checked_by=None","raise_error=True","ValidationError発生","中",""
"1125","UT-ORD-145","order.models.SalesOrderShipment","complete_shipment","正常系","shipmentが完了すること","完了可能な状態","user, tracking_number, invoice_number等","shipment_date設定, バックグラウンドタスク開始","高",""
"1126","UT-ORD-146","order.models.SalesOrderShipment","complete_shipment","正常系","オプションパラメータが設定されること","完了可能な状態","tracking_number='TRK001'","tracking_number='TRK001'が設定される","中",""
"1127","UT-ORD-147","order.models.SalesOrderShipment","report_context","正常系","レポートコンテキストが正しく生成されること","shipmentが存在","なし","allocations, order, address, reference等を含むdictが返却される","低",""
"1128","UT-ORD-148","order.models.SalesOrderAllocation","clean","異常系","item未設定時にValidationErrorが発生すること","item=None","なし","ValidationError発生","高","バリデーション"
"1129","UT-ORD-149","order.models.SalesOrderAllocation","clean","異常系","line.partとitem.partが異なる場合にValidationErrorが発生すること","line.part=PartA, item.part=PartB","なし","ValidationError発生","高",""
"1130","UT-ORD-150","order.models.SalesOrderAllocation","clean","異常系","quantity > item.quantityでValidationErrorが発生すること","item.quantity=5, quantity=10","なし","ValidationError発生","高","在庫数量関連"
"1131","UT-ORD-151","order.models.SalesOrderAllocation","clean","異常系","過剰割当時にValidationErrorが発生すること","total_allocation > item.quantity","なし","ValidationError発生","高","在庫数量関連"
"1132","UT-ORD-152","order.models.SalesOrderAllocation","clean","異常系","quantity <= 0でValidationErrorが発生すること","quantity=0","なし","ValidationError発生","高",""
"1133","UT-ORD-153","order.models.SalesOrderAllocation","clean","異常系","シリアル品でquantity != 1でValidationErrorが発生すること","item.serial='SN001', quantity=2","なし","ValidationError発生","高",""
"1134","UT-ORD-154","order.models.SalesOrderAllocation","clean","異常系","shipmentとline.orderが一致しない場合にValidationErrorが発生すること","line.order=OrderA, shipment.order=OrderB","なし","ValidationError発生","高","データ整合性"
"1135","UT-ORD-155","order.models.SalesOrderAllocation","get_location","正常系","item.location.idが返却されること","item.location=LocationA","なし","LocationA.idが返却される","低",""
"1136","UT-ORD-156","order.models.SalesOrderAllocation","get_location","境界値","location未設定時にNoneが返却されること","item.location=None","なし","Noneが返却される","低",""
"1137","UT-ORD-157","order.models.SalesOrderAllocation","get_po","正常系","item.purchase_orderが返却されること","item.purchase_order=PO1","なし","PO1が返却される","低",""
"1138","UT-ORD-158","order.models.SalesOrderAllocation","complete_allocation","正常系","割当が完了しstockがcustomerに移動すること","全条件満たす","user指定","allocateToCustomer呼出, line.shipped更新","高","在庫数量関連"
"1139","UT-ORD-159","order.models.ReturnOrder","__str__","正常系","文字列表現が正しいフォーマットで返却されること","reference='RO-001', customer.name='Customer A'","なし","'RO-001 - Customer A'が返却される","低",""
"1140","UT-ORD-160","order.models.ReturnOrder","get_absolute_url","正常系","正しいURLが返却されること","pk=789","なし","'/sales/return-order/789'を含むURLが返却される","低",""
"1141","UT-ORD-161","order.models.ReturnOrder","get_api_url","正常系","API URLが返却されること","なし","なし","'api-return-order-list'のreverse URLが返却される","低",""
"1142","UT-ORD-162","order.models.ReturnOrder","barcode_model_type_code","正常系","'RO'が返却されること","なし","なし","'RO'が返却される","低",""
"1143","UT-ORD-163","order.models.ReturnOrder","subscribed_users","正常系","購読ユーザーリストが返却されること","line itemsにitem.partあり","なし","購読ユーザーのリストが返却される","中",""
"1144","UT-ORD-164","order.models.ReturnOrder","company","正常系","customerが返却されること","customer=CompanyC","なし","CompanyCが返却される","低",""
"1145","UT-ORD-165","order.models.ReturnOrder","is_pending","正常系","PENDINGステータス時にTrueが返却されること","status=PENDING","なし","Trueが返却される","低",""
"1146","UT-ORD-166","order.models.ReturnOrder","is_open","正常系","OPENグループステータス時にTrueが返却されること","status=IN_PROGRESS","なし","Trueが返却される","低",""
"1147","UT-ORD-167","order.models.ReturnOrder","is_received","正常系","全line items受領済みでTrueが返却されること","全line itemsでreceived_date設定済み","なし","Trueが返却される","中",""
"1148","UT-ORD-168","order.models.ReturnOrder","is_received","正常系","未受領line itemありでFalseが返却されること","received_date=Noneのline itemあり","なし","Falseが返却される","中",""
"1149","UT-ORD-169","order.models.ReturnOrder","can_hold","正常系","PENDING/IN_PROGRESSでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1150","UT-ORD-170","order.models.ReturnOrder","_action_hold","正常系","ON_HOLDステータスに遷移すること","status=PENDING","なし","status=ON_HOLDになる","中",""
"1151","UT-ORD-171","order.models.ReturnOrder","can_cancel","正常系","OPENステータスでTrueが返却されること","status=IN_PROGRESS","なし","Trueが返却される","中",""
"1152","UT-ORD-172","order.models.ReturnOrder","_action_cancel","正常系","CANCELLEDステータスに遷移すること","status=IN_PROGRESS","なし","status=CANCELLEDになる","中",""
"1153","UT-ORD-173","order.models.ReturnOrder","_action_complete","正常系","COMPLETEステータスに遷移すること","status=IN_PROGRESS","なし","status=COMPLETE, complete_date設定","高","状態遷移"
"1154","UT-ORD-174","order.models.ReturnOrder","can_issue","正常系","PENDING/ON_HOLDでTrueが返却されること","status=PENDING","なし","Trueが返却される","中",""
"1155","UT-ORD-175","order.models.ReturnOrder","_action_place","正常系","IN_PROGRESSステータスに遷移すること","status=PENDING","なし","status=IN_PROGRESS, issue_date設定","高","状態遷移"
"1156","UT-ORD-176","order.models.ReturnOrder","hold_order","正常系","ON_HOLDへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","中",""
"1157","UT-ORD-177","order.models.ReturnOrder","issue_order","正常系","IN_PROGRESSへの遷移が実行されること","status=PENDING","なし","handle_transitionが呼ばれる","高",""
"1158","UT-ORD-178","order.models.ReturnOrder","complete_order","正常系","COMPLETEへの遷移が実行されること","status=IN_PROGRESS","なし","handle_transitionが呼ばれる","高",""
"1159","UT-ORD-179","order.models.ReturnOrder","cancel_order","正常系","CANCELLEDへの遷移が実行されること","status=IN_PROGRESS","なし","handle_transitionが呼ばれる","中",""
"1160","UT-ORD-180","order.models.ReturnOrder","receive_line_item","正常系","line itemが受領されること","line item, location指定","user, note, status","StockItem更新, line.received_date設定","高","在庫数量関連"
"1161","UT-ORD-181","order.models.ReturnOrder","receive_line_item","正常系","部分数量の場合にStockItemが分割されること","line.quantity < stock_item.quantity","user指定","StockItemが分割される","高","在庫数量関連"
"1162","UT-ORD-182","order.models.ReturnOrder","receive_line_item","異常系","既に受領済みの場合に処理がスキップされること","line.received_date設定済み","user指定","処理がスキップされる","中",""
"1163","UT-ORD-183","order.models.ReturnOrderLineItem","clean","異常系","item未設定時にValidationErrorが発生すること","item=None","なし","ValidationError発生","高","バリデーション"
"1164","UT-ORD-184","order.models.ReturnOrderLineItem","clean","異常系","quantity > item.quantityでValidationErrorが発生すること","item.quantity=5, quantity=10","なし","ValidationError発生","高","在庫数量関連"
"1165","UT-ORD-185","order.models.ReturnOrderLineItem","clean","異常系","quantity <= 0でValidationErrorが発生すること","quantity=0","なし","ValidationError発生","高",""
"1166","UT-ORD-186","order.models.ReturnOrderLineItem","clean","異常系","シリアル品でquantity != 1でValidationErrorが発生すること","item.serialized=True, quantity=2","なし","ValidationError発生","高",""
"1167","UT-ORD-187","order.models.ReturnOrderLineItem","received","正常系","received_date設定時にTrueが返却されること","received_date=2024-01-01","なし","Trueが返却される","低",""
"1168","UT-ORD-188","order.models.ReturnOrderLineItem","received","正常系","received_date未設定時にFalseが返却されること","received_date=None","なし","Falseが返却される","低",""
"1169","UT-ORD-189","order.status_codes.PurchaseOrderStatus","値定義","正常系","全ステータス値が正しく定義されていること","なし","なし","PENDING=10, PLACED=20, ON_HOLD=25, COMPLETE=30, CANCELLED=40, LOST=50, RETURNED=60","低","ステータスコード定義"
"1170","UT-ORD-190","order.status_codes.PurchaseOrderStatusGroups","OPEN","正常系","OPENグループにPENDING, ON_HOLD, PLACEDが含まれること","なし","なし","[10, 25, 20]が返却される","低",""
"1171","UT-ORD-191","order.status_codes.PurchaseOrderStatusGroups","FAILED","正常系","FAILEDグループにCANCELLED, LOST, RETURNEDが含まれること","なし","なし","[40, 50, 60]が返却される","低",""
"1172","UT-ORD-192","order.status_codes.SalesOrderStatus","値定義","正常系","全ステータス値が正しく定義されていること","なし","なし","PENDING=10, IN_PROGRESS=15, SHIPPED=20, ON_HOLD=25, COMPLETE=30, CANCELLED=40, LOST=50, RETURNED=60","低","ステータスコード定義"
"1173","UT-ORD-193","order.status_codes.SalesOrderStatusGroups","OPEN","正常系","OPENグループにPENDING, ON_HOLD, IN_PROGRESSが含まれること","なし","なし","[10, 25, 15]が返却される","低",""
"1174","UT-ORD-194","order.status_codes.ReturnOrderStatus","値定義","正常系","全ステータス値が正しく定義されていること","なし","なし","PENDING=10, IN_PROGRESS=20, ON_HOLD=25, COMPLETE=30, CANCELLED=40","低","ステータスコード定義"
"1175","UT-ORD-195","order.status_codes.ReturnOrderLineStatus","値定義","正常系","全ステータス値が正しく定義されていること","なし","なし","PENDING=10, RETURN=20, REPAIR=30, REPLACE=40, REFUND=50, REJECT=60","低","ステータスコード定義"
"1176","UT-ORD-196","order.tasks.notify_overdue_purchase_order","","正常系","期限切れ通知が送信されること","POが存在","po=期限切れPO","通知がtriggerされイベントが発火","中","通知機能"
"1177","UT-ORD-197","order.tasks.notify_overdue_purchase_order","","正常系","created_byとresponsibleに通知されること","created_by, responsible設定済み","po指定","両ユーザーに通知","中",""
"1178","UT-ORD-198","order.tasks.check_overdue_purchase_orders","","正常系","昨日が期限のPOに通知が送られること","target_date=yesterday, status in OPEN","なし","notify_overdue_purchase_orderが呼ばれる","中","スケジュールタスク"
"1179","UT-ORD-199","order.tasks.check_overdue_purchase_orders","","正常系","期限切れline itemsのPOにも通知が送られること","line item.target_date=yesterday","なし","notify_overdue_purchase_orderが呼ばれる","中",""
"1180","UT-ORD-200","order.tasks.notify_overdue_sales_order","","正常系","期限切れ通知が送信されること","SOが存在","so=期限切れSO","通知がtriggerされイベントが発火","中","通知機能"
"1181","UT-ORD-201","order.tasks.check_overdue_sales_orders","","正常系","昨日が期限のSOに通知が送られること","target_date=yesterday, status in OPEN","なし","notify_overdue_sales_orderが呼ばれる","中","スケジュールタスク"
"1182","UT-ORD-202","order.tasks.notify_overdue_return_order","","正常系","期限切れ通知が送信されること","ROが存在","ro=期限切れRO","通知がtriggerされイベントが発火","中","通知機能"
"1183","UT-ORD-203","order.tasks.check_overdue_return_orders","","正常系","昨日が期限のROに通知が送られること","target_date=yesterday, status in OPEN","なし","notify_overdue_return_orderが呼ばれる","中","スケジュールタスク"
"1184","UT-ORD-204","order.tasks.complete_sales_order_shipment","","正常系","shipmentの全allocationsが完了すること","shipment_id存在","shipment_id, user_id","各allocationのcomplete_allocationが呼ばれる","高","バックグラウンドタスク"
"1185","UT-ORD-205","order.tasks.complete_sales_order_shipment","","異常系","存在しないshipment_idで処理がスキップされること","存在しないshipment_id","shipment_id=999999","ログ出力のみで正常終了","中",""
"1186","UT-ORD-206","order.validators.generate_next_sales_order_reference","","正常系","次のSO参照が生成されること","既存SO参照あり","なし","次のreference文字列が返却される","中","参照生成"
"1187","UT-ORD-207","order.validators.generate_next_purchase_order_reference","","正常系","次のPO参照が生成されること","既存PO参照あり","なし","次のreference文字列が返却される","中","参照生成"
"1188","UT-ORD-208","order.validators.generate_next_return_order_reference","","正常系","次のRO参照が生成されること","既存RO参照あり","なし","次のreference文字列が返却される","中","参照生成"
"1189","UT-ORD-209","order.validators.validate_sales_order_reference_pattern","","正常系","有効なパターンが検証に成功すること","なし","pattern='SO-{ref:05d}'","例外が発生しない","中",""
"1190","UT-ORD-210","order.validators.validate_sales_order_reference_pattern","","異常系","無効なパターンで例外が発生すること","なし","pattern='invalid'","ValidationError発生","中",""
"1191","UT-ORD-211","order.validators.validate_purchase_order_reference_pattern","","正常系","有効なパターンが検証に成功すること","なし","pattern='PO-{ref:05d}'","例外が発生しない","中",""
"1192","UT-ORD-212","order.validators.validate_return_order_reference_pattern","","正常系","有効なパターンが検証に成功すること","なし","pattern='RO-{ref:05d}'","例外が発生しない","中",""
"1193","UT-ORD-213","order.validators.validate_sales_order_reference","","正常系","有効な参照が検証に成功すること","なし","value='SO-00001'","例外が発生しない","中",""
"1194","UT-ORD-214","order.validators.validate_sales_order_reference","","異常系","無効な参照で例外が発生すること","なし","value='invalid'","ValidationError発生","中",""
"1195","UT-ORD-215","order.validators.validate_purchase_order_reference","","正常系","有効な参照が検証に成功すること","なし","value='PO-00001'","例外が発生しない","中",""
"1196","UT-ORD-216","order.validators.validate_return_order_reference","","正常系","有効な参照が検証に成功すること","なし","value='RO-00001'","例外が発生しない","中",""
"1197","UT-ORD-217","order.events.PurchaseOrderEvents","PLACED","正常系","イベント名が正しいこと","なし","なし","'purchaseorder.placed'","低","イベント定義"
"1198","UT-ORD-218","order.events.PurchaseOrderEvents","COMPLETED","正常系","イベント名が正しいこと","なし","なし","'purchaseorder.completed'","低",""
"1199","UT-ORD-219","order.events.PurchaseOrderEvents","CANCELLED","正常系","イベント名が正しいこと","なし","なし","'purchaseorder.cancelled'","低",""
"1200","UT-ORD-220","order.events.SalesOrderEvents","ISSUED","正常系","イベント名が正しいこと","なし","なし","'salesorder.issued'","低","イベント定義"
"1201","UT-ORD-221","order.events.SalesOrderEvents","SHIPMENT_COMPLETE","正常系","イベント名が正しいこと","なし","なし","'salesordershipment.completed'","低",""
"1202","UT-ORD-222","order.events.ReturnOrderEvents","ISSUED","正常系","イベント名が正しいこと","なし","なし","'returnorder.issued'","低","イベント定義"
"1203","UT-ORD-223","order.events.ReturnOrderEvents","RECEIVED","正常系","イベント名が正しいこと","なし","なし","'returnorder.received'","低",""
"1204","UT-ORD-224","order.models.after_save_sales_order","","正常系","デフォルトshipmentが作成されること","SALESORDER_DEFAULT_SHIPMENT=True, 新規SO作成","created=True","SalesOrderShipmentが作成される","中","シグナルハンドラ"
"1205","UT-ORD-225","order.models.after_save_sales_order","","正常系","設定無効時にshipmentが作成されないこと","SALESORDER_DEFAULT_SHIPMENT=False","created=True","SalesOrderShipmentが作成されない","中",""
"1206","UT-PRT-001","part.models.PartCategory","delete","正常系","子カテゴリを含めずに削除できること","PartCategoryが存在する","delete_child_categories=False","カテゴリが削除され、子カテゴリは親に移動する","高","階層構造の整合性"
"1207","UT-PRT-002","part.models.PartCategory","delete","正常系","子カテゴリを含めて削除できること","PartCategoryと子カテゴリが存在する","delete_child_categories=True","カテゴリと子カテゴリが全て削除される","高","階層構造の整合性"
"1208","UT-PRT-003","part.models.PartCategory","clean","異常系","structuralカテゴリにパーツが割り当てられている場合ValidationErrorが発生すること","パーツが割り当てられたカテゴリが存在する","structural=True","ValidationError発生","高","データ整合性"
"1209","UT-PRT-004","part.models.PartCategory","get_parts","正常系","カスケードtrueで子カテゴリのパーツも取得できること","親カテゴリと子カテゴリにパーツが存在する","cascade=True","全てのパーツが取得される","中","リレーション"
"1210","UT-PRT-005","part.models.PartCategory","get_parts","正常系","カスケードfalseで直接のパーツのみ取得できること","親カテゴリと子カテゴリにパーツが存在する","cascade=False","直接のパーツのみ取得される","中","リレーション"
"1211","UT-PRT-006","part.models.PartCategory","partcount","正常系","アクティブなパーツのみカウントできること","アクティブ・非アクティブパーツが存在する","active=True","アクティブパーツ数が返却される","中","フィルタリング"
"1212","UT-PRT-007","part.models.PartCategory","icon","正常系","_iconが設定されていればその値が返却されること","_icon=ti:folder","なし","ti:folderが返却される","低","プロパティ"
"1213","UT-PRT-008","part.models.PartCategory","icon","正常系","_iconが未設定でデフォルトアイコンが設定されていればデフォルト値が返却されること","_icon=None、グローバル設定にデフォルトアイコン設定済み","なし","デフォルトアイコンが返却される","低","プロパティ"
"1214","UT-PRT-009","part.models.PartCategory","get_subscribers","正常系","購読ユーザーが正しく取得できること","PartCategoryStarが存在する","include_parents=True","購読ユーザーリストが返却される","中","通知機能"
"1215","UT-PRT-010","part.models.PartCategory","is_starred_by","正常系","指定ユーザーが購読しているか判定できること","ユーザーがカテゴリを購読済み","user=購読ユーザー","Trueが返却される","中","通知機能"
"1216","UT-PRT-011","part.models.PartCategory","set_starred","正常系","購読状態を設定できること","購読していないユーザー","status=True","PartCategoryStarが作成される","中","通知機能"
"1217","UT-PRT-012","part.models.PartCategory","set_starred","正常系","購読解除できること","購読しているユーザー","status=False","PartCategoryStarが削除される","中","通知機能"
"1218","UT-PRT-013","part.models.PartCategoryParameterTemplate","clean","正常系","default_valueが正しく検証されること","テンプレートにunits設定あり","default_value=10mm","検証成功","中","バリデーション"
"1219","UT-PRT-014","part.models.PartCategoryParameterTemplate","clean","異常系","default_valueが不正な単位の場合ValidationErrorが発生すること","テンプレートにunits設定あり","default_value=invalid","ValidationError発生","中","バリデーション"
"1220","UT-PRT-015","part.models.Part","delete","異常系","ロックされたパーツは削除できないこと","locked=Trueのパーツ","なし","ValidationError発生","高","データ保護"
"1221","UT-PRT-016","part.models.Part","delete","異常系","アクティブなパーツは削除できないこと","active=Trueのパーツ","なし","ValidationError発生","高","データ保護"
"1222","UT-PRT-017","part.models.Part","delete","異常系","BOMで使用中のパーツは設定により削除できないこと","BomItemで参照されているパーツ","PART_ALLOW_DELETE_FROM_ASSEMBLY=False","ValidationError発生","高","データ整合性"
"1223","UT-PRT-018","part.models.Part","save","正常系","新規作成時にensure_trackableが呼ばれること","新規パーツ","trackable=True","trackable設定が親パーツに伝播する","高","データ整合性"
"1224","UT-PRT-019","part.models.Part","save","正常系","画像変更時に古い画像が削除されること","他パーツから参照されていない画像が設定済み","新しい画像を設定","古い画像が削除される","中","ファイル管理"
"1225","UT-PRT-020","part.models.Part","check_add_to_bom","正常系","自身をBOMに追加できないこと","パーツA","parent=パーツA","Falseが返却される","高","循環参照防止"
"1226","UT-PRT-021","part.models.Part","check_add_to_bom","正常系","同じバリアントツリーのパーツはBOMに追加できないこと","variant_ofで関連するパーツ","parent=バリアントパーツ","Falseが返却される","高","循環参照防止"
"1227","UT-PRT-022","part.models.Part","check_add_to_bom","正常系","BOMに含まれるパーツをBOMに追加できないこと","パーツBがパーツAのBOMに存在","parent=パーツB","Falseが返却される","高","循環参照防止"
"1228","UT-PRT-023","part.models.Part","validate_name","正常系","プラグインによる名前検証が実行されること","Validationプラグインが登録済み","name=TestPart","プラグインの検証結果に従う","中","拡張性"
"1229","UT-PRT-024","part.models.Part","validate_ipn","正常系","IPN正規表現パターンに一致する場合検証成功すること","PART_IPN_REGEX設定済み","IPN=パターンに一致","検証成功","高","バリデーション"
"1230","UT-PRT-025","part.models.Part","validate_ipn","異常系","IPN正規表現パターンに一致しない場合ValidationErrorが発生すること","PART_IPN_REGEX設定済み","IPN=パターンに不一致","ValidationError発生","高","バリデーション"
"1231","UT-PRT-026","part.models.Part","validate_revision","異常系","自身のリビジョンにはなれないこと","パーツA","revision_of=パーツA","ValidationError発生","高","バリデーション"
"1232","UT-PRT-027","part.models.Part","validate_revision","異常系","リビジョンのリビジョンは作成できないこと","パーツBがパーツAのリビジョン","revision_of=パーツB","ValidationError発生","高","バリデーション"
"1233","UT-PRT-028","part.models.Part","validate_revision","異常系","リビジョンにはリビジョンコードが必須であること","revision_ofが設定済み","revision=None","ValidationError発生","高","バリデーション"
"1234","UT-PRT-029","part.models.Part","validate_serial_number","正常系","有効なシリアル番号が検証成功すること","パーツにシリアル番号未使用","serial=SN001","Trueが返却される","高","シリアル番号管理"
"1235","UT-PRT-030","part.models.Part","validate_serial_number","異常系","重複シリアル番号で検証失敗すること","同一シリアル番号のStockItem存在","serial=既存SN","Falseまたは ValidationError","高","シリアル番号管理"
"1236","UT-PRT-031","part.models.Part","validate_serial_number","正常系","グローバルユニーク設定時に全パーツでユニークチェックされること","SERIAL_NUMBER_GLOBALLY_UNIQUE=True","serial=SN001","全パーツで重複チェック実施","高","シリアル番号管理"
"1237","UT-PRT-032","part.models.Part","find_conflicting_serial_numbers","正常系","競合するシリアル番号リストを取得できること","一部のシリアル番号が既存","serials=[SN001, SN002, SN003]","競合するシリアル番号リストが返却される","中","シリアル番号管理"
"1238","UT-PRT-033","part.models.Part","get_latest_serial_number","正常系","最新のシリアル番号を取得できること","複数StockItemにシリアル番号設定済み","なし","最大のシリアル番号が返却される","中","シリアル番号管理"
"1239","UT-PRT-034","part.models.Part","get_next_serial_number","正常系","次のシリアル番号を取得できること","最新シリアル番号がSN099","なし","SN100等のインクリメント値","中","シリアル番号管理"
"1240","UT-PRT-035","part.models.Part","full_name","正常系","PART_NAME_FORMAT設定に従ってフルネームが生成されること","PART_NAME_FORMAT設定済み","なし","フォーマットに従った名前が返却される","中","プロパティ"
"1241","UT-PRT-036","part.models.Part","validate_unique","異常系","重複IPNで設定により検証失敗すること","PART_ALLOW_DUPLICATE_IPN=False","IPN=既存IPN","ValidationError発生","高","一意性制約"
"1242","UT-PRT-037","part.models.Part","validate_unique","正常系","重複IPNで設定により検証成功すること","PART_ALLOW_DUPLICATE_IPN=True","IPN=既存IPN","検証成功","高","一意性制約"
"1243","UT-PRT-038","part.models.Part","clean","異常系","structuralカテゴリにはパーツを割り当てられないこと","category.structural=True","なし","ValidationError発生","高","バリデーション"
"1244","UT-PRT-039","part.models.Part","ensure_trackable","正常系","trackableパーツを使用する親パーツもtrackableになること","trackable=Trueのパーツ","BOMに追加","親パーツのtrackable=True","高","データ整合性"
"1245","UT-PRT-040","part.models.Part","get_default_location","正常系","デフォルトロケーションが設定されていればそれを返却すること","default_location設定済み","なし","設定されたロケーションが返却される","中","プロパティ"
"1246","UT-PRT-041","part.models.Part","get_default_location","正常系","パーツに未設定でカテゴリにロケーション設定があればそれを返却すること","パーツ未設定、カテゴリ設定済み","なし","カテゴリのロケーションが返却される","中","プロパティ"
"1247","UT-PRT-042","part.models.Part","get_default_supplier","正常系","default_supplier設定済みならそれを返却すること","default_supplier設定済み","なし","設定されたサプライヤーが返却される","中","プロパティ"
"1248","UT-PRT-043","part.models.Part","get_default_supplier","正常系","サプライヤーが1件のみなら自動選択されること","supplier_parts=1件","なし","唯一のサプライヤーが返却される","中","プロパティ"
"1249","UT-PRT-044","part.models.Part","available_stock","正常系","利用可能在庫数が正しく計算されること","total_stock=100、allocation=30","なし","70が返却される","高","在庫計算"
"1250","UT-PRT-045","part.models.Part","available_stock","境界値","アロケーションが総在庫を超える場合0が返却されること","total_stock=50、allocation=80","なし","0が返却される","高","在庫計算"
"1251","UT-PRT-046","part.models.Part","requiring_build_orders","正常系","このパーツを必要とするビルドオーダーを取得できること","BOMでパーツが使用され、アクティブなビルドオーダー存在","include_variants=True","ビルドオーダーリストが返却される","中","関連データ取得"
"1252","UT-PRT-047","part.models.Part","required_build_order_quantity","正常系","ビルドオーダーに必要な数量を計算できること","アクティブなビルドオーダー存在","include_variants=True","必要数量が返却される","高","在庫計算"
"1253","UT-PRT-048","part.models.Part","requiring_sales_orders","正常系","このパーツを必要とする販売オーダーを取得できること","オープンな販売オーダーのラインアイテムに含まれる","include_variants=True","販売オーダーセットが返却される","中","関連データ取得"
"1254","UT-PRT-049","part.models.Part","required_sales_order_quantity","正常系","販売オーダーに必要な数量を計算できること","オープンな販売オーダー存在","include_variants=True","必要数量が返却される","高","在庫計算"
"1255","UT-PRT-050","part.models.Part","quantity_to_order","正常系","発注が必要な数量を正しく計算すること","required=100, total_stock=50, on_order=20","なし","30が返却される","高","在庫計算"
"1256","UT-PRT-051","part.models.Part","net_stock","正常系","ネット在庫が正しく計算されること","total_stock=100, allocation=30, on_order=50","なし","120が返却される","高","在庫計算"
"1257","UT-PRT-052","part.models.Part","get_subscribers","正常系","パーツ購読者リストを取得できること","PartStarが存在する","include_variants=True","購読ユーザーリストが返却される","中","通知機能"
"1258","UT-PRT-053","part.models.Part","is_starred_by","正常系","指定ユーザーが購読しているか判定できること","ユーザーがパーツを購読済み","user=購読ユーザー","Trueが返却される","中","通知機能"
"1259","UT-PRT-054","part.models.Part","set_starred","正常系","購読状態を設定できること","購読していないユーザー","status=True","PartStarが作成される","中","通知機能"
"1260","UT-PRT-055","part.models.Part","can_build","正常系","利用可能在庫でビルド可能数を計算できること","BOMアイテムと在庫存在","なし","ビルド可能数が返却される","高","在庫計算"
"1261","UT-PRT-056","part.models.Part","can_build","境界値","BOMがない場合0が返却されること","assembly=Falseまたは has_bom=False","なし","0が返却される","高","在庫計算"
"1262","UT-PRT-057","part.models.Part","active_builds","正常系","アクティブなビルドオーダーを取得できること","アクティブなビルドオーダー存在","なし","アクティブなビルドオーダーリスト","中","リレーション"
"1263","UT-PRT-058","part.models.Part","quantity_being_built","正常系","現在ビルド中の数量を取得できること","アクティブなビルドオーダー存在","include_variants=True","ビルド中の数量","中","在庫計算"
"1264","UT-PRT-059","part.models.Part","build_order_allocation_count","正常系","ビルドオーダーへの割当数量を取得できること","BuildItemによる割当存在","include_variants=True","割当数量が返却される","高","在庫計算"
"1265","UT-PRT-060","part.models.Part","sales_order_allocation_count","正常系","販売オーダーへの割当数量を取得できること","SalesOrderAllocationによる割当存在","include_variants=True","割当数量が返却される","高","在庫計算"
"1266","UT-PRT-061","part.models.Part","allocation_count","正常系","総割当数量を取得できること","ビルド・販売オーダー割当存在","include_variants=True","総割当数量が返却される","高","在庫計算"
"1267","UT-PRT-062","part.models.Part","stock_entries","正常系","在庫エントリを正しく取得できること","StockItem存在","include_variants=True, in_stock=True","在庫エントリクエリセット","中","リレーション"
"1268","UT-PRT-063","part.models.Part","get_stock_count","正常系","在庫数を正しく取得できること","StockItem存在、quantity合計=100","include_variants=True","100が返却される","高","在庫計算"
"1269","UT-PRT-064","part.models.Part","total_stock","正常系","総在庫数プロパティが正しく動作すること","複数StockItem存在","なし","総在庫数が返却される","高","プロパティ"
"1270","UT-PRT-065","part.models.Part","get_bom_items","正常系","BOMアイテムを取得できること","BOMアイテム存在","include_inherited=True","BOMアイテムクエリセット","中","リレーション"
"1271","UT-PRT-066","part.models.Part","get_bom_items","正常系","継承BOMを含めて取得できること","親パーツにinherited BOMアイテム存在","include_inherited=True","親のBOMアイテムも含む","高","リレーション"
"1272","UT-PRT-067","part.models.Part","get_used_in","正常系","このパーツを使用するアセンブリを取得できること","BomItemでsub_partとして参照されている","include_inherited=True","アセンブリパーツリスト","中","リレーション"
"1273","UT-PRT-068","part.models.Part","has_bom","正常系","BOMが存在する場合Trueを返却すること","BOMアイテム存在","なし","Trueが返却される","中","プロパティ"
"1274","UT-PRT-069","part.models.Part","has_bom","正常系","BOMが存在しない場合Falseを返却すること","BOMアイテム無し","なし","Falseが返却される","中","プロパティ"
"1275","UT-PRT-070","part.models.Part","get_bom_hash","正常系","BOMハッシュを計算できること","BOMアイテム存在","なし","ハッシュ文字列が返却される","高","チェックサム"
"1276","UT-PRT-071","part.models.Part","is_bom_valid","正常系","BOMが有効な場合Trueを返却すること","bom_checksum設定済み、ハッシュ一致","なし","Trueが返却される","高","検証"
"1277","UT-PRT-072","part.models.Part","is_bom_valid","正常系","BOMが無効な場合Falseを返却すること","bom_checksum未設定またはハッシュ不一致","なし","Falseが返却される","高","検証"
"1278","UT-PRT-073","part.models.Part","validate_bom","正常系","BOMを検証しチェックサムを保存できること","BOMアイテム存在","user, valid=True","bom_checksum更新、bom_validated=True","高","検証"
"1279","UT-PRT-074","part.models.Part","clear_bom","正常系","BOMアイテムを全削除できること","BOMアイテム存在","なし","直接のBOMアイテムが全削除される","中","削除"
"1280","UT-PRT-075","part.models.Part","pricing","正常系","PartPricingインスタンスを取得または作成できること","PartPricing存在しない","なし","新規PartPricingインスタンス","中","プロパティ"
"1281","UT-PRT-076","part.models.Part","update_pricing","正常系","価格情報を更新できること","PartPricing存在","なし","価格情報が更新される","高","価格計算"
"1282","UT-PRT-077","part.models.Part","get_price_range","正常系","価格範囲を取得できること","価格情報存在","quantity=1, buy=True","(min_price, max_price)タプル","高","価格計算"
"1283","UT-PRT-078","part.models.Part","get_supplier_price_range","正常系","サプライヤー価格範囲を取得できること","SupplierPart、価格設定存在","quantity=1","(min_price, max_price)タプル","高","価格計算"
"1284","UT-PRT-079","part.models.Part","get_bom_price_range","正常系","BOM価格範囲を取得できること","BOMアイテム、sub_partの価格情報存在","quantity=1","(min_price, max_price)タプル","高","価格計算"
"1285","UT-PRT-080","part.models.Part","copy_bom_from","正常系","他パーツからBOMをコピーできること","コピー元パーツにBOM存在","other=コピー元パーツ","BOMアイテムがコピーされる","中","コピー機能"
"1286","UT-PRT-081","part.models.Part","copy_bom_from","正常系","自身からのコピーは無視されること","パーツA","other=パーツA","何も変更されない","中","コピー機能"
"1287","UT-PRT-082","part.models.Part","copy_tests_from","正常系","他パーツからテストテンプレートをコピーできること","コピー元パーツにテストテンプレート存在","other=コピー元パーツ","テストテンプレートがコピーされる","中","コピー機能"
"1288","UT-PRT-083","part.models.Part","getTestTemplates","正常系","テストテンプレートを取得できること","PartTestTemplate存在","include_parent=True","テストテンプレートクエリセット","中","リレーション"
"1289","UT-PRT-084","part.models.Part","getRequiredTests","正常系","必須テストを取得できること","required=TrueのPartTestTemplate存在","include_parent=True","必須テストクエリセット","中","リレーション"
"1290","UT-PRT-085","part.models.Part","on_order","正常系","発注中の数量を正しく取得できること","オープンなPurchaseOrderLineItem存在","なし","発注中の数量","高","在庫計算"
"1291","UT-PRT-086","part.models.Part","has_variants","正常系","バリアントが存在する場合Trueを返却すること","子バリアントパーツ存在","なし","Trueが返却される","中","プロパティ"
"1292","UT-PRT-087","part.models.Part","get_conversion_options","正常系","バリアント変換オプションを取得できること","バリアントツリー存在","なし","変換可能パーツクエリセット","中","バリアント機能"
"1293","UT-PRT-088","part.models.Part","get_related_parts","正常系","関連パーツを取得できること","PartRelated存在","なし","関連パーツセット","中","リレーション"
"1294","UT-PRT-089","part.models.Part","is_part_low_on_stock","正常系","在庫が最小レベル未満の場合Trueを返却すること","get_stock_count=10, minimum_stock=50","なし","Trueが返却される","高","在庫管理"
"1295","UT-PRT-090","part.models.Part","is_part_low_on_stock","正常系","在庫が最小レベル以上の場合Falseを返却すること","get_stock_count=100, minimum_stock=50","なし","Falseが返却される","高","在庫管理"
"1296","UT-PRT-091","part.models.PartPricing","is_valid","正常系","updatedがNoneでない場合Trueを返却すること","updated設定済み","なし","Trueが返却される","中","プロパティ"
"1297","UT-PRT-092","part.models.PartPricing","convert","正常系","通貨変換が正しく行われること","Money(100, USD)","なし","デフォルト通貨に変換されたMoney","高","通貨変換"
"1298","UT-PRT-093","part.models.PartPricing","convert","異常系","変換レートがない場合Noneを返却すること","存在しない通貨ペア","なし","Noneが返却される","中","通貨変換"
"1299","UT-PRT-094","part.models.PartPricing","update_bom_cost","正常系","BOMコストが正しく計算されること","assembly=True、BOMアイテム存在","save=True","bom_cost_min/maxが更新される","高","価格計算"
"1300","UT-PRT-095","part.models.PartPricing","update_bom_cost","正常系","assembly=Falseの場合BOMコストはNullになること","assembly=False","save=True","bom_cost_min=None, bom_cost_max=None","中","価格計算"
"1301","UT-PRT-096","part.models.PartPricing","update_purchase_cost","正常系","購入コストが正しく計算されること","完了した購入オーダーのラインアイテム存在","save=True","purchase_cost_min/maxが更新される","高","価格計算"
"1302","UT-PRT-097","part.models.PartPricing","update_internal_cost","正常系","内部コストが正しく計算されること","PART_INTERNAL_PRICE=True、内部価格ブレーク存在","save=True","internal_cost_min/maxが更新される","高","価格計算"
"1303","UT-PRT-098","part.models.PartPricing","update_supplier_cost","正常系","サプライヤーコストが正しく計算されること","purchaseable=True、SupplierPriceBreak存在","save=True","supplier_price_min/maxが更新される","高","価格計算"
"1304","UT-PRT-099","part.models.PartPricing","update_variant_cost","正常系","バリアントコストが正しく計算されること","is_template=True、バリアント存在","save=True","variant_cost_min/maxが更新される","高","価格計算"
"1305","UT-PRT-100","part.models.PartPricing","update_overall_cost","正常系","総合コストが正しく計算されること","各種コスト情報存在","なし","overall_min/maxが更新される","高","価格計算"
"1306","UT-PRT-101","part.models.PartPricing","update_sale_cost","正常系","販売コストが正しく計算されること","PartSellPriceBreak存在","save=True","sale_price_min/maxが更新される","高","価格計算"
"1307","UT-PRT-102","part.models.PartPricing","schedule_for_update","正常系","価格更新がスケジュールされること","PartPricing存在","counter=0","scheduled_for_update=True、タスク起動","中","タスク管理"
"1308","UT-PRT-103","part.models.PartPricing","schedule_for_update","境界値","最大深度超過時はスキップされること","counter > MAX_PRICING_DEPTH","counter=51","スケジュールされない","中","タスク管理"
"1309","UT-PRT-104","part.models.PartStocktake","__init__","正常系","棚卸記録が正しく作成されること","パーツ存在","part, quantity, item_count","PartStocktakeインスタンス作成","中","モデル作成"
"1310","UT-PRT-105","part.models.PartSellPriceBreak","get_api_url","正常系","正しいAPIエンドポイントが返却されること","なし","なし","api-part-sale-price-listのURL","低","API"
"1311","UT-PRT-106","part.models.PartInternalPriceBreak","get_api_url","正常系","正しいAPIエンドポイントが返却されること","なし","なし","api-part-internal-price-listのURL","低","API"
"1312","UT-PRT-107","part.models.PartStar","__init__","正常系","パーツ購読が正しく作成されること","パーツとユーザー存在","part, user","PartStarインスタンス作成","中","モデル作成"
"1313","UT-PRT-108","part.models.PartCategoryStar","__init__","正常系","カテゴリ購読が正しく作成されること","カテゴリとユーザー存在","category, user","PartCategoryStarインスタンス作成","中","モデル作成"
"1314","UT-PRT-109","part.models.PartTestTemplate","save","正常系","cleanが呼ばれてから保存されること","PartTestTemplate","test_name=Test1","クリーン後に保存される","中","保存処理"
"1315","UT-PRT-110","part.models.PartTestTemplate","clean","正常系","test_nameがトリムされること","test_name= Test1  (前後スペースあり)","なし","Test1にトリムされる","低","バリデーション"
"1316","UT-PRT-111","part.models.PartTestTemplate","clean","正常系","keyが自動生成されること","test_name=My Test 123","なし","key=mytest123","中","バリデーション"
"1317","UT-PRT-112","part.models.PartTestTemplate","clean","異常系","英数字を含まないtest_nameでValidationErrorが発生すること","test_name=---","なし","ValidationError発生","中","バリデーション"
"1318","UT-PRT-113","part.models.PartTestTemplate","clean","異常系","重複するchoicesでValidationErrorが発生すること","choices=Pass,Fail,Pass","なし","ValidationError発生","中","バリデーション"
"1319","UT-PRT-114","part.models.PartTestTemplate","validate_unique","異常系","testableでないパーツへのテンプレート作成でValidationErrorが発生すること","part.testable=False","なし","ValidationError発生","高","バリデーション"
"1320","UT-PRT-115","part.models.PartTestTemplate","validate_unique","異常系","同じkeyのテストテンプレートが存在する場合ValidationErrorが発生すること","同一パーツツリーに同keyのテンプレート存在","なし","ValidationError発生","高","一意性制約"
"1321","UT-PRT-116","part.models.PartTestTemplate","get_choices","正常系","choices文字列からリストを取得できること","choices=Pass,Fail,N/A","なし","['Pass', 'Fail', 'N/A']","中","ユーティリティ"
"1322","UT-PRT-117","part.models.PartTestTemplate","get_choices","境界値","choicesが空の場合空リストを返却すること","choices=","なし","[]","中","ユーティリティ"
"1323","UT-PRT-118","part.models.BomItem","__str__","正常系","文字列表現が正しく返却されること","BomItem存在","なし","'数量 x サブパーツ名 to make パーツ名'形式","低","文字列表現"
"1324","UT-PRT-119","part.models.BomItem","get_assemblies","正常系","このBOMアイテムを使用するアセンブリを取得できること","inherited=True","なし","アセンブリリスト(パーツと子孫)","中","リレーション"
"1325","UT-PRT-120","part.models.BomItem","get_valid_parts_for_allocation","正常系","割当可能なパーツリストを取得できること","BomItem存在、allow_variants=True","allow_substitutes=True","有効なパーツリスト","高","在庫割当"
"1326","UT-PRT-121","part.models.BomItem","get_valid_parts_for_allocation","正常系","代替パーツを含めて取得できること","BomItemSubstitute存在","allow_substitutes=True","代替パーツも含むリスト","高","在庫割当"
"1327","UT-PRT-122","part.models.BomItem","is_stock_item_valid","正常系","有効なStockItemを判定できること","有効なパーツのStockItem","stock_item","Trueが返却される","高","在庫割当"
"1328","UT-PRT-123","part.models.BomItem","is_stock_item_valid","正常系","無効なStockItemを判定できること","無効なパーツのStockItem","stock_item","Falseが返却される","高","在庫割当"
"1329","UT-PRT-124","part.models.BomItem","delete","異常系","ロックされたアセンブリのBOMアイテムは削除できないこと","part.locked=True","なし","ValidationError発生","高","データ保護"
"1330","UT-PRT-125","part.models.BomItem","save","正常系","cleanが呼ばれてから保存されること","BomItem","なし","クリーン後に保存される","中","保存処理"
"1331","UT-PRT-126","part.models.BomItem","save","正常系","ロックチェックが実行されること","part.locked=False","check_lock=True","正常に保存される","高","データ保護"
"1332","UT-PRT-127","part.models.BomItem","save","異常系","ロックされたアセンブリへの保存でValidationErrorが発生すること","part.locked=True","check_lock=True","ValidationError発生","高","データ保護"
"1333","UT-PRT-128","part.models.BomItem","check_part_lock","正常系","ロックされていないパーツは検証成功すること","assembly.locked=False","なし","例外発生せず","高","バリデーション"
"1334","UT-PRT-129","part.models.BomItem","check_part_lock","異常系","ロックされたパーツでValidationErrorが発生すること","assembly.locked=True","なし","ValidationError発生","高","バリデーション"
"1335","UT-PRT-130","part.models.BomItem","check_part_lock","異常系","inherited=Trueでバリアントがロックされている場合ValidationErrorが発生すること","inherited=True、バリアント.locked=True","なし","ValidationError発生","高","バリデーション"
"1336","UT-PRT-131","part.models.BomItem","hash_fields","正常系","ハッシュ計算に使用するフィールドリストを返却すること","なし","なし","フィールド名リスト","低","ユーティリティ"
"1337","UT-PRT-132","part.models.BomItem","get_item_hash","正常系","BOMアイテムのハッシュを計算できること","BomItem存在","なし","ハッシュ文字列","高","チェックサム"
"1338","UT-PRT-133","part.models.BomItem","validate_hash","正常系","チェックサムを保存できること","BomItem存在","valid=True","checksumが更新される","高","チェックサム"
"1339","UT-PRT-134","part.models.BomItem","validate_hash","正常系","チェックサムをクリアできること","BomItem存在","valid=False","checksum=''","高","チェックサム"
"1340","UT-PRT-135","part.models.BomItem","is_line_valid","正常系","チェックサムが一致する場合Trueを返却すること","checksumが現在のハッシュと一致","なし","Trueが返却される","高","検証"
"1341","UT-PRT-136","part.models.BomItem","is_line_valid","正常系","チェックサムが空の場合Falseを返却すること","checksum=''","なし","Falseが返却される","高","検証"
"1342","UT-PRT-137","part.models.BomItem","is_line_valid","正常系","チェックサムが不一致の場合Falseを返却すること","checksumが異なる値","なし","Falseが返却される","高","検証"
"1343","UT-PRT-138","part.models.BomItem","clean","異常系","自身をsub_partに設定できないこと","part=パーツA","sub_part=パーツA","ValidationError発生","高","循環参照防止"
"1344","UT-PRT-139","part.models.BomItem","clean","異常系","循環参照となるsub_partを設定できないこと","sub_partがpartを使用している","なし","ValidationError発生","高","循環参照防止"
"1345","UT-PRT-140","part.models.BomItem","clean","異常系","trackableなsub_partの場合quantityは整数でなければならないこと","sub_part.trackable=True","quantity=1.5","ValidationError発生","高","バリデーション"
"1346","UT-PRT-141","part.models.BomItem","clean","正常系","trackableなsub_partが追加されると親パーツもtrackableになること","sub_part.trackable=True、part.trackable=False","なし","part.trackable=True","高","データ整合性"
"1347","UT-PRT-142","part.models.BomItem","can_build_quantity","正常系","利用可能在庫でビルド可能数を計算できること","quantity=2, setup_quantity=1","available_stock=11","5が返却される","高","在庫計算"
"1348","UT-PRT-143","part.models.BomItem","can_build_quantity","境界値","在庫不足の場合0を返却すること","quantity=10, setup_quantity=5","available_stock=4","0が返却される","高","在庫計算"
"1349","UT-PRT-144","part.models.BomItem","get_required_quantity","正常系","必要数量を正しく計算できること","quantity=2, attrition=10%, setup_quantity=5","build_quantity=10","27が返却される","高","在庫計算"
"1350","UT-PRT-145","part.models.BomItem","get_required_quantity","正常系","rounding_multipleが適用されること","rounding_multiple=10","build_quantity=1","切り上げた数量","高","在庫計算"
"1351","UT-PRT-146","part.models.BomItem","price_range","正常系","BOMアイテムの価格範囲を取得できること","sub_part.get_price_range存在","なし","価格範囲文字列","中","価格計算"
"1352","UT-PRT-147","part.models.BomItemSubstitute","save","正常系","full_cleanが呼ばれてから保存されること","BomItemSubstitute","なし","クリーン後に保存される","中","保存処理"
"1353","UT-PRT-148","part.models.BomItemSubstitute","validate_unique","異常系","sub_partと同じパーツは代替として設定できないこと","bom_item.sub_part=パーツA","part=パーツA","ValidationError発生","高","バリデーション"
"1354","UT-PRT-149","part.models.PartRelated","__str__","正常系","文字列表現が正しく返却されること","PartRelated存在","なし","'パーツ1 <--> パーツ2'形式","低","文字列表現"
"1355","UT-PRT-150","part.models.PartRelated","save","正常系","clean・validate_uniqueが呼ばれてから保存されること","PartRelated","なし","クリーン・検証後に保存される","中","保存処理"
"1356","UT-PRT-151","part.models.PartRelated","clean","異常系","自身との関連は作成できないこと","part_1=パーツA","part_2=パーツA","ValidationError発生","高","バリデーション"
"1357","UT-PRT-152","part.models.PartRelated","clean","異常系","逆方向の関連が既に存在する場合エラーとなること","part_1=A, part_2=B既存","part_1=B, part_2=A","ValidationError発生","高","一意性制約"
"1358","UT-PRT-153","part.tasks.notify_low_stock","","正常系","低在庫通知が送信されること","アクティブなパーツ、購読者存在","part","通知がトリガーされる","高","通知機能"
"1359","UT-PRT-154","part.tasks.notify_low_stock","","正常系","非アクティブパーツは通知されないこと","active=Falseのパーツ","part","通知がトリガーされない","中","通知機能"
"1360","UT-PRT-155","part.tasks.notify_low_stock_if_required","","正常系","低在庫時に通知タスクが起動されること","is_part_low_on_stock=True","part_id","notify_low_stockがオフロードされる","高","通知機能"
"1361","UT-PRT-156","part.tasks.notify_low_stock_if_required","","正常系","在庫十分時は通知されないこと","is_part_low_on_stock=False","part_id","通知がトリガーされない","高","通知機能"
"1362","UT-PRT-157","part.tasks.update_part_pricing","","正常系","価格更新が実行されること","PartPricing存在","pricing","update_pricingが呼ばれる","高","価格計算"
"1363","UT-PRT-158","part.tasks.check_missing_pricing","","正常系","価格情報のないパーツが検出されること","pricing_data=Noneのパーツ存在","limit=250","スケジュール更新が実行される","中","価格計算"
"1364","UT-PRT-159","part.tasks.rebuild_supplier_parts","","正常系","SupplierPartが再保存されること","SupplierPart存在","part_id","full_clean・saveが呼ばれる","中","データ同期"
"1365","UT-PRT-160","part.tasks.check_bom_valid","","正常系","BOMチェックサムが再計算されること","パーツ存在","part_id","bom_validatedが更新される","高","検証"
"1366","UT-PRT-161","part.tasks.validate_bom","","正常系","BOM検証が実行されること","パーツ存在","part_id, valid=True, user_id","validate_bomが呼ばれる","高","検証"
"1367","UT-PRT-162","part.helpers.compile_full_name_template","","正常系","テンプレートがコンパイルされること","PART_NAME_FORMAT設定済み","なし","Templateオブジェクト","中","ユーティリティ"
"1368","UT-PRT-163","part.helpers.compile_full_name_template","","正常系","キャッシュが機能すること","同じテンプレート文字列で2回呼び出し","なし","キャッシュされたテンプレートが返却される","低","ユーティリティ"
"1369","UT-PRT-164","part.helpers.render_part_full_name","","正常系","パーツのフルネームがレンダリングされること","テンプレート設定済み","part","フォーマットされた名前","中","ユーティリティ"
"1370","UT-PRT-165","part.helpers.render_part_full_name","","正常系","テンプレートエラー時はフォールバックが使用されること","無効なテンプレート","part","IPN | name | revision形式","中","ユーティリティ"
"1371","UT-PRT-166","part.helpers.get_part_image_directory","","正常系","パーツ画像ディレクトリパスが返却されること","なし","なし","MEDIA_ROOT/part_imagesパス","低","ユーティリティ"
"1372","UT-PRT-167","part.helpers.get_part_image_directory","","正常系","ディレクトリが存在しない場合作成されること","ディレクトリ未存在","なし","ディレクトリが作成される","低","ユーティリティ"
"1373","UT-PRT-168","part.stocktake.perform_stocktake","","正常系","アクティブパーツの棚卸エントリが作成されること","STOCKTAKE_ENABLE=True、アクティブパーツ存在","なし","PartStocktakeレコード作成","高","棚卸機能"
"1374","UT-PRT-169","part.stocktake.perform_stocktake","","正常系","STOCKTAKE_ENABLE=Falseの場合何もしないこと","STOCKTAKE_ENABLE=False","なし","処理がスキップされる","中","棚卸機能"
"1375","UT-PRT-170","part.stocktake.perform_stocktake","","正常系","当日既に棚卸済みのパーツはスキップされること","当日のPartStocktake存在","なし","新規レコード作成されない","中","棚卸機能"
"1376","UT-PLG-001","plugin.models.PluginConfig","__str__","正常系","アクティブなプラグインの文字列表現が正しいこと","active=True, name='TestPlugin', key='test'","なし","'TestPlugin - test' が返却される","低","表示用メソッド"
"1377","UT-PLG-002","plugin.models.PluginConfig","__str__","正常系","非アクティブなプラグインの文字列表現が正しいこと","active=False, name='TestPlugin', key='test'","なし","'TestPlugin - test (not active)' が返却される","低","表示用メソッド"
"1378","UT-PLG-003","plugin.models.PluginConfig","get_api_url","正常系","API URLが正しく返却されること","なし","なし","reverse('api-plugin-list') の結果が返却される","低","静的メソッド"
"1379","UT-PLG-004","plugin.models.PluginConfig","mixins","正常系","登録されたmixinが返却されること","プラグインが登録されている","なし","登録されたmixinのdictが返却される","中","プラグイン情報取得"
"1380","UT-PLG-005","plugin.models.PluginConfig","mixins","異常系","プラグインが見つからない場合に空のdictが返却されること","プラグインが登録されていない","なし","空のdict {} が返却される","中","エラーハンドリング"
"1381","UT-PLG-006","plugin.models.PluginConfig","__init__","正常系","metaデータが正しく初期化されること","プラグインがレジストリに存在","なし","meta属性にslug, human_name等が設定される","中","初期化処理"
"1382","UT-PLG-007","plugin.models.PluginConfig","__init__","正常系","非アクティブプラグインのmetaがNoneになること","プラグインが非アクティブ","なし","meta属性の値がすべてNone","中","初期化処理"
"1383","UT-PLG-008","plugin.models.PluginConfig","__getstate__","正常系","pickle用のstateからpluginが除外されること","PluginConfigインスタンス","なし","plugin属性が含まれないstateが返却される","中","シリアライズ対応"
"1384","UT-PLG-009","plugin.models.PluginConfig","save","正常系","アクティブ状態が変更された場合にレジストリがリロードされること","active=Falseから変更","active=True","registry.reload_pluginsが呼び出される","高","プラグイン状態管理"
"1385","UT-PLG-010","plugin.models.PluginConfig","save","正常系","mandatoryプラグインはactiveが強制的にTrueになること","is_mandatory()=True, active=False","active=False","active=Trueで保存される","高","必須プラグイン制御"
"1386","UT-PLG-011","plugin.models.PluginConfig","save","正常系","no_reload=Trueでレジストリリロードがスキップされること","active状態変更あり","no_reload=True","registry.reload_pluginsが呼び出されない","中","リロード制御"
"1387","UT-PLG-012","plugin.models.PluginConfig","is_installed","正常系","プラグインがインストール済みの場合Trueが返却されること","self.plugin が存在","なし","True","中","インストール状態確認"
"1388","UT-PLG-013","plugin.models.PluginConfig","is_installed","正常系","プラグインが未インストールの場合Falseが返却されること","self.plugin = None","なし","False","中","インストール状態確認"
"1389","UT-PLG-014","plugin.models.PluginConfig","is_sample","正常系","サンプルプラグインの場合Trueが返却されること","plugin.check_is_sample()=True","なし","True","低","サンプル判定"
"1390","UT-PLG-015","plugin.models.PluginConfig","is_sample","正常系","pluginがNoneの場合Falseが返却されること","self.plugin = None","なし","False","低","Null安全性"
"1391","UT-PLG-016","plugin.models.PluginConfig","is_builtin","正常系","ビルトインプラグインの場合Trueが返却されること","plugin.check_is_builtin()=True","なし","True","低","ビルトイン判定"
"1392","UT-PLG-017","plugin.models.PluginConfig","is_mandatory","正常系","PLUGINS_MANDATORYに含まれる場合Trueが返却されること","settings.PLUGINS_MANDATORYにkeyが含まれる","なし","True","高","必須判定"
"1393","UT-PLG-018","plugin.models.PluginConfig","is_mandatory","正常系","registry.MANDATORY_PLUGINSに含まれる場合Trueが返却されること","registry.MANDATORY_PLUGINSにkeyが含まれる","なし","True","高","必須判定"
"1394","UT-PLG-019","plugin.models.PluginConfig","is_active","正常系","mandatoryプラグインは常にTrueが返却されること","is_mandatory()=True, active=False","なし","True","高","アクティブ状態判定"
"1395","UT-PLG-020","plugin.models.PluginConfig","is_active","正常系","非mandatoryプラグインはactive属性の値が返却されること","is_mandatory()=False, active=True","なし","True","高","アクティブ状態判定"
"1396","UT-PLG-021","plugin.models.PluginConfig","is_package","正常系","package_nameがある場合Trueが返却されること","package_name='test-package'","なし","True","中","パッケージ判定"
"1397","UT-PLG-022","plugin.models.PluginConfig","is_package","正常系","package_nameがなくpluginにpackage_nameがある場合Trueが返却されること","package_name=None, plugin.package_name='test'","なし","True","中","パッケージ判定"
"1398","UT-PLG-023","plugin.models.PluginConfig","admin_source","正常系","admin_sourceのパスが正しく返却されること","plugin.get_admin_source()が有効なパスを返す","なし","JavaScriptファイルのパス","低","管理画面統合"
"1399","UT-PLG-024","plugin.models.PluginConfig","admin_source","正常系","非アクティブの場合Noneが返却されること","active=False","なし","None","低","管理画面統合"
"1400","UT-PLG-025","plugin.models.PluginConfig","admin_context","正常系","コンテキストデータが正しく返却されること","plugin.get_admin_context()が有効なdictを返す","なし","コンテキストdict","低","管理画面統合"
"1401","UT-PLG-026","plugin.models.PluginConfig","activate","正常系","プラグインがアクティブ化されること","active=False","active=True","active=Trueで保存され、イベントがトリガーされる","高","プラグイン活性化"
"1402","UT-PLG-027","plugin.models.PluginConfig","activate","正常系","プラグインが非アクティブ化されること","active=True","active=False","active=Falseで保存され、静的ファイルがクリアされる","高","プラグイン非活性化"
"1403","UT-PLG-028","plugin.models.PluginConfig","activate","正常系","状態が同じ場合は何もしないこと","active=True","active=True","saveが呼び出されない","中","重複処理防止"
"1404","UT-PLG-029","plugin.models.PluginSetting","to_native_value","正常系","ネイティブ値が正しく返却されること","key='TEST_SETTING', value='123'","なし","get_settingの結果が返却される","中","設定値取得"
"1405","UT-PLG-030","plugin.models.PluginSetting","get_setting_definition","正常系","設定定義が正しく取得されること","pluginが指定され、settingsが存在","key='TEST_KEY', plugin=plugin_config","設定定義dictが返却される","中","設定定義取得"
"1406","UT-PLG-031","plugin.models.PluginSetting","get_setting_definition","正常系","settingsが渡された場合はそれを使用すること","settings引数あり","settings={'KEY': {...}}","引数のsettingsから定義が取得される","中","設定定義取得"
"1407","UT-PLG-032","plugin.models.PluginUserSetting","__str__","正常系","文字列表現が正しいこと","key='THEME', user=testuser, value='dark'","なし","'THEME (for testuser): dark' が返却される","低","表示用メソッド"
"1408","UT-PLG-033","plugin.models.PluginUserSetting","get_setting_definition","正常系","ユーザー設定定義が正しく取得されること","pluginが指定","key='USER_KEY', plugin=plugin_config","ユーザー設定定義dictが返却される","中","ユーザー設定定義取得"
"1409","UT-PLG-034","plugin.plugin.InvenTreePlugin","__init__","正常系","プラグインが正しく初期化されること","なし","なし","BASE mixinが追加され、packageが定義される","高","プラグイン初期化"
"1410","UT-PLG-035","plugin.plugin.InvenTreePlugin","__init_subclass__","異常系","finalメソッドをオーバーライドするとTypeErrorが発生すること","サブクラスでfinalメソッドを定義","なし","TypeError('INVE-E11: ...')","高","セキュリティ制御"
"1411","UT-PLG-036","plugin.plugin.InvenTreePlugin","file","正常系","プラグイン定義ファイルのパスが返却されること","なし","なし","Pathオブジェクトが返却される","低","パス取得"
"1412","UT-PLG-037","plugin.plugin.InvenTreePlugin","path","正常系","プラグインのベースフォルダパスが返却されること","なし","なし","file().parentが返却される","低","パス取得"
"1413","UT-PLG-038","plugin.plugin.InvenTreePlugin","name","正常系","プラグイン名が正しく返却されること","NAME='TestPlugin'","なし","'TestPlugin'","中","メタ情報取得"
"1414","UT-PLG-039","plugin.plugin.InvenTreePlugin","slug","正常系","SLUGが設定されている場合はスラッグ化されて返却されること","SLUG='Test Plugin'","なし","'test-plugin'","中","メタ情報取得"
"1415","UT-PLG-040","plugin.plugin.InvenTreePlugin","slug","正常系","SLUGが未設定の場合はNAMEがスラッグ化されて返却されること","SLUG=None, NAME='Test Plugin'","なし","'test-plugin'","中","メタ情報取得"
"1416","UT-PLG-041","plugin.plugin.InvenTreePlugin","human_name","正常系","TITLEが設定されている場合はTITLEが返却されること","TITLE='Human Readable Name'","なし","'Human Readable Name'","低","メタ情報取得"
"1417","UT-PLG-042","plugin.plugin.InvenTreePlugin","description","正常系","DESCRIPTIONが返却されること","DESCRIPTION='Test Description'","なし","'Test Description'","低","メタ情報取得"
"1418","UT-PLG-043","plugin.plugin.InvenTreePlugin","description","正常系","DESCRIPTIONが未設定の場合はNAMEが返却されること","DESCRIPTION=None, NAME='TestPlugin'","なし","'TestPlugin'","低","メタ情報取得"
"1419","UT-PLG-044","plugin.plugin.InvenTreePlugin","author","正常系","AUTHORが返却されること","AUTHOR='Test Author'","なし","'Test Author'","低","メタ情報取得"
"1420","UT-PLG-045","plugin.plugin.InvenTreePlugin","version","正常系","VERSIONが返却されること","VERSION='1.0.0'","なし","'1.0.0'","中","バージョン情報"
"1421","UT-PLG-046","plugin.plugin.InvenTreePlugin","website","正常系","WEBSITEが返却されること","WEBSITE='https://example.com'","なし","'https://example.com'","低","メタ情報取得"
"1422","UT-PLG-047","plugin.plugin.InvenTreePlugin","license","正常系","LICENSEが返却されること","LICENSE='MIT'","なし","'MIT'","低","メタ情報取得"
"1423","UT-PLG-048","plugin.plugin.InvenTreePlugin","check_version","正常系","バージョン範囲内の場合Trueが返却されること","MIN_VERSION='0.1.0', MAX_VERSION='99.0.0'","latest='1.0.0'","True","高","バージョン検証"
"1424","UT-PLG-049","plugin.plugin.InvenTreePlugin","check_version","正常系","バージョン範囲外の場合Falseが返却されること","MIN_VERSION='2.0.0'","latest='1.0.0'","False","高","バージョン検証"
"1425","UT-PLG-050","plugin.plugin.InvenTreePlugin","is_active","正常系","アクティブなプラグインの場合Trueが返却されること","PluginConfig.active=True","なし","True","高","アクティブ状態"
"1426","UT-PLG-051","plugin.plugin.InvenTreePlugin","is_active","正常系","mandatoryプラグインは常にTrueが返却されること","is_mandatory()=True","なし","True","高","アクティブ状態"
"1427","UT-PLG-052","plugin.plugin.InvenTreePlugin","check_is_sample","正常系","サンプルディレクトリ内のプラグインの場合Trueが返却されること","package_pathが'plugin/samples/'で始まる","なし","True","低","サンプル判定"
"1428","UT-PLG-053","plugin.plugin.InvenTreePlugin","check_is_builtin","正常系","ビルトインディレクトリ内のプラグインの場合Trueが返却されること","package_pathが'plugin/builtin'で始まる","なし","True","低","ビルトイン判定"
"1429","UT-PLG-054","plugin.plugin.InvenTreePlugin","plugin_static_file","正常系","静的ファイルURLが正しく構築されること","SLUG='test', DEBUG=False","'js/main.js'","'/static/plugins/test/js/main.js'","中","静的ファイル"
"1430","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'","中","静的ファイル"
"1431","UT-PLG-056","plugin.plugin.InvenTreePlugin","get_admin_source","正常系","ADMIN_SOURCEが設定されている場合はパスが返却されること","ADMIN_SOURCE='admin.js'","なし","plugin_static_file('admin.js')の結果","低","管理画面統合"
"1432","UT-PLG-057","plugin.plugin.InvenTreePlugin","get_admin_source","正常系","ADMIN_SOURCEが未設定の場合はNoneが返却されること","ADMIN_SOURCE=None","なし","None","低","管理画面統合"
"1433","UT-PLG-058","plugin.plugin.MixinBase","mixin","正常系","登録済みmixinの場合Trueが返却されること","'base' mixinが登録済み","'base'","True","中","mixin管理"
"1434","UT-PLG-059","plugin.plugin.MixinBase","mixin","正常系","未登録mixinの場合Falseが返却されること","'custom' mixinが未登録","'custom'","False","中","mixin管理"
"1435","UT-PLG-060","plugin.plugin.MixinBase","mixin_enabled","正常系","有効なmixinの場合Trueが返却されること","mixinが登録され有効","'base'","True","中","mixin状態"
"1436","UT-PLG-061","plugin.plugin.MixinBase","mixin_enabled","正常系","無効なmixinの場合Falseが返却されること","mixinが登録されているが無効","'disabled'","False","中","mixin状態"
"1437","UT-PLG-062","plugin.plugin.MixinBase","add_mixin","正常系","mixinが正しく追加されること","なし","key='test', fnc_enabled=True","_mixins['test']=True, _mixinreg['test']が設定される","高","mixin登録"
"1438","UT-PLG-063","plugin.plugin.MixinBase","get_registered_mixins","正常系","登録されたmixinが返却されること","複数のmixinが登録済み","なし","登録されたmixinのdict","中","mixin一覧"
"1439","UT-PLG-064","plugin.plugin.MixinBase","get_registered_mixins","正常系","with_base=Falseでbaseが除外されること","baseを含む複数mixinが登録済み","with_base=False","baseが含まれないdict","中","mixin一覧"
"1440","UT-PLG-065","plugin.plugin.MetaBase","get_meta_value","正常系","keyで値が取得できること","属性NAME='Test'が存在","key='NAME'","'Test'","中","メタ値取得"
"1441","UT-PLG-066","plugin.plugin.MetaBase","get_meta_value","正常系","old_keyで値が取得でき警告が出ること","PLUGIN_NAME='OldTest'が存在","key='NAME', old_key='PLUGIN_NAME'","'OldTest' と DeprecationWarning","中","後方互換性"
"1442","UT-PLG-067","plugin.plugin.MetaBase","get_meta_value","正常系","値がない場合__defaultが返却されること","属性が存在しない","key='MISSING', __default='default'","'default'","中","デフォルト値"
"1443","UT-PLG-068","plugin.registry.PluginsRegistry","__init__","正常系","レジストリが正しく初期化されること","なし","なし","plugins, plugins_inactive, plugins_full が空dictで初期化される","高","レジストリ初期化"
"1444","UT-PLG-069","plugin.registry.PluginsRegistry","is_ready","正常系","ready状態が正しく返却されること","ready=True","なし","True","中","準備状態"
"1445","UT-PLG-070","plugin.registry.PluginsRegistry","is_loading","正常系","ロード中状態が正しく返却されること","loading_lock.locked()=True","なし","True","中","ロード状態"
"1446","UT-PLG-071","plugin.registry.PluginsRegistry","get_plugin","正常系","slugでプラグインが取得できること","プラグイン'test'が登録済み","slug='test'","該当プラグインインスタンス","高","プラグイン取得"
"1447","UT-PLG-072","plugin.registry.PluginsRegistry","get_plugin","正常系","存在しないslugの場合Noneが返却されること","プラグイン'unknown'が未登録","slug='unknown'","None (警告ログ出力)","高","プラグイン取得"
"1448","UT-PLG-073","plugin.registry.PluginsRegistry","get_plugin","正常系","active=Falseフィルタが機能すること","プラグインがアクティブ","slug='test', active=False","None","中","フィルタリング"
"1449","UT-PLG-074","plugin.registry.PluginsRegistry","get_plugin","正常系","with_mixinフィルタが機能すること","プラグインが'barcode' mixinを持たない","slug='test', with_mixin='barcode'","None","中","フィルタリング"
"1450","UT-PLG-075","plugin.registry.PluginsRegistry","get_plugin_config","正常系","既存のPluginConfigが返却されること","PluginConfig(key='test')が存在","slug='test'","該当PluginConfigインスタンス","高","設定取得"
"1451","UT-PLG-076","plugin.registry.PluginsRegistry","get_plugin_config","正常系","存在しない場合新規作成されること","PluginConfig(key='new')が存在しない","slug='new'","新規作成されたPluginConfig","高","設定取得"
"1452","UT-PLG-077","plugin.registry.PluginsRegistry","set_plugin_state","正常系","プラグイン状態が更新されること","プラグイン'test'が登録済み","slug='test', state=True","cfg.active=Trueで保存される","高","状態更新"
"1453","UT-PLG-078","plugin.registry.PluginsRegistry","set_plugin_state","異常系","存在しないプラグインの場合警告が出力されること","プラグイン'unknown'が未登録","slug='unknown', state=True","警告ログのみ、例外なし","中","エラーハンドリング"
"1454","UT-PLG-079","plugin.registry.PluginsRegistry","call_plugin_function","正常系","プラグインのメソッドが呼び出されること","プラグイン'test'に'my_func'メソッドが存在","slug='test', func='my_func'","my_funcの戻り値","高","関数呼び出し"
"1455","UT-PLG-080","plugin.registry.PluginsRegistry","call_plugin_function","異常系","プラグインが存在しない場合AttributeErrorが発生すること","プラグイン'unknown'が未登録","slug='unknown', func='any'","AttributeError","高","エラーハンドリング"
"1456","UT-PLG-081","plugin.registry.PluginsRegistry","call_plugin_function","異常系","メソッドが存在しない場合AttributeErrorが発生すること","プラグイン'test'に'missing'メソッドがない","slug='test', func='missing'","AttributeError","高","エラーハンドリング"
"1457","UT-PLG-082","plugin.registry.PluginsRegistry","with_mixin","正常系","指定mixinを持つプラグイン一覧が返却されること","複数プラグインが登録済み、一部が'barcode'を持つ","mixin='barcode'","'barcode' mixinを持つプラグインのリスト","高","mixin検索"
"1458","UT-PLG-083","plugin.registry.PluginsRegistry","with_mixin","正常系","activeフィルタが機能すること","アクティブ/非アクティブなプラグインが混在","mixin='events', active=True","アクティブなプラグインのみのリスト","中","フィルタリング"
"1459","UT-PLG-084","plugin.registry.PluginsRegistry","with_mixin","正常系","builtinフィルタが機能すること","builtin/非builtinプラグインが混在","mixin='base', builtin=True","builtinプラグインのみのリスト","中","フィルタリング"
"1460","UT-PLG-085","plugin.registry.PluginsRegistry","reload_plugins","正常系","プラグインが正しくリロードされること","プラグインが登録済み","full_reload=True, force_reload=True","プラグインがアンロード後ロードされる","高","リロード処理"
"1461","UT-PLG-086","plugin.registry.PluginsRegistry","reload_plugins","正常系","ロード中の場合スキップされること","is_loading=True","なし","リロード処理がスキップされる","中","競合防止"
"1462","UT-PLG-087","plugin.registry.PluginsRegistry","reload_plugins","正常系","collectオプションでプラグイン収集されること","collect=True","collect=True","collect_plugins()が呼び出される","中","プラグイン収集"
"1463","UT-PLG-088","plugin.registry.PluginsRegistry","plugin_dirs","正常系","プラグインディレクトリ一覧が返却されること","PLUGINS_ENABLED=True","なし","'plugin.builtin'を含むリスト","中","ディレクトリ取得"
"1464","UT-PLG-089","plugin.registry.PluginsRegistry","plugin_dirs","正常系","テストモードでsamplesディレクトリが含まれること","TESTING=True","なし","'plugin.samples'がリストに含まれる","低","テスト用"
"1465","UT-PLG-090","plugin.registry.PluginsRegistry","collect_plugins","正常系","プラグインが収集されること","プラグインディレクトリにプラグインが存在","なし","InvenTreePluginのサブクラスのリスト","高","プラグイン収集"
"1466","UT-PLG-091","plugin.registry.PluginsRegistry","discover_mixins","正常系","mixinが収集されること","プラグインがmixinを持つ","なし","mixin_modulesが更新される","中","mixin収集"
"1467","UT-PLG-092","plugin.registry.PluginsRegistry","install_plugin_file","正常系","プラグインファイルがインストールされること","PLUGIN_FILEが存在","なし","install_plugins_fileが呼び出される","中","インストール"
"1468","UT-PLG-093","plugin.registry.PluginsRegistry","calculate_plugin_hash","正常系","プラグインハッシュが計算されること","複数プラグインが登録済み","なし","MD5ハッシュ文字列","中","ハッシュ計算"
"1469","UT-PLG-094","plugin.registry.PluginsRegistry","update_plugin_hash","正常系","ハッシュが更新されDBに保存されること","ハッシュが変更された","なし","新しいハッシュがDBに保存される","中","ハッシュ更新"
"1470","UT-PLG-095","plugin.registry.PluginsRegistry","check_reload","正常系","ハッシュが変更された場合リロードされること","DBのハッシュと現在のハッシュが異なる","なし","reload_pluginsが呼び出され、Trueが返却される","高","自動リロード"
"1471","UT-PLG-096","plugin.registry.PluginsRegistry","check_reload","正常系","ハッシュが同じ場合リロードされないこと","DBのハッシュと現在のハッシュが同じ","なし","Falseが返却される","中","不要リロード防止"
"1472","UT-PLG-097","plugin.helpers.IntegrationPluginError","__init__","正常系","エラーが正しく初期化されること","なし","path='test', message='error'","path='test', message='error'","中","エラークラス"
"1473","UT-PLG-098","plugin.helpers.log_registry_error","","正常系","エラーがレジストリに追加されること","registry.errors={}","error='test error', reference='general'","registry.errors['general']=['test error']","中","エラーログ"
"1474","UT-PLG-099","plugin.helpers.handle_error","","正常系","エラーがIntegrationPluginErrorとしてラップされること","do_raise=True","error=Exception('test')","IntegrationPluginErrorが発生","高","エラーハンドリング"
"1475","UT-PLG-100","plugin.helpers.handle_error","","正常系","do_raise=Falseでエラーがログのみされること","do_raise=False","error=Exception('test')","例外は発生せず、ログに記録される","中","エラーハンドリング"
"1476","UT-PLG-101","plugin.helpers.get_entrypoints","","正常系","エントリポイントが返却されること","inventree_pluginsエントリポイントが存在","なし","エントリポイントのリスト","中","エントリポイント"
"1477","UT-PLG-102","plugin.helpers.get_git_log","","正常系","gitログ情報が返却されること","gitリポジトリ内のファイルパス","path='/path/to/file'","hash, author, mail, date, messageを含むdict","低","git情報"
"1478","UT-PLG-103","plugin.helpers.get_git_log","","正常系","gitリポジトリ外の場合空の値が返却されること","gitリポジトリ外のパス","path='/tmp/file'","空文字列を含むdict","低","git情報"
"1479","UT-PLG-104","plugin.helpers.get_modules","","正常系","パッケージ内のモジュールが返却されること","有効なパッケージ","pkg=plugin_package","モジュールのリスト","中","モジュール取得"
"1480","UT-PLG-105","plugin.helpers.get_classes","","正常系","モジュール内のクラスが返却されること","クラスを含むモジュール","module=test_module","(name, class)のタプルリスト","中","クラス取得"
"1481","UT-PLG-106","plugin.helpers.get_plugins","","正常系","InvenTreePluginのサブクラスが返却されること","プラグインを含むパッケージ","pkg=plugin_pkg, baseclass=InvenTreePlugin","InvenTreePluginサブクラスのリスト","高","プラグイン取得"
"1482","UT-PLG-107","plugin.installer.pip_command","","正常系","pipコマンドが実行されること","pip利用可能","'install', 'package'","コマンド出力","高","pip実行"
"1483","UT-PLG-108","plugin.installer.pip_command","","異常系","pipコマンド失敗時にCalledProcessErrorが発生すること","無効なパッケージ","'install', 'invalid-package'","subprocess.CalledProcessError","高","エラーハンドリング"
"1484","UT-PLG-109","plugin.installer.handle_pip_error","","異常系","pipエラーがValidationErrorに変換されること","CalledProcessError発生","error=CalledProcessError","ValidationError","高","エラー変換"
"1485","UT-PLG-110","plugin.installer.get_install_info","","正常系","インストール情報が取得されること","パッケージがインストール済み","packagename='django'","location等を含むdict","中","インストール情報"
"1486","UT-PLG-111","plugin.installer.get_install_info","","正常系","未インストールパッケージの場合errorが含まれること","パッケージが未インストール","packagename='nonexistent'","errorキーを含むdict","中","エラーケース"
"1487","UT-PLG-112","plugin.installer.plugins_file_hash","","正常系","プラグインファイルのハッシュが計算されること","PLUGIN_FILEが存在","なし","SHA256ハッシュ文字列","中","ハッシュ計算"
"1488","UT-PLG-113","plugin.installer.plugins_file_hash","","正常系","ファイルが存在しない場合Noneが返却されること","PLUGIN_FILE=None","なし","None","中","Nullケース"
"1489","UT-PLG-114","plugin.installer.install_plugins_file","","正常系","プラグインファイルがインストールされること","PLUGIN_FILEが存在","なし","pip installが実行される","高","ファイルインストール"
"1490","UT-PLG-115","plugin.installer.install_plugins_file","","正常系","ファイルが存在しない場合早期リターンすること","PLUGIN_FILEが存在しない","なし","Noneが返却される(何も実行されない)","中","存在チェック"
"1491","UT-PLG-116","plugin.installer.update_plugins_file","","正常系","プラグインがファイルに追加されること","PLUGIN_FILEが存在","install_name='new-plugin'","ファイルに'new-plugin'行が追加される","高","ファイル更新"
"1492","UT-PLG-117","plugin.installer.update_plugins_file","","正常系","既存プラグインが更新されること","ファイルに'old-plugin'行が存在","install_name='old-plugin', version='2.0'","行が'old-plugin==2.0'に更新される","高","ファイル更新"
"1493","UT-PLG-118","plugin.installer.update_plugins_file","","正常系","remove=Trueでプラグインが削除されること","ファイルに'plugin-to-remove'行が存在","install_name='plugin-to-remove', remove=True","該当行がファイルから削除される","高","ファイル更新"
"1494","UT-PLG-119","plugin.installer.install_plugin","","正常系","URLからプラグインがインストールされること","有効なVCS URL","url='git+https://github.com/...', packagename='test'","インストール成功のdict","高","プラグインインストール"
"1495","UT-PLG-120","plugin.installer.install_plugin","","正常系","パッケージ名からプラグインがインストールされること","有効なパッケージ名","packagename='inventree-plugin'","インストール成功のdict","高","プラグインインストール"
"1496","UT-PLG-121","plugin.installer.install_plugin","","異常系","非スタッフユーザーの場合ValidationErrorが発生すること","user.is_staff=False","user=non_staff_user","ValidationError('Only staff users...')","高","権限チェック"
"1497","UT-PLG-122","plugin.installer.install_plugin","","異常系","インストール無効時にValidationErrorが発生すること","PLUGINS_INSTALL_DISABLED=True","なし","ValidationError('Plugin installation is disabled')","高","無効化チェック"
"1498","UT-PLG-123","plugin.installer.validate_package_plugin","","正常系","有効なパッケージプラグインの場合例外が発生しないこと","cfg.plugin存在, is_package=True, package_name存在","cfg=valid_config","例外なし","中","検証"
"1499","UT-PLG-124","plugin.installer.validate_package_plugin","","異常系","プラグインが見つからない場合ValidationErrorが発生すること","cfg.plugin=None","cfg=invalid_config","ValidationError('Plugin was not found')","中","検証"
"1500","UT-PLG-125","plugin.installer.validate_package_plugin","","異常系","パッケージプラグインでない場合ValidationErrorが発生すること","cfg.is_package()=False","cfg=non_package_config","ValidationError('Plugin is not a packaged plugin')","中","検証"
"1501","UT-PLG-126","plugin.installer.uninstall_plugin","","正常系","プラグインがアンインストールされること","非アクティブなパッケージプラグイン","cfg=inactive_plugin","pip uninstallが実行され成功dictが返却される","高","アンインストール"
"1502","UT-PLG-127","plugin.installer.uninstall_plugin","","異常系","アクティブなプラグインの場合ValidationErrorが発生すること","cfg.active=True","cfg=active_plugin","ValidationError('Plugin cannot be uninstalled...')","高","アクティブチェック"
"1503","UT-PLG-128","plugin.installer.uninstall_plugin","","異常系","mandatoryプラグインの場合ValidationErrorが発生すること","cfg.is_mandatory()=True","cfg=mandatory_plugin","ValidationError('INVE-E10...')","高","必須チェック"
"1504","UT-PLG-129","plugin.installer.uninstall_plugin","","異常系","サンプルプラグインの場合ValidationErrorが発生すること","cfg.is_sample()=True","cfg=sample_plugin","ValidationError('INVE-E10...')","中","サンプルチェック"
"1505","UT-PLG-130","plugin.installer.uninstall_plugin","","異常系","ビルトインプラグインの場合ValidationErrorが発生すること","cfg.is_builtin()=True","cfg=builtin_plugin","ValidationError('INVE-E10...')","中","ビルトインチェック"
"1506","UT-PLG-131","plugin.events.trigger_event","","正常系","イベントがトリガーされること","ENABLE_PLUGINS_EVENTS=True","event='test_event'","offload_taskが呼び出される","高","イベントトリガー"
"1507","UT-PLG-132","plugin.events.trigger_event","","正常系","プラグインイベント無効時は何もしないこと","ENABLE_PLUGINS_EVENTS=False","event='test_event'","早期リターン、何も実行されない","中","無効化チェック"
"1508","UT-PLG-133","plugin.events.register_event","","正常系","イベントが登録されること","有効なプラグインが存在","event='test_event'","対象プラグインにprocess_eventがオフロードされる","高","イベント登録"
"1509","UT-PLG-134","plugin.events.process_event","","正常系","イベントが処理されること","プラグインがアクティブ","plugin_slug='test', event='event'","plugin.process_event()が呼び出される","高","イベント処理"
"1510","UT-PLG-135","plugin.events.process_event","","異常系","プラグインが見つからない場合早期リターンすること","プラグインが存在しない","plugin_slug='unknown', event='event'","エラーログが出力され、処理終了","中","エラーケース"
"1511","UT-PLG-136","plugin.events.allow_table_event","","正常系","許可されたテーブルの場合Trueが返却されること","通常のテーブル名","table_name='part_part'","True","中","テーブルフィルタ"
"1512","UT-PLG-137","plugin.events.allow_table_event","","正常系","無視されるプレフィックスの場合Falseが返却されること","django_で始まるテーブル","table_name='django_session'","False","中","テーブルフィルタ"
"1513","UT-PLG-138","plugin.events.allow_table_event","","正常系","無視リストのテーブルの場合Falseが返却されること","明示的に無視されるテーブル","table_name='common_notificationentry'","False","中","テーブルフィルタ"
"1514","UT-PLG-139","plugin.events.after_save","","正常系","createdイベントがトリガーされること","created=True","sender=Part, instance, created=True","'{table}.created'イベントがトリガーされる","中","保存イベント"
"1515","UT-PLG-140","plugin.events.after_save","","正常系","savedイベントがトリガーされること","created=False","sender=Part, instance, created=False","'{table}.saved'イベントがトリガーされる","中","保存イベント"
"1516","UT-PLG-141","plugin.events.after_delete","","正常系","deletedイベントがトリガーされること","インスタンス削除","sender=Part, instance","'{table}.deleted'イベントがトリガーされる","中","削除イベント"
"1517","UT-PLG-142","plugin.staticfiles.clear_static_dir","","正常系","ディレクトリがクリアされること","ディレクトリが存在","path='plugins/test/'","ディレクトリ内のファイルが削除される","中","静的ファイル管理"
"1518","UT-PLG-143","plugin.staticfiles.clear_static_dir","","正常系","存在しないディレクトリの場合何もしないこと","ディレクトリが存在しない","path='plugins/nonexistent/'","早期リターン","低","存在チェック"
"1519","UT-PLG-144","plugin.staticfiles.collect_plugins_static_files","","正常系","全プラグインの静的ファイルが収集されること","複数プラグインが登録済み","なし","各プラグインのcopy_plugin_static_filesが呼び出される","中","静的ファイル収集"
"1520","UT-PLG-145","plugin.staticfiles.clear_plugins_static_files","","正常系","不要なプラグインディレクトリがクリアされること","plugins/ディレクトリに未登録プラグインのフォルダが存在","なし","未登録プラグインのディレクトリが削除される","中","クリーンアップ"
"1521","UT-PLG-146","plugin.staticfiles.copy_plugin_static_files","","正常系","プラグインの静的ファイルがコピーされること","プラグインにstatic/ディレクトリが存在","slug='test'","ファイルがplugins/test/にコピーされる","中","静的ファイルコピー"
"1522","UT-PLG-147","plugin.staticfiles.copy_plugin_static_files","","正常系","staticディレクトリがない場合早期リターンすること","プラグインにstatic/ディレクトリがない","slug='test'","何も実行されない","低","存在チェック"
"1523","UT-PLG-148","plugin.staticfiles.clear_plugin_static_files","","正常系","プラグインの静的ファイルがクリアされること","plugins/test/ディレクトリが存在","slug='test'","clear_static_dir('plugins/test/')が呼び出される","中","静的ファイル削除"
"1524","UT-PLG-149","plugin.base.integration.SettingsMixin","__init__","正常系","Settingsミックスインが登録されること","なし","なし","'settings' mixinが追加される","高","mixin初期化"
"1525","UT-PLG-150","plugin.base.integration.SettingsMixin","has_settings","正常系","設定がある場合Trueが返却されること","SETTINGS={'KEY': {...}}","なし","True","中","設定有無"
"1526","UT-PLG-151","plugin.base.integration.SettingsMixin","has_settings","正常系","設定がない場合Falseが返却されること","SETTINGS={}","なし","False","中","設定有無"
"1527","UT-PLG-152","plugin.base.integration.SettingsMixin","get_setting","正常系","設定値が取得できること","設定'KEY'='value'が存在","key='KEY'","'value'","高","設定取得"
"1528","UT-PLG-153","plugin.base.integration.SettingsMixin","get_setting","正常系","存在しない設定でbackup_valueが返却されること","設定が存在しない","key='MISSING', backup_value='default'","'default'","中","デフォルト値"
"1529","UT-PLG-154","plugin.base.integration.SettingsMixin","set_setting","正常系","設定値が保存されること","プラグインが登録済み","key='KEY', value='new_value'","PluginSetting.set_settingが呼び出される","高","設定保存"
"1530","UT-PLG-155","plugin.base.integration.SettingsMixin","get_user_setting","正常系","ユーザー設定が取得できること","ユーザー設定'KEY'='value'が存在","key='KEY', user=test_user","'value'","高","ユーザー設定取得"
"1531","UT-PLG-156","plugin.base.integration.SettingsMixin","set_user_setting","正常系","ユーザー設定が保存されること","プラグインが登録済み","key='KEY', value='new', user=test_user","PluginUserSetting.set_settingが呼び出される","高","ユーザー設定保存"
"1532","UT-PLG-157","plugin.base.integration.SettingsMixin","check_settings","正常系","全必須設定が定義済みの場合(True, [])が返却されること","必須設定がすべて定義済み","なし","(True, [])","中","設定検証"
"1533","UT-PLG-158","plugin.base.integration.SettingsMixin","check_settings","正常系","不足設定がある場合(False, リスト)が返却されること","必須設定'REQUIRED'が未定義","なし","(False, ['REQUIRED'])","中","設定検証"
"1534","UT-PLG-159","plugin.base.integration.SettingsMixin","get_settings_dict","正常系","全設定がdictで返却されること","複数の設定が定義済み","なし","{'KEY1': 'val1', 'KEY2': 'val2'}","中","設定dict取得"
"1535","UT-PLG-160","plugin.base.integration.ValidationMixin","__init__","正常系","Validationミックスインが登録されること","なし","なし","'validation' mixinが追加される","高","mixin初期化"
"1536","UT-PLG-161","plugin.base.integration.ValidationMixin","raise_error","正常系","ValidationErrorが発生すること","なし","message='error message'","ValidationError('error message')","中","エラー発生"
"1537","UT-PLG-162","plugin.base.integration.ValidationMixin","validate_model_deletion","正常系","デフォルト実装はNoneを返却すること","なし","instance=any_model","None","中","削除検証"
"1538","UT-PLG-163","plugin.base.integration.ValidationMixin","validate_model_instance","正常系","デフォルト実装はNoneを返却すること","なし","instance=any_model","None","中","インスタンス検証"
"1539","UT-PLG-164","plugin.base.integration.ValidationMixin","validate_part_name","正常系","デフォルト実装はNoneを返却すること","なし","name='Part Name', part=part_instance","None","中","部品名検証"
"1540","UT-PLG-165","plugin.base.integration.ValidationMixin","validate_part_ipn","正常系","デフォルト実装はNoneを返却すること","なし","ipn='IPN-001', part=part_instance","None","中","IPN検証"
"1541","UT-PLG-166","plugin.base.integration.ValidationMixin","validate_batch_code","正常系","デフォルト実装はNoneを返却すること","なし","batch_code='BATCH001', item=stock_item","None","中","バッチコード検証"
"1542","UT-PLG-167","plugin.base.integration.ValidationMixin","generate_batch_code","正常系","デフォルト実装はNoneを返却すること","なし","kwargs={}","None","中","バッチコード生成"
"1543","UT-PLG-168","plugin.base.integration.ValidationMixin","validate_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001', part=part_instance","None","中","シリアル番号検証"
"1544","UT-PLG-169","plugin.base.integration.ValidationMixin","convert_serial_to_int","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001'","None","中","シリアル番号変換"
"1545","UT-PLG-170","plugin.base.integration.ValidationMixin","get_latest_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","part=part_instance","None","中","最新シリアル取得"
"1546","UT-PLG-171","plugin.base.integration.ValidationMixin","increment_serial_number","正常系","デフォルト実装はNoneを返却すること","なし","serial='SN001', part=part_instance","None","中","シリアル番号インクリメント"
"1547","UT-PLG-172","plugin.base.integration.ValidationMixin","validate_parameter","正常系","デフォルト実装はNoneを返却すること","なし","parameter=param_instance, data='value'","None","中","パラメータ検証"
"1548","UT-PLG-173","plugin.base.event.EventMixin","__init__","正常系","Eventsミックスインが登録されること","なし","なし","'events' mixinが追加される","高","mixin初期化"
"1549","UT-PLG-174","plugin.base.event.EventMixin","wants_process_event","正常系","デフォルト実装はTrueを返却すること","なし","event='any_event'","True","中","イベント購読"
"1550","UT-PLG-175","plugin.base.event.EventMixin","process_event","異常系","デフォルト実装はMixinNotImplementedErrorを発生すること","なし","event='any_event'","MixinNotImplementedError","高","イベント処理"
"1551","UT-PLG-176","plugin.base.integration.ScheduleMixin","__init__","正常系","Scheduleミックスインが登録されること","なし","なし","'schedule' mixinが追加される","高","mixin初期化"
"1552","UT-PLG-177","plugin.base.integration.ScheduleMixin","has_scheduled_tasks","正常系","タスクがある場合Trueが返却されること","SCHEDULED_TASKS={'task': {...}}","なし","True","中","タスク有無"
"1553","UT-PLG-178","plugin.base.integration.ScheduleMixin","has_scheduled_tasks","正常系","タスクがない場合Falseが返却されること","SCHEDULED_TASKS={}","なし","False","中","タスク有無"
"1554","UT-PLG-179","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","正常系","有効なタスク定義の場合例外が発生しないこと","func, scheduleが定義済み","なし","例外なし","高","タスク検証"
"1555","UT-PLG-180","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","funcがない場合MixinImplementationErrorが発生すること","funcが未定義","なし","MixinImplementationError","高","タスク検証"
"1556","UT-PLG-181","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","scheduleがない場合MixinImplementationErrorが発生すること","scheduleが未定義","なし","MixinImplementationError","高","タスク検証"
"1557","UT-PLG-182","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","無効なschedule値の場合MixinImplementationErrorが発生すること","schedule='X'(無効な値)","なし","MixinImplementationError","高","タスク検証"
"1558","UT-PLG-183","plugin.base.integration.ScheduleMixin","validate_scheduled_tasks","異常系","schedule='I'でminutesがない場合MixinImplementationErrorが発生すること","schedule='I', minutesなし","なし","MixinImplementationError","高","タスク検証"
"1559","UT-PLG-184","plugin.base.integration.ScheduleMixin","get_task_name","正常系","タスク名が正しく生成されること","slug='test'","key='my_task'","'plugin.test.my_task'","中","タスク名生成"
"1560","UT-PLG-185","plugin.base.integration.ScheduleMixin","get_task_names","正常系","全タスク名のリストが返却されること","2つのタスクが定義済み","なし","['plugin.test.task1', 'plugin.test.task2']","中","タスク名一覧"
"1561","UT-PLG-186","plugin.base.integration.ScheduleMixin","register_tasks","正常系","タスクがScheduleに登録されること","有効なタスク定義","なし","Schedule.objects.createが呼び出される","高","タスク登録"
"1562","UT-PLG-187","plugin.base.integration.ScheduleMixin","register_tasks","正常系","既存タスクが更新されること","同名タスクが既に存在","なし","既存Scheduleが更新される","中","タスク更新"
"1563","UT-PLG-188","plugin.base.integration.ScheduleMixin","unregister_tasks","正常系","タスクがScheduleから削除されること","タスクが登録済み","なし","Schedule.deleteが呼び出される","中","タスク削除"
"1564","UT-PLG-189","plugin.base.barcodes.BarcodeMixin","__init__","正常系","Barcodeミックスインが登録されること","なし","なし","'barcode' mixinが追加される","高","mixin初期化"
"1565","UT-PLG-190","plugin.base.barcodes.BarcodeMixin","has_barcode","正常系","常にTrueが返却されること","なし","なし","True","低","バーコード有無"
"1566","UT-PLG-191","plugin.base.barcodes.BarcodeMixin","scan","正常系","デフォルト実装はNoneを返却すること","なし","barcode_data='123456'","None","高","バーコードスキャン"
"1567","UT-PLG-192","plugin.base.barcodes.BarcodeMixin","has_barcode_generation","正常系","generate実装がある場合Trueが返却されること","generateメソッドが実装済み","なし","True","中","生成機能有無"
"1568","UT-PLG-193","plugin.base.barcodes.BarcodeMixin","has_barcode_generation","正常系","generate未実装の場合Falseが返却されること","generateがNotImplementedErrorを発生","なし","False","中","生成機能有無"
"1569","UT-PLG-194","plugin.base.barcodes.BarcodeMixin","generate","異常系","デフォルト実装はNotImplementedErrorを発生すること","なし","model_instance=any_instance","NotImplementedError","高","バーコード生成"
"1570","UT-PLG-195","plugin.base.barcodes.SupplierBarcodeMixin","__init__","正常系","SupplierBarcodeミックスインが登録されること","なし","なし","'supplier-barcode' mixinが追加される","高","mixin初期化"
"1571","UT-PLG-196","plugin.base.barcodes.SupplierBarcodeMixin","get_field_value","正常系","バーコードフィールド値が取得できること","barcode_fields={'quantity': '10'}","key='quantity'","'10'","中","フィールド取得"
"1572","UT-PLG-197","plugin.base.barcodes.SupplierBarcodeMixin","get_field_value","正常系","存在しないキーでbackup_valueが返却されること","barcode_fields={}","key='missing', backup_value='default'","'default'","中","デフォルト値"
"1573","UT-PLG-198","plugin.base.barcodes.SupplierBarcodeMixin","quantity","正常系","数量が返却されること","barcode_fields={'quantity': '10'}","なし","'10'","中","数量取得"
"1574","UT-PLG-199","plugin.base.barcodes.SupplierBarcodeMixin","supplier_part_number","正常系","サプライヤー部品番号が返却されること","barcode_fields={'supplier_part_number': 'SKU001'}","なし","'SKU001'","中","SKU取得"
"1575","UT-PLG-200","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier_part","正常系","SupplierPartが取得できること","SKU='SKU001'のSupplierPartが存在","なし","該当SupplierPartインスタンス","高","部品検索"
"1576","UT-PLG-201","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier_part","正常系","SKUもMPNもない場合Noneが返却されること","supplier_part_number=None, manufacturer_part_number=None","なし","None","中","Nullケース"
"1577","UT-PLG-202","plugin.base.barcodes.SupplierBarcodeMixin","get_manufacturer_part","正常系","ManufacturerPartが取得できること","MPN='MPN001'のManufacturerPartが存在","なし","該当ManufacturerPartインスタンス","中","部品検索"
"1578","UT-PLG-203","plugin.base.barcodes.SupplierBarcodeMixin","get_manufacturer_part","正常系","MPNがない場合Noneが返却されること","manufacturer_part_number=None","なし","None","中","Nullケース"
"1579","UT-PLG-204","plugin.base.barcodes.SupplierBarcodeMixin","get_purchase_order","正常系","PurchaseOrderが取得できること","customer_order_number='PO001'のPOが存在","なし","該当PurchaseOrderインスタンス","高","注文検索"
"1580","UT-PLG-205","plugin.base.barcodes.SupplierBarcodeMixin","get_purchase_order","正常系","注文番号がない場合Noneが返却されること","customer_order_number=None, supplier_order_number=None","なし","None","中","Nullケース"
"1581","UT-PLG-206","plugin.base.barcodes.SupplierBarcodeMixin","extract_barcode_fields","異常系","デフォルト実装はNotImplementedErrorを発生すること","なし","barcode_data='...'","NotImplementedError","高","フィールド抽出"
"1582","UT-PLG-207","plugin.base.barcodes.SupplierBarcodeMixin","scan","正常系","マッチした場合結果dictが返却されること","SupplierPartがマッチ","barcode_data='valid_barcode'","{'supplierpart': {...}, 'success': '...'}","高","スキャン処理"
"1583","UT-PLG-208","plugin.base.barcodes.SupplierBarcodeMixin","scan","正常系","マッチしない場合Noneが返却されること","何もマッチしない","barcode_data='invalid_barcode'","None","中","スキャン処理"
"1584","UT-PLG-209","plugin.base.barcodes.SupplierBarcodeMixin","scan_receive_item","正常系","アイテムが受入処理されること","auto_allocate=True, 必要な情報がすべて揃っている","barcode_data, user, auto_allocate=True","{'lineitem': {...}, 'success': '...'}","高","受入処理"
"1585","UT-PLG-210","plugin.base.barcodes.SupplierBarcodeMixin","scan_receive_item","正常系","情報不足時はaction_requiredが返却されること","locationがNone","barcode_data, user, location=None","{'lineitem': {...}, 'action_required': '...'}","中","受入処理"
"1586","UT-PLG-211","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","SUPPLIER_ID設定からサプライヤーが取得できること","SUPPLIER_ID=1が設定済み","なし","該当Companyインスタンス","高","サプライヤー取得"
"1587","UT-PLG-212","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","設定がない場合DEFAULT_SUPPLIER_NAMEで検索すること","SUPPLIER_ID未設定, DEFAULT_SUPPLIER_NAME='Test'","なし","名前がマッチするCompany","中","サプライヤー検索"
"1588","UT-PLG-213","plugin.base.barcodes.SupplierBarcodeMixin","get_supplier","正常系","cache=Trueで結果がキャッシュされること","2回目の呼び出し","cache=True","キャッシュされた_supplierが返却される","低","キャッシュ"
"1589","UT-PLG-214","plugin.base.barcodes.SupplierBarcodeMixin","parse_ecia_barcode2d","正常系","ECIAバーコードがパースされること","有効なECIA 2Dバーコード","barcode_data='[)>...'","フィールドを含むdict","高","ECIAパース"
"1590","UT-PLG-215","plugin.base.barcodes.SupplierBarcodeMixin","split_fields","正常系","フィールドが分割されること","delimiter=','","barcode_data='a,b,c'","['a', 'b', 'c']","中","フィールド分割"
"1591","UT-PLG-216","plugin.base.barcodes.SupplierBarcodeMixin","split_fields","正常系","header/trailerが除去されること","header='[', trailer=']'","barcode_data='[a,b,c]'","['a', 'b', 'c']","中","ヘッダー/トレーラー除去"
"1592","UT-PLG-217","plugin.base.barcodes.SupplierBarcodeMixin","parse_isoiec_15434_barcode2d","正常系","ISO/IEC 15434バーコードがパースされること","有効なISO/IEC 15434バーコード","barcode_data='[)>\x1e06\x1d...'","フィールドのリスト","高","ISOパース"
"1593","UT-PLG-218","plugin.base.barcodes.SupplierBarcodeMixin","parse_isoiec_15434_barcode2d","正常系","無効なヘッダーの場合空リストが返却されること","無効なヘッダー","barcode_data='invalid...'","[]","中","無効バーコード"
"1594","UT-PLG-219","plugin.serializers.MetadataSerializer","update","正常系","PATCHでメタデータがマージされること","既存metadata={'a': 1}","partial=True, data={'metadata': {'b': 2}}","metadata={'a': 1, 'b': 2}","中","メタデータ更新"
"1595","UT-PLG-220","plugin.serializers.MetadataSerializer","update","正常系","PUTでメタデータが上書きされること","既存metadata={'a': 1}","partial=False, data={'metadata': {'b': 2}}","metadata={'b': 2}","中","メタデータ上書き"
"1596","UT-PLG-221","plugin.serializers.PluginConfigInstallSerializer","validate","正常系","有効なデータの場合例外が発生しないこと","confirm=True, packagename='test'","data={...}","検証済みdata","高","インストール検証"
"1597","UT-PLG-222","plugin.serializers.PluginConfigInstallSerializer","validate","異常系","confirm=Falseの場合ValidationErrorが発生すること","confirm=False","data={'confirm': False}","ValidationError({'confirm': '...'})","高","確認チェック"
"1598","UT-PLG-223","plugin.serializers.PluginConfigInstallSerializer","validate","異常系","urlもpackagenameもない場合ValidationErrorが発生すること","両方未指定","data={'confirm': True}","ValidationError({'url': '...', 'packagename': '...'})","高","必須チェック"
"1599","UT-PLG-224","plugin.serializers.PluginConfigInstallSerializer","save","正常系","install_pluginが呼び出されること","有効なデータ","なし","install_pluginの戻り値","高","インストール実行"
"1600","UT-PLG-225","plugin.serializers.PluginReloadSerializer","save","正常系","registry.reload_pluginsが呼び出されること","なし","なし","reload_pluginsが実行される","高","リロード実行"
"1601","UT-PLG-226","plugin.serializers.PluginActivateSerializer","update","正常系","プラグインがアクティブ化されること","instance.active=False","active=True","instance.activate(True)が呼び出される","高","活性化"
"1602","UT-PLG-227","plugin.serializers.PluginActivateSerializer","update","異常系","mandatoryプラグインの非活性化でValidationErrorが発生すること","instance.is_mandatory()=True","active=False","ValidationError('INVE-E10: ...')","高","必須チェック"
"1603","UT-PLG-228","plugin.serializers.PluginUninstallSerializer","update","正常系","uninstall_pluginが呼び出されること","有効なプラグイン","delete_config=True","uninstall_pluginの戻り値","高","アンインストール"
"1604","UT-PLG-229","plugin.serializers.PluginRelationSerializer","to_internal_value","正常系","slugからPluginConfigが取得できること","key='test'のPluginConfigが存在","data='test'","該当PluginConfigインスタンス","中","逆シリアライズ"
"1605","UT-PLG-230","plugin.serializers.PluginRelationSerializer","to_representation","正常系","PluginConfigのkeyが返却されること","PluginConfig(key='test')","value=plugin_config","'test'","中","シリアライズ"
"1606","UT-PLG-231","plugin.api.PluginFilter.filter_mixin","","正常系","指定mixinを持つプラグインがフィルタされること","複数プラグインが存在","value='barcode'","'barcode' mixinを持つプラグインのQuerySet","高","mixinフィルタ"
"1607","UT-PLG-232","plugin.api.PluginFilter.filter_mixin","","正常系","カンマ区切りで複数mixinをフィルタできること","なし","value='barcode,settings'","両方のmixinを持つプラグインのQuerySet","中","複数mixinフィルタ"
"1608","UT-PLG-233","plugin.api.PluginFilter.filter_builtin","","正常系","builtinプラグインがフィルタされること","builtin/非builtinプラグインが混在","value=True","builtinプラグインのみのQuerySet","中","builtinフィルタ"
"1609","UT-PLG-234","plugin.api.PluginFilter.filter_mandatory","","正常系","mandatoryプラグインがフィルタされること","mandatory/非mandatoryプラグインが混在","value=True","mandatoryプラグインのみのQuerySet","中","mandatoryフィルタ"
"1610","UT-PLG-235","plugin.api.PluginFilter.filter_sample","","正常系","sampleプラグインがフィルタされること","sample/非sampleプラグインが混在","value=True","sampleプラグインのみのQuerySet","低","sampleフィルタ"
"1611","UT-PLG-236","plugin.api.PluginFilter.filter_installed","","正常系","インストール済みプラグインがフィルタされること","installed/未installedプラグインが混在","value=True","installedプラグインのみのQuerySet","中","installedフィルタ"
"1612","UT-PLG-237","plugin.api.PluginDetail.delete","","正常系","非アクティブプラグインが削除できること","cfg.active=False","DELETE /api/plugin/plugins/{slug}/","204 No Content","高","プラグイン削除"
"1613","UT-PLG-238","plugin.api.PluginDetail.delete","","異常系","アクティブプラグインの削除でValidationErrorが発生すること","cfg.active=True","DELETE /api/plugin/plugins/{slug}/","ValidationError","高","削除制限"
"1614","UT-PLG-239","plugin.api.check_plugin","","正常系","有効なプラグインが返却されること","プラグインがアクティブ","plugin_slug='test'","InvenTreePluginインスタンス","高","プラグイン確認"
"1615","UT-PLG-240","plugin.api.check_plugin","","異常系","slugもpkも指定されない場合NotFoundが発生すること","両方None","plugin_slug=None, plugin_pk=None","NotFound('Plugin not specified')","高","入力チェック"
"1616","UT-PLG-241","plugin.api.check_plugin","","異常系","プラグインが存在しない場合NotFoundが発生すること","プラグインが未登録","plugin_slug='unknown'","NotFound('...not installed')","高","存在チェック"
"1617","UT-PLG-242","plugin.api.check_plugin","","異常系","プラグインが非アクティブの場合NotFoundが発生すること","プラグインが非アクティブ","plugin_slug='inactive'","NotFound('...is not active')","高","アクティブチェック"
"1618","UT-PLG-243","plugin.api.RegistryStatusView.get","","正常系","レジストリステータスが返却されること","エラーあり/なし","GET /api/plugin/plugins/status/","{'active_plugins': n, 'registry_errors': [...]}","中","ステータス取得"
"1619","UT-RPT-001","report.models.TemplateUploadMixin","template_name","正常系","テンプレートファイル名が正しく返却されること","テンプレートファイルが設定済み","template='/report/test.html'","完全なファイルパスが返却される","中","プロパティメソッド"
"1620","UT-RPT-002","report.models.TemplateUploadMixin","template_name","正常系","パス区切り文字が正しく変換されること","テンプレートパスにスラッシュが含まれる","template='report/subdir/test.html'","OS依存のパス区切り文字に変換される","中","クロスプラットフォーム対応"
"1621","UT-RPT-003","report.models.TemplateUploadMixin","extension","正常系","テンプレートの拡張子が正しく返却されること","テンプレートファイルが設定済み","template='test.html'","'.html'が返却される","低","拡張子取得"
"1622","UT-RPT-004","report.models.TemplateUploadMixin","extension","境界値","大文字拡張子が小文字に変換されること","テンプレートファイルが設定済み","template='test.HTML'","'.html'が返却される","低","拡張子の正規化"
"1623","UT-RPT-005","report.models.TemplateUploadMixin","get_upload_path","正常系","アップロードパスが正しく生成されること","SUBDIRが設定済み","filename='test.html'","'report/{SUBDIR}/test.html'が返却される","中","ファイルパス生成"
"1624","UT-RPT-006","report.models.TemplateUploadMixin","check_existing_file","正常系","重複ファイルが存在する場合Trueが返却されること","同名テンプレートが存在する","path='existing.html'","Trueが返却される","高","重複チェック"
"1625","UT-RPT-007","report.models.TemplateUploadMixin","check_existing_file","正常系","重複ファイルが存在しない場合Falseが返却されること","同名テンプレートが存在しない","path='new.html'","Falseが返却される","高","重複チェック"
"1626","UT-RPT-008","report.models.TemplateUploadMixin","check_existing_file","異常系","重複時にraise_error=TrueでValidationErrorが発生すること","同名テンプレートが存在する","path='existing.html', raise_error=True","ValidationErrorがスローされる","高","重複エラー処理"
"1627","UT-RPT-009","report.models.TemplateUploadMixin","validate_unique","異常系","重複テンプレートで検証エラーが発生すること","同名テンプレートが存在する","なし","ValidationErrorがスローされる","高","一意性検証"
"1628","UT-RPT-010","report.models.ReportTemplateBase","save","正常系","保存時にリビジョンがインクリメントされること","revision=1のテンプレートが存在","save()を呼び出し","revision=2になる","高","リビジョン管理"
"1629","UT-RPT-011","report.models.ReportTemplateBase","generate_filename","正常系","コンテキストからファイル名が生成されること","filename_pattern='{{ date }}.pdf'","context={'date': '2024-01-01'}","'2024-01-01.pdf'が返却される","中","ファイル名生成"
"1630","UT-RPT-012","report.models.ReportTemplateBase","generate_filename","境界値","空のコンテキストでデフォルトパターンが使用されること","filename_pattern='output.pdf'","context={}","'output.pdf'が返却される","中","デフォルトファイル名"
"1631","UT-RPT-013","report.models.ReportTemplateBase","render_as_string","正常系","HTMLが正しくレンダリングされること","テンプレートファイルが存在","instance, request","HTML文字列が返却される","高","HTMLレンダリング"
"1632","UT-RPT-014","report.models.ReportTemplateBase","render_as_string","正常系","コンテキストが正しく適用されること","テンプレートに変数が含まれる","instance, request, context","変数が展開されたHTMLが返却される","高","コンテキスト適用"
"1633","UT-RPT-015","report.models.ReportTemplateBase","render","正常系","PDFデータが正しく生成されること","テンプレートファイルが存在","instance, request","PDFバイトデータが返却される","高","PDF生成"
"1634","UT-RPT-016","report.models.ReportTemplateBase","clean","正常系","有効なmodel_typeとfiltersで検証が成功すること","正しいmodel_typeが設定済み","filters='active=True'","エラーなし","高","モデル検証"
"1635","UT-RPT-017","report.models.ReportTemplateBase","clean","異常系","無効なfiltersでValidationErrorが発生すること","model_typeが設定済み","filters='invalid_filter'","ValidationErrorがスローされる","高","フィルタ検証"
"1636","UT-RPT-018","report.models.ReportTemplateBase","get_model","正常系","model_typeから正しいモデルクラスが返却されること","model_type='part'が設定済み","なし","Partモデルクラスが返却される","中","モデル取得"
"1637","UT-RPT-019","report.models.ReportTemplateBase","get_model","異常系","無効なmodel_typeでNoneが返却されること","model_type='invalid'が設定済み","なし","Noneが返却される","中","無効モデル処理"
"1638","UT-RPT-020","report.models.ReportTemplateBase","get_filters","正常系","フィルタ辞書が正しく返却されること","filters='active=True'が設定済み","なし","{'active': True}が返却される","中","フィルタ取得"
"1639","UT-RPT-021","report.models.ReportTemplateBase","base_context","正常系","基本コンテキストが正しく生成されること","テンプレートが存在","request","base_url, date, datetime, template等を含む辞書が返却される","中","コンテキスト生成"
"1640","UT-RPT-022","report.models.ReportTemplateBase","base_context","正常系","requestがnullの場合userがNoneになること","テンプレートが存在","request=None","user=Noneの辞書が返却される","中","Nullリクエスト処理"
"1641","UT-RPT-023","report.models.ReportTemplateBase","get_context","正常系","インスタンスコンテキストがマージされること","インスタンスがreport_context()を持つ","instance, request","基本コンテキストとインスタンスコンテキストがマージされる","中","コンテキストマージ"
"1642","UT-RPT-024","report.models.ReportTemplate","get_api_url","正常系","APIエンドポイントURLが返却されること","なし","なし","'api-report-template-list'のURLが返却される","低","API URL取得"
"1643","UT-RPT-025","report.models.ReportTemplate","get_report_size","正常系","ページサイズが正しく返却されること","page_size='A4'が設定済み","なし","'A4'が返却される","中","ページサイズ取得"
"1644","UT-RPT-026","report.models.ReportTemplate","get_report_size","正常系","landscape=Trueでサイズに' landscape'が追加されること","page_size='A4', landscape=True","なし","'A4 landscape'が返却される","中","横向きページサイズ"
"1645","UT-RPT-027","report.models.ReportTemplate","get_report_size","境界値","page_sizeが空の場合デフォルト値が使用されること","page_size=''","なし","グローバル設定のデフォルト値が返却される","中","デフォルトページサイズ"
"1646","UT-RPT-028","report.models.ReportTemplate","get_report_context","正常系","レポートコンテキストが正しく生成されること","page_size='A4', landscape=False, merge=False","なし","page_size, landscape, mergeを含む辞書が返却される","中","レポートコンテキスト"
"1647","UT-RPT-029","report.models.ReportTemplate","get_context","正常系","プラグインコンテキストがマージされること","レポートプラグインが登録済み","instance, request","プラグインからのコンテキストが含まれる","中","プラグインコンテキスト"
"1648","UT-RPT-030","report.models.ReportTemplate","get_plugin_context","正常系","登録済みプラグインのコンテキストが追加されること","REPORTミックスインを持つプラグインが存在","instance, request, context","プラグインのadd_report_contextが呼び出される","中","プラグイン連携"
"1649","UT-RPT-031","report.models.ReportTemplate","get_plugin_context","異常系","プラグインエラー時にログが記録されること","プラグインがエラーをスロー","instance, request, context","例外がキャッチされログ記録される","中","プラグインエラー処理"
"1650","UT-RPT-032","report.models.ReportTemplate","handle_attachment","正常系","attach_to_model=Trueで添付ファイルが作成されること","attach_to_model=True, debug_mode=False","instance, report, report_name, request","create_attachmentが呼び出される","高","添付ファイル作成"
"1651","UT-RPT-033","report.models.ReportTemplate","handle_attachment","正常系","debug_mode=Trueで添付ファイルが作成されないこと","attach_to_model=True, debug_mode=True","instance, report, report_name, request","create_attachmentが呼び出されない","中","デバッグモード処理"
"1652","UT-RPT-034","report.models.ReportTemplate","handle_attachment","正常系","attach_to_model=Falseで添付ファイルが作成されないこと","attach_to_model=False","instance, report, report_name, request","create_attachmentが呼び出されない","中","添付無効時処理"
"1653","UT-RPT-035","report.models.ReportTemplate","notify_plugins","正常系","レポートプラグインに通知されること","REPORTミックスインを持つプラグインが存在","instance, report, request","report_callbackが呼び出される","中","プラグイン通知"
"1654","UT-RPT-036","report.models.ReportTemplate","print","正常系","単一アイテムのレポートが生成されること","テンプレートとアイテムが存在","items=[item], request","DataOutputオブジェクトが返却される","高","レポート印刷"
"1655","UT-RPT-037","report.models.ReportTemplate","print","正常系","複数アイテムのレポートがマージされること","merge=False, 複数アイテム","items=[item1, item2], request","PDFがマージされたDataOutputが返却される","高","複数レポート印刷"
"1656","UT-RPT-038","report.models.ReportTemplate","print","正常系","merge=Trueで単一レポートが生成されること","merge=True, 複数アイテム","items=[item1, item2], request","1つのPDFを含むDataOutputが返却される","高","マージレポート印刷"
"1657","UT-RPT-039","report.models.ReportTemplate","print","正常系","debug_modeでHTMLが返却されること","REPORT_DEBUG_MODE=True","items=[item], request","HTML形式のDataOutputが返却される","中","デバッグモード印刷"
"1658","UT-RPT-040","report.models.ReportTemplate","print","異常系","テンプレートが存在しない場合ValidationErrorが発生すること","テンプレートファイルが存在しない","items=[item], request","ValidationErrorがスローされる","高","テンプレートエラー"
"1659","UT-RPT-041","report.models.ReportTemplate","print","異常系","テンプレート構文エラー時にValidationErrorが発生すること","テンプレートに構文エラー","items=[item], request","ValidationErrorがスローされる","高","構文エラー処理"
"1660","UT-RPT-042","report.models.ReportTemplate","print","正常系","progressが正しく更新されること","複数アイテム","items=[item1, item2, item3], request","output.progressが3まで更新される","中","進捗更新"
"1661","UT-RPT-043","report.models.ReportTemplate","print","正常系","outputがない場合DataOutputが自動生成されること","output=None","items=[item], request, output=None","新しいDataOutputが作成される","中","DataOutput自動生成"
"1662","UT-RPT-044","report.models.LabelTemplate","get_api_url","正常系","APIエンドポイントURLが返却されること","なし","なし","'api-label-template-list'のURLが返却される","低","API URL取得"
"1663","UT-RPT-045","report.models.LabelTemplate","generate_page_style","正常系","@pageスタイルが正しく生成されること","width=50, height=20","なし","'@page { size: 50mm 20mm; margin: 0mm; }'が返却される","中","ページスタイル生成"
"1664","UT-RPT-046","report.models.LabelTemplate","generate_page_style","正常系","カスタムサイズでスタイルが生成されること","なし","width=100, height=50, margin=5","'@page { size: 100mm 50mm; margin: 5mm; }'が返却される","中","カスタムページスタイル"
"1665","UT-RPT-047","report.models.LabelTemplate","get_context","正常系","ラベルコンテキストが正しく生成されること","width=50, height=20","instance, request","width, height, page_styleを含む辞書が返却される","中","ラベルコンテキスト"
"1666","UT-RPT-048","report.models.LabelTemplate","get_context","正常系","insert_page_style=Falseでpage_styleがNoneになること","width=50, height=20","instance, request, insert_page_style=False","page_style=Noneの辞書が返却される","中","ページスタイル無効"
"1667","UT-RPT-049","report.models.LabelTemplate","get_context","正常系","プラグインのadd_label_contextが呼び出されること","REPORTミックスインを持つプラグインが存在","instance, request","プラグインのコンテキストが追加される","中","プラグインラベルコンテキスト"
"1668","UT-RPT-050","report.models.LabelTemplate","print","正常系","ラベルが正しく印刷されること","テンプレートとプラグインが存在","items=[item], plugin, request","DataOutputオブジェクトが返却される","高","ラベル印刷"
"1669","UT-RPT-051","report.models.LabelTemplate","print","正常系","before_printingとafter_printingが呼び出されること","プラグインがbefore/after_printingを持つ","items=[item], plugin, request","両メソッドが呼び出される","中","印刷フック"
"1670","UT-RPT-052","report.models.LabelTemplate","print","異常系","ValidationError時にoutputが削除されること","プラグインがValidationErrorをスロー","items=[item], plugin, request","output.deleteが呼び出されValidationErrorが再スローされる","高","印刷エラー処理"
"1671","UT-RPT-053","report.models.LabelTemplate","print","異常系","一般的な例外時にログ記録とValidationErrorが発生すること","プラグインが例外をスロー","items=[item], plugin, request","log_errorが呼び出されValidationErrorがスローされる","高","例外処理"
"1672","UT-RPT-054","report.models.LabelTemplate","print","正常系","optionsがNoneの場合空辞書が使用されること","options=None","items=[item], plugin, options=None","空辞書がプラグインに渡される","中","オプションnull処理"
"1673","UT-RPT-055","report.models.ReportSnippet","snippet","正常系","スニペットファイルが正しく保存されること","有効なHTMLファイル","snippet=valid.html","ファイルが保存される","中","スニペット保存"
"1674","UT-RPT-056","report.models.ReportSnippet","snippet","異常系","無効な拡張子でValidationErrorが発生すること","無効な拡張子のファイル","snippet=invalid.txt","ValidationErrorがスローされる","中","拡張子検証"
"1675","UT-RPT-057","report.models.ReportAsset","asset","正常系","アセットファイルが正しく保存されること","有効な画像ファイル","asset=image.png","ファイルが保存される","中","アセット保存"
"1676","UT-RPT-058","report.models.rename_template","","正常系","テンプレートパスが正しく生成されること","インスタンスが存在","instance, filename='test.html'","'report/{SUBDIR}/test.html'が返却される","中","テンプレートリネーム"
"1677","UT-RPT-059","report.models.rename_template","","正常系","既存ファイルが削除されること","同名ファイルがストレージに存在","instance, filename='existing.html'","既存ファイルが削除され新パスが返却される","高","既存ファイル削除"
"1678","UT-RPT-060","report.models.log_report_error","","正常系","REPORT_LOG_ERRORS=Trueでエラーがログされること","REPORT_LOG_ERRORS=True","args, kwargs","log_errorが呼び出される","中","エラーログ記録"
"1679","UT-RPT-061","report.models.log_report_error","","正常系","REPORT_LOG_ERRORS=Falseでログされないこと","REPORT_LOG_ERRORS=False","args, kwargs","log_errorが呼び出されない","中","エラーログ抑制"
"1680","UT-RPT-062","report.helpers.report_model_types","","正常系","InvenTreeReportMixinを持つモデルが返却されること","ミックスインを持つモデルが存在","なし","モデルクラスのリストが返却される","中","モデルタイプ取得"
"1681","UT-RPT-063","report.helpers.report_model_from_name","","正常系","名前からモデルクラスが取得されること","'part'モデルが存在","model_name='part'","Partモデルクラスが返却される","中","名前からモデル取得"
"1682","UT-RPT-064","report.helpers.report_model_from_name","","異常系","無効な名前でNoneが返却されること","なし","model_name='invalid'","Noneが返却される","中","無効名前処理"
"1683","UT-RPT-065","report.helpers.report_model_from_name","","境界値","空文字でNoneが返却されること","なし","model_name=''","Noneが返却される","中","空文字処理"
"1684","UT-RPT-066","report.helpers.report_model_options","","正常系","モデルオプションのタプルリストが返却されること","ミックスインを持つモデルが存在","なし","(name, verbose_name)のリストが返却される","中","モデルオプション取得"
"1685","UT-RPT-067","report.helpers.report_page_size_options","","正常系","ページサイズオプションが返却されること","なし","なし","[('A4', 'A4'), ('A3', 'A3'), ...]が返却される","低","ページサイズオプション"
"1686","UT-RPT-068","report.helpers.page_sizes","","正常系","ページサイズ辞書が返却されること","なし","なし","{'A4': (210, 297), ...}が返却される","低","ページサイズ辞書"
"1687","UT-RPT-069","report.helpers.page_size","","正常系","ページコードからサイズが取得されること","なし","page_code='A4'","(210, 297)が返却される","低","ページサイズ取得"
"1688","UT-RPT-070","report.helpers.page_size","","境界値","不明なコードでA4がデフォルトとして返却されること","なし","page_code='UNKNOWN'","(210, 297)が返却されログが出力される","低","不明ページサイズ処理"
"1689","UT-RPT-071","report.helpers.report_page_size_default","","正常系","グローバル設定からデフォルトページサイズが取得されること","REPORT_DEFAULT_PAGE_SIZE='Letter'が設定済み","なし","'Letter'が返却される","中","デフォルトページサイズ取得"
"1690","UT-RPT-072","report.helpers.report_page_size_default","","異常系","設定取得エラー時にA4が返却されること","設定取得で例外発生","なし","'A4'が返却される","中","設定エラー時デフォルト"
"1691","UT-RPT-073","report.helpers.encode_image_base64","","正常系","画像がbase64エンコードされること","有効なPIL Imageオブジェクト","image, img_format='PNG'","'data:image/png;...'形式の文字列が返却される","中","画像エンコード"
"1692","UT-RPT-074","report.helpers.encode_image_base64","","正常系","JPEG形式でエンコードされること","有効なPIL Imageオブジェクト","image, img_format='JPEG'","'data:image/jpeg;...'形式の文字列が返却される","中","JPEG画像エンコード"
"1693","UT-RPT-075","report.validators.validate_report_model_type","","正常系","有効なmodel_typeで検証が成功すること","なし","value='part'","エラーなし","高","モデルタイプ検証"
"1694","UT-RPT-076","report.validators.validate_report_model_type","","異常系","無効なmodel_typeでValidationErrorが発生すること","なし","value='invalid'","ValidationErrorがスローされる","高","無効モデルタイプエラー"
"1695","UT-RPT-077","report.validators.validate_filters","","正常系","有効なフィルタ文字列で辞書が返却されること","なし","value='active=True', model=Part","{'active': True}が返却される","高","フィルタ検証"
"1696","UT-RPT-078","report.validators.validate_filters","","異常系","無効なフィルタでエラーが発生すること","なし","value='invalid_filter', model=Part","ValidationErrorがスローされる","高","無効フィルタエラー"
"1697","UT-RPT-079","report.tasks.print_reports","","正常系","バックグラウンドでレポートが印刷されること","テンプレートとアイテムが存在","template_id, item_ids, output_id","template.printが呼び出される","高","バックグラウンド印刷"
"1698","UT-RPT-080","report.tasks.print_reports","","異常系","テンプレートが見つからない場合エラーがログされること","テンプレートが存在しない","template_id=999, item_ids, output_id","log_errorが呼び出される","高","テンプレートエラー処理"
"1699","UT-RPT-081","report.tasks.print_reports","","正常系","アイテムが指定順にソートされること","アイテムが存在","template_id, item_ids=[3,1,2], output_id","アイテムがitem_ids順でソートされる","中","アイテムソート"
"1700","UT-RPT-082","report.tasks.print_labels","","正常系","バックグラウンドでラベルが印刷されること","テンプレートとプラグインが存在","template_id, item_ids, output_id, plugin_slug","template.printが呼び出される","高","バックグラウンドラベル印刷"
"1701","UT-RPT-083","report.tasks.print_labels","","異常系","プラグインが見つからない場合警告がログされること","プラグインが存在しない","template_id, item_ids, output_id, plugin_slug='invalid'","logger.warningが呼び出される","高","プラグインエラー処理"
"1702","UT-RPT-084","report.tasks.print_labels","","正常系","optionsがプラグインに渡されること","options={'copies': 2}","template_id, item_ids, output_id, plugin_slug, options={'copies': 2}","optionsがtemplate.printに渡される","中","オプション受け渡し"
"1703","UT-RPT-085","report.mixins.InvenTreeReportMixin","report_context","正常系","空の辞書が返却されること","なし","なし","{}が返却される","低","デフォルトコンテキスト"
"1704","UT-RPT-086","report.api.ReportFilterBase","filter_items","正常系","アイテムでフィルタリングされること","model_typeとitemsが指定","queryset, name, values='1,2,3'","マッチするテンプレートのみ返却される","中","アイテムフィルタ"
"1705","UT-RPT-087","report.api.ReportFilterBase","filter_items","境界値","model_typeがない場合フィルタがスキップされること","model_type未指定","queryset, name, values='1,2,3'","元のquerysetが返却される","中","model_type未指定時"
"1706","UT-RPT-088","report.api.LabelPrint","get_plugin_class","正常系","有効なプラグインが返却されること","プラグインが存在しアクティブ","plugin_slug='valid_plugin'","プラグインインスタンスが返却される","中","プラグイン取得"
"1707","UT-RPT-089","report.api.LabelPrint","get_plugin_class","異常系","プラグインが見つからない場合Noneが返却されること","プラグインが存在しない","plugin_slug='invalid'","Noneが返却される","中","プラグイン未発見"
"1708","UT-RPT-090","report.api.LabelPrint","get_plugin_class","異常系","raise_error=TrueでValidationErrorが発生すること","プラグインが存在しない","plugin_slug='invalid', raise_error=True","ValidationErrorがスローされる","中","プラグインエラー"
"1709","UT-RPT-091","report.api.LabelPrint","get_plugin_class","正常系","plugin_slugが空の場合デフォルトプラグインが使用されること","デフォルトプラグインが存在","plugin_slug=''","InvenTreeLabelPluginが返却される","中","デフォルトプラグイン"
"1710","UT-RPT-092","report.api.LabelPrint","get_plugin_serializer","正常系","プラグインシリアライザが返却されること","プラグインがget_printing_options_serializerを持つ","plugin","シリアライザインスタンスが返却される","中","プラグインシリアライザ取得"
"1711","UT-RPT-093","report.api.LabelPrint","get_plugin_serializer","境界値","メソッドがない場合Noneが返却されること","プラグインがメソッドを持たない","plugin","Noneが返却される","中","シリアライザなし"
"1712","UT-RPT-094","report.api.LabelPrint","post","正常系","ラベル印刷リクエストが処理されること","有効なテンプレートとアイテム","request.data={template, items}","201レスポンスが返却される","高","ラベル印刷API"
"1713","UT-RPT-095","report.api.LabelPrint","post","異常系","無効なラベルサイズでValidationErrorが発生すること","width<=0またはheight<=0","request.data={template, items}","ValidationErrorがスローされる","高","サイズ検証"
"1714","UT-RPT-096","report.api.LabelPrint","post","異常系","アイテムがない場合ValidationErrorが発生すること","有効なテンプレート","request.data={template, items=[]}","ValidationErrorがスローされる","高","空アイテムエラー"
"1715","UT-RPT-097","report.api.ReportPrint","post","正常系","レポート印刷リクエストが処理されること","有効なテンプレートとアイテム","request.data={template, items}","201レスポンスが返却される","高","レポート印刷API"
"1716","UT-RPT-098","report.api.ReportPrint","post","異常系","アイテムがない場合ValidationErrorが発生すること","有効なテンプレート","request.data={template, items=[]}","ValidationErrorがスローされる","高","空アイテムエラー"
"1717","UT-RPT-099","report.api.ReportPrint","print","正常系","タスクがオフロードされること","有効なテンプレートとアイテム","template, items_to_print, request","offload_taskが呼び出される","高","タスクオフロード"
"1718","UT-RPT-100","report.serializers.ReportSerializerBase","__init__","正常系","model_typeのchoicesが設定されること","choicesが空","なし","report_model_optionsでchoicesが設定される","中","シリアライザ初期化"
"1719","UT-RPT-101","report.serializers.LabelPrintSerializer","__init__","正常系","プラグインフィールドが追加されること","plugin_serializerが指定","plugin_serializer=serializer","プラグインフィールドが追加される","中","ラベルシリアライザ初期化"
"1720","UT-RPT-102","report.templatetags.barcode.qrcode","","正常系","QRコードが生成されること","なし","data='test'","base64エンコード画像文字列が返却される","高","QRコード生成"
"1721","UT-RPT-103","report.templatetags.barcode.qrcode","","異常系","空データでValueErrorが発生すること","なし","data=''","ValueErrorがスローされる","高","空データQRエラー"
"1722","UT-RPT-104","report.templatetags.barcode.qrcode","","正常系","カスタムオプションでQRコードが生成されること","なし","data='test', fill_color='red', box_size=10","カスタム設定のQRコードが返却される","中","カスタムQRコード"
"1723","UT-RPT-105","report.templatetags.barcode.barcode","","正常系","バーコードが生成されること","なし","data='12345678'","base64エンコード画像文字列が返却される","高","バーコード生成"
"1724","UT-RPT-106","report.templatetags.barcode.barcode","","異常系","空データでValueErrorが発生すること","なし","data=''","ValueErrorがスローされる","高","空データバーコードエラー"
"1725","UT-RPT-107","report.templatetags.barcode.barcode","","正常系","異なるバーコードクラスで生成されること","なし","data='12345678', barcode_class='ean13'","EAN13バーコードが返却される","中","バーコードクラス指定"
"1726","UT-RPT-108","report.templatetags.barcode.datamatrix","","正常系","DataMatrixコードが生成されること","なし","data='test'","base64エンコード画像文字列が返却される","高","DataMatrix生成"
"1727","UT-RPT-109","report.templatetags.barcode.datamatrix","","異常系","空データでValueErrorが発生すること","なし","data=''","ValueErrorがスローされる","高","空データDataMatrixエラー"
"1728","UT-RPT-110","report.templatetags.barcode.datamatrix","","正常系","カスタムカラーで生成されること","なし","data='test', fill_color='blue', back_color='yellow'","カスタムカラーのDataMatrixが返却される","中","カスタムDataMatrix"
"1729","UT-RPT-111","report.templatetags.barcode.clean_barcode","","正常系","HTMLタグが除去されること","なし","data='<script>alert()</script>test'","'test'が返却される","高","バーコードデータクリーン"
"1730","UT-RPT-112","report.templatetags.barcode.clean_barcode","","正常系","バッククォートが除去されること","なし","data='test`injection'","'testinjection'が返却される","高","インジェクション防止"
"1731","UT-RPT-113","report.templatetags.report.order_queryset","","正常系","QuerySetが正しくソートされること","QuerySetオブジェクト","queryset, 'name'","name順でソートされたQuerySetが返却される","中","QuerySetソート"
"1732","UT-RPT-114","report.templatetags.report.order_queryset","","境界値","QuerySet以外が渡された場合そのまま返却されること","リストオブジェクト","list, 'name'","元のリストが返却される","中","非QuerySet処理"
"1733","UT-RPT-115","report.templatetags.report.filter_queryset","","正常系","QuerySetがフィルタリングされること","QuerySetオブジェクト","queryset, is_active=True","フィルタリングされたQuerySetが返却される","中","QuerySetフィルタ"
"1734","UT-RPT-116","report.templatetags.report.filter_db_model","","正常系","モデル名からフィルタリングされたQuerySetが取得されること","'part.part'モデルが存在","model_name='part.part', is_template=True","フィルタリングされたQuerySetが返却される","中","モデルフィルタ"
"1735","UT-RPT-117","report.templatetags.report.filter_db_model","","異常系","無効なモデル名でNoneが返却されること","なし","model_name='invalid.model'","Noneが返却される","中","無効モデル名処理"
"1736","UT-RPT-118","report.templatetags.report.getindex","","正常系","リストの指定インデックスの値が返却されること","なし","container=[1,2,3], index=1","2が返却される","中","インデックス取得"
"1737","UT-RPT-119","report.templatetags.report.getindex","","境界値","範囲外インデックスでNoneが返却されること","なし","container=[1,2,3], index=10","Noneが返却される","中","範囲外インデックス"
"1738","UT-RPT-120","report.templatetags.report.getindex","","異常系","無効なインデックス型でNoneが返却されること","なし","container=[1,2,3], index='invalid'","Noneが返却される","中","無効インデックス型"
"1739","UT-RPT-121","report.templatetags.report.getkey","","正常系","辞書のキーに対応する値が返却されること","なし","container={'key': 'value'}, key='key'","'value'が返却される","中","キー取得"
"1740","UT-RPT-122","report.templatetags.report.getkey","","境界値","存在しないキーでbackup_valueが返却されること","なし","container={'key': 'value'}, key='missing', backup_value='default'","'default'が返却される","中","キー未発見時デフォルト"
"1741","UT-RPT-123","report.templatetags.report.getkey","","異常系","非辞書オブジェクトでNoneが返却されること","なし","container=[1,2,3], key='key'","Noneが返却される","中","非辞書処理"
"1742","UT-RPT-124","report.templatetags.report.asset","","正常系","アセットファイルパスが返却されること","アセットファイルが存在","filename='logo.png'","完全ファイルパスが返却される","中","アセットパス取得"
"1743","UT-RPT-125","report.templatetags.report.asset","","異常系","存在しないファイルでFileNotFoundErrorが発生すること","ファイルが存在しない","filename='missing.png'","FileNotFoundErrorがスローされる","高","アセット未発見エラー"
"1744","UT-RPT-126","report.templatetags.report.asset","","正常系","debug_modeでURLが返却されること","REPORT_DEBUG_MODE=True, ファイルが存在","filename='logo.png'","URLパスが返却される","中","デバッグモードアセット"
"1745","UT-RPT-127","report.templatetags.report.uploaded_image","","正常系","アップロード画像がbase64エンコードされること","画像ファイルが存在","filename='image.png'","base64エンコード文字列が返却される","高","画像エンコード"
"1746","UT-RPT-128","report.templatetags.report.uploaded_image","","正常系","replace_missing=Trueで置換画像が使用されること","画像ファイルが存在しない","filename='missing.png', replace_missing=True","置換画像のbase64が返却される","中","画像置換"
"1747","UT-RPT-129","report.templatetags.report.uploaded_image","","異常系","replace_missing=FalseでFileNotFoundErrorが発生すること","画像ファイルが存在しない","filename='missing.png', replace_missing=False","FileNotFoundErrorがスローされる","高","画像未発見エラー"
"1748","UT-RPT-130","report.templatetags.report.uploaded_image","","正常系","リサイズが正しく適用されること","画像ファイルが存在","filename='image.png', width=100, height=100","リサイズされた画像のbase64が返却される","中","画像リサイズ"
"1749","UT-RPT-131","report.templatetags.report.uploaded_image","","正常系","回転が正しく適用されること","画像ファイルが存在","filename='image.png', rotate=90","回転された画像のbase64が返却される","中","画像回転"
"1750","UT-RPT-132","report.templatetags.report.encode_svg_image","","正常系","SVG画像がbase64エンコードされること","SVGファイルが存在","filename='icon.svg'","'data:image/svg+xml;...'形式の文字列が返却される","中","SVGエンコード"
"1751","UT-RPT-133","report.templatetags.report.encode_svg_image","","異常系","存在しないファイルでFileNotFoundErrorが発生すること","ファイルが存在しない","filename='missing.svg'","FileNotFoundErrorがスローされる","高","SVG未発見エラー"
"1752","UT-RPT-134","report.templatetags.report.part_image","","正常系","Part画像パスが返却されること","Partインスタンスに画像がある","part=part_instance","画像のbase64が返却される","中","Part画像取得"
"1753","UT-RPT-135","report.templatetags.report.part_image","","異常系","非PartインスタンスでTypeErrorが発生すること","なし","part='not_a_part'","TypeErrorがスローされる","中","Part型チェック"
"1754","UT-RPT-136","report.templatetags.report.company_image","","正常系","Company画像パスが返却されること","Companyインスタンスに画像がある","company=company_instance","画像のbase64が返却される","中","Company画像取得"
"1755","UT-RPT-137","report.templatetags.report.company_image","","異常系","非CompanyインスタンスでTypeErrorが発生すること","なし","company='not_a_company'","TypeErrorがスローされる","中","Company型チェック"
"1756","UT-RPT-138","report.templatetags.report.parameter","","正常系","パラメータオブジェクトが返却されること","インスタンスにパラメータが存在","instance, parameter_name='weight'","Parameterオブジェクトが返却される","中","パラメータ取得"
"1757","UT-RPT-139","report.templatetags.report.parameter","","境界値","存在しないパラメータでNoneが返却されること","パラメータが存在しない","instance, parameter_name='missing'","Noneが返却される","中","パラメータ未発見"
"1758","UT-RPT-140","report.templatetags.report.parameter","","異常系","instanceがNoneでValueErrorが発生すること","なし","instance=None, parameter_name='weight'","ValueErrorがスローされる","中","Nullインスタンスエラー"
"1759","UT-RPT-141","report.templatetags.report.logo_image","","正常系","ロゴ画像パスが返却されること","カスタムロゴが設定済み","なし","ロゴ画像パスまたはbase64が返却される","中","ロゴ画像取得"
"1760","UT-RPT-142","report.templatetags.report.internal_link","","正常系","内部リンクHTMLが生成されること","base_urlが設定済み","link='/part/1/', text='Part 1'","'<a href=""..."">Part 1</a>'が返却される","中","内部リンク生成"
"1761","UT-RPT-143","report.templatetags.report.internal_link","","境界値","URL構築失敗時にテキストのみ返却されること","base_urlが未設定","link='/part/1/', text='Part 1'","'Part 1'が返却される","中","リンク構築失敗処理"
"1762","UT-RPT-144","report.templatetags.report.add","","正常系","2つの数値が加算されること","なし","x=10, y=5","15が返却される","中","加算"
"1763","UT-RPT-145","report.templatetags.report.add","","正常系","文字列数値が加算されること","なし","x='10', y='5'","15が返却される","中","文字列数値加算"
"1764","UT-RPT-146","report.templatetags.report.add","","異常系","非数値でValidationErrorが発生すること","なし","x='abc', y=5","ValidationErrorがスローされる","中","加算型エラー"
"1765","UT-RPT-147","report.templatetags.report.add","","異常系","nullでValidationErrorが発生すること","なし","x=None, y=5","ValidationErrorがスローされる","中","加算nullエラー"
"1766","UT-RPT-148","report.templatetags.report.subtract","","正常系","減算が正しく実行されること","なし","x=10, y=3","7が返却される","中","減算"
"1767","UT-RPT-149","report.templatetags.report.multiply","","正常系","乗算が正しく実行されること","なし","x=4, y=5","20が返却される","中","乗算"
"1768","UT-RPT-150","report.templatetags.report.divide","","正常系","除算が正しく実行されること","なし","x=20, y=4","5が返却される","中","除算"
"1769","UT-RPT-151","report.templatetags.report.divide","","異常系","ゼロ除算でValidationErrorが発生すること","なし","x=10, y=0","ValidationErrorがスローされる","高","ゼロ除算エラー"
"1770","UT-RPT-152","report.templatetags.report.modulo","","正常系","剰余が正しく計算されること","なし","x=10, y=3","1が返却される","中","剰余"
"1771","UT-RPT-153","report.templatetags.report.modulo","","異常系","ゼロ剰余でValidationErrorが発生すること","なし","x=10, y=0","ValidationErrorがスローされる","高","ゼロ剰余エラー"
"1772","UT-RPT-154","report.templatetags.report.render_currency","","正常系","通貨が正しくレンダリングされること","なし","money=Money(100, 'USD')","'$100.00'形式が返却される","中","通貨レンダリング"
"1773","UT-RPT-155","report.templatetags.report.create_currency","","正常系","Moneyオブジェクトが作成されること","なし","amount=100, currency='USD'","Money(100, 'USD')が返却される","中","通貨作成"
"1774","UT-RPT-156","report.templatetags.report.create_currency","","異常系","無効な通貨コードでValidationErrorが発生すること","なし","amount=100, currency='INVALID'","ValidationErrorがスローされる","中","無効通貨エラー"
"1775","UT-RPT-157","report.templatetags.report.create_currency","","境界値","currency未指定でデフォルト通貨が使用されること","デフォルト通貨が設定済み","amount=100, currency=None","デフォルト通貨のMoneyが返却される","中","デフォルト通貨"
"1776","UT-RPT-158","report.templatetags.report.convert_currency","","正常系","通貨が変換されること","為替レートが設定済み","money=Money(100, 'USD'), currency='EUR'","変換後のMoneyが返却される","中","通貨変換"
"1777","UT-RPT-159","report.templatetags.report.convert_currency","","異常系","為替レートがない場合ValidationErrorが発生すること","為替レートが未設定","money=Money(100, 'USD'), currency='XYZ'","ValidationErrorがスローされる","中","為替レートなしエラー"
"1778","UT-RPT-160","report.templatetags.report.convert_currency","","異常系","非MoneyオブジェクトでTypeErrorが発生すること","なし","money=100, currency='EUR'","TypeErrorがスローされる","中","Money型チェック"
"1779","UT-RPT-161","report.templatetags.report.render_html_text","","正常系","テキストがHTMLタグで囲まれること","なし","text='Hello', bold=True","'<strong>Hello</strong>'が返却される","低","HTMLテキストレンダリング"
"1780","UT-RPT-162","report.templatetags.report.render_html_text","","正常系","複数タグが適用されること","なし","text='Hello', bold=True, italic=True","'<strong><em>Hello</em></strong>'が返却される","低","複数タグ適用"
"1781","UT-RPT-163","report.templatetags.report.format_number","","正常系","数値がフォーマットされること","なし","number=1234.567, decimal_places=2","'1234.57'が返却される","中","数値フォーマット"
"1782","UT-RPT-164","report.templatetags.report.format_number","","正常系","千単位区切りが適用されること","なし","number=1234567, separator=','","'1,234,567'が返却される","中","千単位区切り"
"1783","UT-RPT-165","report.templatetags.report.format_number","","正常系","先頭ゼロが追加されること","なし","number=123, leading=5","'00000123'が返却される","中","先頭ゼロ追加"
"1784","UT-RPT-166","report.templatetags.report.format_datetime","","正常系","日時がフォーマットされること","なし","dt=datetime(2024,1,1,12,0,0)","ISO形式の文字列が返却される","中","日時フォーマット"
"1785","UT-RPT-167","report.templatetags.report.format_datetime","","正常系","カスタムフォーマットが適用されること","なし","dt=datetime(2024,1,1,12,0,0), fmt='%Y/%m/%d'","'2024/01/01'が返却される","中","カスタム日時フォーマット"
"1786","UT-RPT-168","report.templatetags.report.format_date","","正常系","日付がフォーマットされること","なし","dt=date(2024,1,1)","'2024-01-01'が返却される","中","日付フォーマット"
"1787","UT-RPT-169","report.templatetags.report.icon","","正常系","アイコンHTMLが生成されること","アイコンパックが存在","name='ti:home'","'<i class=""icon""...>...</i>'が返却される","低","アイコン生成"
"1788","UT-RPT-170","report.templatetags.report.icon","","境界値","空名前で空文字が返却されること","なし","name=''","''が返却される","低","空アイコン名"
"1789","UT-RPT-171","report.templatetags.report.icon","","異常系","無効なアイコン名で空文字が返却されること","なし","name='invalid:icon'","''が返却される","低","無効アイコン名"
"1790","UT-RPT-172","report.templatetags.report.include_icon_fonts","","正常系","フォントフェイスCSSが生成されること","アイコンパックが存在","なし","@font-faceルールを含むCSSが返却される","低","アイコンフォント生成"
"1791","UT-RPT-173","report.templatetags.report.include_icon_fonts","","正常系","ttfのみが指定された場合truetypeフォントが使用されること","アイコンパックが存在","ttf=True, woff=False","truetypeフォントのみのCSSが返却される","低","TTFフォント指定"
"1792","UT-STK-001","stock.models.StockLocationType","__str__","正常系","文字列表現が名前を返すこと","StockLocationTypeインスタンスが存在","name=""Warehouse""","Warehouseが返却される","低","表示用メソッド"
"1793","UT-STK-002","stock.models.StockLocationType","get_api_url","正常系","APIのURLが返却されること","なし","なし","api-location-type-listのURLが返却される","低","静的メソッド"
"1794","UT-STK-003","stock.models.StockLocation","delete","正常系","子ロケーションを保持して削除できること","子ロケーションが存在","delete_sub_locations=False","親ロケーションのみ削除される","高","データ整合性"
"1795","UT-STK-004","stock.models.StockLocation","delete","正常系","子ロケーションも含めて削除できること","子ロケーションが存在","delete_sub_locations=True","親と子ロケーションが削除される","高","データ整合性"
"1796","UT-STK-005","stock.models.StockLocation","delete","正常系","在庫アイテムを保持して削除できること","在庫アイテムが存在","delete_stock_items=False","ロケーションのみ削除される","高","データ整合性"
"1797","UT-STK-006","stock.models.StockLocation","barcode_model_type_code","正常系","バーコードモデルタイプコードがSLを返すこと","なし","なし","SLが返却される","低","静的メソッド"
"1798","UT-STK-007","stock.models.StockLocation","report_context","正常系","レポートコンテキストが正しく生成されること","StockLocationが存在","なし","location, qr_data, parent, stock_itemsを含むdictが返却される","中","レポート生成"
"1799","UT-STK-008","stock.models.StockLocation","icon","正常系","カスタムアイコンが設定されている場合それを返すこと","custom_iconが設定済み","custom_icon=""warehouse-icon""","warehouse-iconが返却される","中","プロパティ"
"1800","UT-STK-009","stock.models.StockLocation","icon","正常系","location_typeのアイコンを継承すること","custom_iconがNone, location_typeにアイコン設定あり","location_type.icon=""type-icon""","type-iconが返却される","中","プロパティ"
"1801","UT-STK-010","stock.models.StockLocation","icon","正常系","グローバル設定のデフォルトアイコンを返すこと","custom_icon=None, location_type=None, グローバル設定あり","STOCK_LOCATION_DEFAULT_ICON=""default-icon""","default-iconが返却される","中","プロパティ"
"1802","UT-STK-011","stock.models.StockLocation","icon","境界値","アイコンが未設定の場合空文字を返すこと","すべてのアイコン設定がなし","なし","空文字が返却される","低","プロパティ"
"1803","UT-STK-012","stock.models.StockLocation","get_location_owner","正常系","自身にオーナーがある場合それを返すこと","ownerが設定済み","owner=User1","User1が返却される","中","所有権管理"
"1804","UT-STK-013","stock.models.StockLocation","get_location_owner","正常系","親ロケーションのオーナーを返すこと","自身にownerなし, 親にownerあり","parent.owner=User2","User2が返却される","中","所有権管理"
"1805","UT-STK-014","stock.models.StockLocation","get_location_owner","境界値","オーナーが存在しない場合Noneを返すこと","どの階層にもownerなし","なし","Noneが返却される","中","所有権管理"
"1806","UT-STK-015","stock.models.StockLocation","check_ownership","正常系","スーパーユーザーは常にTrueを返すこと","user.is_superuser=True","user=superuser","Trueが返却される","高","認証・認可"
"1807","UT-STK-016","stock.models.StockLocation","check_ownership","正常系","所有権管理が無効の場合Trueを返すこと","STOCK_OWNERSHIP_CONTROL=False","user=normal_user","Trueが返却される","高","認証・認可"
"1808","UT-STK-017","stock.models.StockLocation","check_ownership","正常系","オーナーが許可したユーザーの場合Trueを返すこと","所有権管理有効, ユーザーが許可済み","user=allowed_user","Trueが返却される","高","認証・認可"
"1809","UT-STK-018","stock.models.StockLocation","check_ownership","異常系","オーナーが許可していないユーザーの場合Falseを返すこと","所有権管理有効, ユーザーが未許可","user=not_allowed_user","Falseが返却される","高","認証・認可"
"1810","UT-STK-019","stock.models.StockLocation","clean","異常系","構造的ロケーションに在庫がある場合ValidationErrorが発生すること","既存ロケーションに在庫あり","structural=True","ValidationErrorが発生","高","バリデーション"
"1811","UT-STK-020","stock.models.StockLocation","clean","正常系","構造的ロケーションに在庫がない場合正常に完了すること","既存ロケーションに在庫なし","structural=True","エラーなし","中","バリデーション"
"1812","UT-STK-021","stock.models.StockLocation","get_stock_items","正常系","カスケードなしで直接の在庫アイテムのみ取得できること","子ロケーションに在庫あり","cascade=False","直接の在庫アイテムのみ返却","中","クエリ"
"1813","UT-STK-022","stock.models.StockLocation","get_stock_items","正常系","カスケードありで子ロケーションの在庫も取得できること","子ロケーションに在庫あり","cascade=True","すべての在庫アイテムが返却","中","クエリ"
"1814","UT-STK-023","stock.models.StockLocation","stock_item_count","正常系","在庫アイテム数が正しく計算されること","複数の在庫アイテムが存在","cascade=True","正しいカウントが返却される","中","集計"
"1815","UT-STK-024","stock.models.StockLocation","item_count","正常系","プロパティが在庫アイテム数を返すこと","在庫アイテムが存在","なし","stock_item_count()と同じ値が返却","低","プロパティ"
"1816","UT-STK-025","stock.models.StockItem","convert_serial_to_int","正常系","数値文字列が整数に変換されること","なし","serial=""123""","123が返却される","中","シリアル番号変換"
"1817","UT-STK-026","stock.models.StockItem","convert_serial_to_int","境界値","空文字の場合Noneを返すこと","なし","serial=""""","Noneが返却される","中","シリアル番号変換"
"1818","UT-STK-027","stock.models.StockItem","convert_serial_to_int","境界値","Noneの場合Noneを返すこと","なし","serial=None","Noneが返却される","中","シリアル番号変換"
"1819","UT-STK-028","stock.models.StockItem","convert_serial_to_int","境界値","最大値を超える場合クリップされること","なし","serial=""999999999999""","0x7FFFFFFFが返却される","中","シリアル番号変換"
"1820","UT-STK-029","stock.models.StockItem","update_serial_number","正常系","シリアル番号が整数表現に更新されること","serial=""456""","なし","serial_int=456に更新される","中","シリアル番号更新"
"1821","UT-STK-030","stock.models.StockItem","update_serial_number","境界値","空のシリアル番号の場合serial_intが0になること","serial=""""","なし","serial_int=0に更新される","中","シリアル番号更新"
"1822","UT-STK-031","stock.models.StockItem","get_next_serialized_item","正常系","次のシリアル番号のアイテムが取得できること","連続するシリアル番号のアイテムが存在","reverse=False","次のシリアル番号のアイテムが返却","中","シリアル番号検索"
"1823","UT-STK-032","stock.models.StockItem","get_next_serialized_item","正常系","前のシリアル番号のアイテムが取得できること","連続するシリアル番号のアイテムが存在","reverse=True","前のシリアル番号のアイテムが返却","中","シリアル番号検索"
"1824","UT-STK-033","stock.models.StockItem","get_next_serialized_item","境界値","シリアル化されていない場合Noneを返すこと","serialized=False","なし","Noneが返却される","中","シリアル番号検索"
"1825","UT-STK-034","stock.models.StockItem","serialized","正常系","シリアル番号と数量1の場合Trueを返すこと","serial=""001"", quantity=1","なし","Trueが返却される","高","プロパティ"
"1826","UT-STK-035","stock.models.StockItem","serialized","異常系","シリアル番号がNoneの場合Falseを返すこと","serial=None, quantity=1","なし","Falseが返却される","高","プロパティ"
"1827","UT-STK-036","stock.models.StockItem","serialized","異常系","数量が1以外の場合Falseを返すこと","serial=""001"", quantity=5","なし","Falseが返却される","高","プロパティ"
"1828","UT-STK-037","stock.models.StockItem","validate_unique","正常系","一意のシリアル番号が許可されること","同じパーツに同じシリアルなし","serial=""UNIQUE-001""","エラーなし","高","バリデーション"
"1829","UT-STK-038","stock.models.StockItem","validate_unique","異常系","重複するシリアル番号でValidationErrorが発生すること","同じパーツに同じシリアルあり","serial=""DUPLICATE""","ValidationErrorが発生","高","バリデーション"
"1830","UT-STK-039","stock.models.StockItem","validate_batch_code","正常系","有効なバッチコードが許可されること","プラグインでバリデーション設定なし","batch=""BATCH-001""","エラーなし","中","バリデーション"
"1831","UT-STK-040","stock.models.StockItem","clean","異常系","構造的ロケーションに配置しようとした場合ValidationErrorが発生すること","location.structural=True","location=structural_location","ValidationErrorが発生","高","バリデーション"
"1832","UT-STK-041","stock.models.StockItem","clean","異常系","仮想パーツに在庫を作成しようとした場合ValidationErrorが発生すること","part.virtual=True","part=virtual_part","ValidationErrorが発生","高","バリデーション"
"1833","UT-STK-042","stock.models.StockItem","clean","異常系","負の数量でValidationErrorが発生すること","なし","quantity=-1","ValidationErrorが発生","高","バリデーション"
"1834","UT-STK-043","stock.models.StockItem","clean","異常系","シリアル番号付きで数量が1より大きい場合ValidationErrorが発生すること","serial=""001""","quantity=5","ValidationErrorが発生","高","バリデーション"
"1835","UT-STK-044","stock.models.StockItem","clean","異常系","自分自身に属する設定でValidationErrorが発生すること","なし","belongs_to=self","ValidationErrorが発生","高","バリデーション"
"1836","UT-STK-045","stock.models.StockItem","clean","異常系","is_building=TrueでビルドなしのValidationErrorが発生すること","build=None","is_building=True","ValidationErrorが発生","高","バリデーション"
"1837","UT-STK-046","stock.models.StockItem","clean","正常系","トラッカブルパーツの整数数量が許可されること","part.trackable=True","quantity=10","エラーなし","中","バリデーション"
"1838","UT-STK-047","stock.models.StockItem","clean","異常系","トラッカブルパーツの小数数量でValidationErrorが発生すること","part.trackable=True","quantity=10.5","ValidationErrorが発生","高","バリデーション"
"1839","UT-STK-048","stock.models.StockItem","save","正常系","新規作成時にトラッキングエントリが追加されること","新規StockItem","add_note=True","CREATEDトラッキングエントリが作成される","中","保存処理"
"1840","UT-STK-049","stock.models.StockItem","save","正常系","ステータス変更時にトラッキングエントリが追加されること","既存StockItem","status変更","EDITEDトラッキングエントリが作成される","中","保存処理"
"1841","UT-STK-050","stock.models.StockItem","convert_to_variant","正常系","バリアントへの変換が正常に行われること","StockItemが存在","variant=new_variant","partが更新され、トラッキングエントリが追加される","中","バリアント変換"
"1842","UT-STK-051","stock.models.StockItem","convert_to_variant","境界値","Noneバリアントの場合何もしないこと","StockItemが存在","variant=None","変更なし","低","バリアント変換"
"1843","UT-STK-052","stock.models.StockItem","convert_to_variant","境界値","同じパーツの場合何もしないこと","StockItemが存在","variant=current_part","変更なし","低","バリアント変換"
"1844","UT-STK-053","stock.models.StockItem","get_item_owner","正常系","アイテムのオーナーが返却されること","owner設定あり","なし","オーナーが返却される","中","所有権管理"
"1845","UT-STK-054","stock.models.StockItem","get_item_owner","正常系","ロケーションのオーナーが返却されること","アイテムにownerなし, ロケーションにownerあり","なし","ロケーションのオーナーが返却される","中","所有権管理"
"1846","UT-STK-055","stock.models.StockItem","check_ownership","正常系","スーパーユーザーは常にTrueを返すこと","user.is_superuser=True","user=superuser","Trueが返却される","高","認証・認可"
"1847","UT-STK-056","stock.models.StockItem","is_stale","正常系","期限切れ間近の場合Trueを返すこと","expiry_date設定, STOCK_STALE_DAYS内","expiry_date=近い将来","Trueが返却される","中","期限管理"
"1848","UT-STK-057","stock.models.StockItem","is_stale","正常系","期限が十分先の場合Falseを返すこと","expiry_date設定, STOCK_STALE_DAYS外","expiry_date=十分先","Falseが返却される","中","期限管理"
"1849","UT-STK-058","stock.models.StockItem","is_stale","境界値","expiry_dateがNoneの場合Falseを返すこと","expiry_date=None","なし","Falseが返却される","中","期限管理"
"1850","UT-STK-059","stock.models.StockItem","is_expired","正常系","期限切れの場合Trueを返すこと","expiry_date設定, 過去日付","expiry_date=過去","Trueが返却される","中","期限管理"
"1851","UT-STK-060","stock.models.StockItem","is_expired","正常系","期限内の場合Falseを返すこと","expiry_date設定, 未来日付","expiry_date=未来","Falseが返却される","中","期限管理"
"1852","UT-STK-061","stock.models.StockItem","is_expired","境界値","expiry_dateがNoneの場合Falseを返すこと","expiry_date=None","なし","Falseが返却される","中","期限管理"
"1853","UT-STK-062","stock.models.StockItem","clearAllocations","正常系","すべてのアロケーションが削除されること","SalesOrderとBuildOrderのアロケーションが存在","なし","アロケーションが全削除される","高","アロケーション管理"
"1854","UT-STK-063","stock.models.StockItem","allocateToCustomer","正常系","全数量が顧客に割り当てられること","quantity=10","customer=customer1, quantity=None","全量が顧客に割り当てられる","高","顧客割り当て"
"1855","UT-STK-064","stock.models.StockItem","allocateToCustomer","正常系","一部数量が顧客に割り当てられること","quantity=10","customer=customer1, quantity=5","5個が分割され顧客に割り当てられる","高","顧客割り当て"
"1856","UT-STK-065","stock.models.StockItem","return_from_customer","正常系","顧客から在庫に返却されること","customerに割り当て済み","location=warehouse","在庫に返却される","高","返却処理"
"1857","UT-STK-066","stock.models.StockItem","return_to_stock","正常系","在庫に返却されること","消費済み状態","location=warehouse","在庫に返却される","高","返却処理"
"1858","UT-STK-067","stock.models.StockItem","return_to_stock","異常系","数量0以下でValidationErrorが発生すること","なし","quantity=0","ValidationErrorが発生","高","返却処理"
"1859","UT-STK-068","stock.models.StockItem","return_to_stock","異常系","数量超過でValidationErrorが発生すること","quantity=10","quantity=20","ValidationErrorが発生","高","返却処理"
"1860","UT-STK-069","stock.models.StockItem","is_allocated","正常系","アロケーションがある場合Trueを返すこと","アロケーションあり","なし","Trueが返却される","中","アロケーション確認"
"1861","UT-STK-070","stock.models.StockItem","is_allocated","正常系","アロケーションがない場合Falseを返すこと","アロケーションなし","なし","Falseが返却される","中","アロケーション確認"
"1862","UT-STK-071","stock.models.StockItem","build_allocation_count","正常系","ビルドアロケーション数が正しく計算されること","ビルドアロケーションあり","なし","正しいカウントが返却される","高","アロケーション集計"
"1863","UT-STK-072","stock.models.StockItem","sales_order_allocation_count","正常系","販売注文アロケーション数が正しく計算されること","販売注文アロケーションあり","active=True","正しいカウントが返却される","高","アロケーション集計"
"1864","UT-STK-073","stock.models.StockItem","allocation_count","正常系","総アロケーション数が正しく計算されること","両方のアロケーションあり","なし","build + sales_orderの合計が返却される","高","アロケーション集計"
"1865","UT-STK-074","stock.models.StockItem","unallocated_quantity","正常系","未アロケーション数量が正しく計算されること","quantity=10, allocated=3","なし","7が返却される","高","数量計算"
"1866","UT-STK-075","stock.models.StockItem","unallocated_quantity","境界値","アロケーション超過の場合0を返すこと","quantity=10, allocated=15","なし","0が返却される","中","数量計算"
"1867","UT-STK-076","stock.models.StockItem","can_delete","正常系","削除可能な場合Trueを返すこと","インストール済みアイテムなし, sales_order=None","なし","Trueが返却される","中","削除可否判定"
"1868","UT-STK-077","stock.models.StockItem","can_delete","異常系","インストール済みアイテムがある場合Falseを返すこと","installed_item_count > 0","なし","Falseが返却される","中","削除可否判定"
"1869","UT-STK-078","stock.models.StockItem","can_delete","異常系","販売注文に割り当て済みの場合Falseを返すこと","sales_order設定あり","なし","Falseが返却される","中","削除可否判定"
"1870","UT-STK-079","stock.models.StockItem","get_installed_items","正常系","インストール済みアイテムが取得できること","belongs_toで関連するアイテムあり","cascade=False","直接のインストール済みアイテムが返却","中","インストール管理"
"1871","UT-STK-080","stock.models.StockItem","get_installed_items","正常系","カスケードでネストしたアイテムも取得できること","ネストしたインストールあり","cascade=True","すべてのインストール済みアイテムが返却","中","インストール管理"
"1872","UT-STK-081","stock.models.StockItem","installStockItem","正常系","他のアイテムをインストールできること","インストール対象アイテムが存在","other_item, quantity=5","アイテムがインストールされる","高","インストール処理"
"1873","UT-STK-082","stock.models.StockItem","uninstall_into_location","正常系","アイテムをアンインストールしてロケーションに移動できること","インストール済み状態","location=warehouse","アンインストールされロケーションに移動","高","アンインストール処理"
"1874","UT-STK-083","stock.models.StockItem","uninstall_into_location","境界値","belongs_toがNoneの場合Falseを返すこと","belongs_to=None","なし","Falseが返却される","中","アンインストール処理"
"1875","UT-STK-084","stock.models.StockItem","is_in_stock","正常系","在庫中の場合Trueを返すこと","正常な在庫状態","check_status=True","Trueが返却される","高","在庫状態確認"
"1876","UT-STK-085","stock.models.StockItem","is_in_stock","異常系","ステータスがAVAILABLE_CODES外の場合Falseを返すこと","status=DESTROYED","check_status=True","Falseが返却される","高","在庫状態確認"
"1877","UT-STK-086","stock.models.StockItem","is_in_stock","異常系","数量が0以下の場合Falseを返すこと","quantity=0","check_quantity=True","Falseが返却される","高","在庫状態確認"
"1878","UT-STK-087","stock.models.StockItem","is_in_stock","異常系","製造中の場合Falseを返すこと","is_building=True","check_in_production=True","Falseが返却される","高","在庫状態確認"
"1879","UT-STK-088","stock.models.StockItem","is_in_stock","異常系","販売注文に割り当て済みの場合Falseを返すこと","sales_order設定あり","なし","Falseが返却される","高","在庫状態確認"
"1880","UT-STK-089","stock.models.StockItem","in_stock","正常系","プロパティがis_in_stockを返すこと","正常な在庫状態","なし","is_in_stock(check_status=True)と同じ値","中","プロパティ"
"1881","UT-STK-090","stock.models.StockItem","can_adjust_location","正常系","ロケーション調整可能な場合Trueを返すこと","customer=None, belongs_to=None, sales_order=None","なし","Trueが返却される","中","ロケーション調整"
"1882","UT-STK-091","stock.models.StockItem","can_adjust_location","異常系","customerがある場合Falseを返すこと","customer設定あり","なし","Falseが返却される","中","ロケーション調整"
"1883","UT-STK-092","stock.models.StockItem","add_tracking_entry","正常系","トラッキングエントリが追加されること","StockItemが存在","entry_type=STOCK_ADD, user=user1","StockItemTrackingが作成される","中","トラッキング"
"1884","UT-STK-093","stock.models.StockItem","add_tracking_entry","境界値","STOCK_UPDATEでdeltasが空の場合Noneを返すこと","なし","entry_type=STOCK_UPDATE, deltas={}, notes=""""","Noneが返却される","低","トラッキング"
"1885","UT-STK-094","stock.models.StockItem","serializeStock","正常系","在庫をシリアル化できること","trackableパーツ, quantity=10","quantity=3, serials=[""001"",""002"",""003""]","3つのシリアル化されたStockItemが作成される","高","シリアル化"
"1886","UT-STK-095","stock.models.StockItem","serializeStock","異常系","既にシリアル化済みの場合Noneを返すこと","serialized=True","なし","Noneが返却される","中","シリアル化"
"1887","UT-STK-096","stock.models.StockItem","serializeStock","異常系","trackableでない場合ValidationErrorが発生すること","part.trackable=False","なし","ValidationErrorが発生","高","シリアル化"
"1888","UT-STK-097","stock.models.StockItem","serializeStock","異常系","数量が0以下の場合ValidationErrorが発生すること","なし","quantity=0","ValidationErrorが発生","高","シリアル化"
"1889","UT-STK-098","stock.models.StockItem","serializeStock","異常系","数量超過の場合ValidationErrorが発生すること","quantity=10","quantity=20","ValidationErrorが発生","高","シリアル化"
"1890","UT-STK-099","stock.models.StockItem","serializeStock","異常系","重複シリアル番号でValidationErrorが発生すること","既存シリアルあり","serials含む既存シリアル","ValidationErrorが発生","高","シリアル化"
"1891","UT-STK-100","stock.models.StockItem","copyTestResultsFrom","正常系","テスト結果がコピーされること","元アイテムにテスト結果あり","other=source_item","テスト結果がコピーされる","中","テスト結果コピー"
"1892","UT-STK-101","stock.models.StockItem","add_test_result","正常系","テスト結果が追加されること","なし","test_name=""Test1"", result=True","StockItemTestResultが作成される","中","テスト結果追加"
"1893","UT-STK-102","stock.models.StockItem","add_test_result","正常系","テンプレートが存在しない場合作成されること","テンプレートなし","test_name=""NewTest"", create_template=True","テンプレートとテスト結果が作成される","中","テスト結果追加"
"1894","UT-STK-103","stock.models.StockItem","add_test_result","異常系","テンプレートなしでcreate_template=Falseの場合ValidationErrorが発生すること","テンプレートなし","create_template=False","ValidationErrorが発生","中","テスト結果追加"
"1895","UT-STK-104","stock.models.StockItem","can_merge","正常系","マージ可能な場合Trueを返すこと","同じパーツ, 同じステータス, シリアルなし","other=compatible_item","Trueが返却される","中","マージ可否判定"
"1896","UT-STK-105","stock.models.StockItem","can_merge","異常系","販売注文に割り当て済みの場合Falseを返すこと","sales_order設定あり","なし","Falseが返却される","中","マージ可否判定"
"1897","UT-STK-106","stock.models.StockItem","can_merge","異常系","インストール済みの場合Falseを返すこと","belongs_to設定あり","なし","Falseが返却される","中","マージ可否判定"
"1898","UT-STK-107","stock.models.StockItem","can_merge","異常系","シリアル化されている場合Falseを返すこと","serialized=True","なし","Falseが返却される","中","マージ可否判定"
"1899","UT-STK-108","stock.models.StockItem","can_merge","異常系","異なるパーツの場合Falseを返すこと","なし","other.part != self.part","Falseが返却される","中","マージ可否判定"
"1900","UT-STK-109","stock.models.StockItem","merge_stock_items","正常系","在庫アイテムがマージされること","マージ可能なアイテム","other_items=[item1, item2]","数量が合計され、他は削除される","高","マージ処理"
"1901","UT-STK-110","stock.models.StockItem","merge_stock_items","正常系","価格が加重平均で計算されること","異なる価格のアイテム","price情報あり","加重平均価格が設定される","高","マージ処理"
"1902","UT-STK-111","stock.models.StockItem","splitStock","正常系","在庫が分割されること","quantity=10","quantity=3","3個の新しいStockItemが作成される","高","分割処理"
"1903","UT-STK-112","stock.models.StockItem","splitStock","境界値","シリアル化されている場合selfを返すこと","serialized=True","なし","selfが返却される","中","分割処理"
"1904","UT-STK-113","stock.models.StockItem","splitStock","境界値","数量0以下の場合selfを返すこと","なし","quantity=0","selfが返却される","中","分割処理"
"1905","UT-STK-114","stock.models.StockItem","splitStock","境界値","全量以上の場合selfを返すこと","quantity=10","quantity=15","selfが返却される","中","分割処理"
"1906","UT-STK-115","stock.models.StockItem","splitStock","異常系","製造中の場合ValidationErrorが発生すること","is_building=True","allow_production=False","ValidationErrorが発生","高","分割処理"
"1907","UT-STK-116","stock.models.StockItem","move","正常系","在庫がロケーションに移動されること","location=location1","location=location2","ロケーションが更新され、トラッキングが追加される","高","移動処理"
"1908","UT-STK-117","stock.models.StockItem","move","正常系","一部数量のみ移動されること","quantity=10","quantity=5, location=location2","5個が分割され移動される","高","移動処理"
"1909","UT-STK-118","stock.models.StockItem","move","境界値","数量0以下の場合Falseを返すこと","なし","quantity=0","Falseが返却される","中","移動処理"
"1910","UT-STK-119","stock.models.StockItem","move","境界値","ロケーションがNoneの場合Falseを返すこと","なし","location=None","Falseが返却される","中","移動処理"
"1911","UT-STK-120","stock.models.StockItem","move","異常系","在庫外で転送不可の場合ValidationErrorが発生すること","in_stock=False, STOCK_ALLOW_OUT_OF_STOCK_TRANSFER=False","なし","ValidationErrorが発生","高","移動処理"
"1912","UT-STK-121","stock.models.StockItem","updateQuantity","正常系","数量が更新されること","quantity=10","quantity=15","数量が15に更新される","高","数量更新"
"1913","UT-STK-122","stock.models.StockItem","updateQuantity","正常系","数量0でdelete_on_depleteの場合削除されること","delete_on_deplete=True","quantity=0","StockItemが削除される","高","数量更新"
"1914","UT-STK-123","stock.models.StockItem","updateQuantity","境界値","シリアル化されている場合何もしないこと","serialized=True","quantity=5","変更なし","中","数量更新"
"1915","UT-STK-124","stock.models.StockItem","stocktake","正常系","棚卸しが実行されること","quantity=10","count=8","数量が8に更新、棚卸し日時が記録される","高","棚卸し"
"1916","UT-STK-125","stock.models.StockItem","stocktake","異常系","負の数量でFalseを返すこと","なし","count=-5","Falseが返却される","高","棚卸し"
"1917","UT-STK-126","stock.models.StockItem","add_stock","正常系","在庫が追加されること","quantity=10","quantity=5","数量が15に更新される","高","在庫追加"
"1918","UT-STK-127","stock.models.StockItem","add_stock","異常系","シリアル化されている場合Falseを返すこと","serialized=True","quantity=5","Falseが返却される","高","在庫追加"
"1919","UT-STK-128","stock.models.StockItem","add_stock","境界値","数量0以下の場合Falseを返すこと","なし","quantity=0","Falseが返却される","中","在庫追加"
"1920","UT-STK-129","stock.models.StockItem","take_stock","正常系","在庫が減少すること","quantity=10","quantity=3","数量が7に更新される","高","在庫削減"
"1921","UT-STK-130","stock.models.StockItem","take_stock","異常系","シリアル化されている場合Falseを返すこと","serialized=True","quantity=1","Falseが返却される","高","在庫削減"
"1922","UT-STK-131","stock.models.StockItem","take_stock","境界値","数量0以下の場合Falseを返すこと","なし","quantity=0","Falseが返却される","中","在庫削減"
"1923","UT-STK-132","stock.models.StockItem","__str__","正常系","trackableパーツでシリアル番号ありの場合正しい文字列を返すこと","part.trackable=True, serial=""001""","なし","Part #001形式の文字列が返却される","低","表示用メソッド"
"1924","UT-STK-133","stock.models.StockItem","__str__","正常系","通常パーツの場合数量と名前を返すこと","quantity=5","なし","5 x PartName形式の文字列が返却される","低","表示用メソッド"
"1925","UT-STK-134","stock.models.StockItem","getTestResults","正常系","テスト結果が取得できること","テスト結果あり","なし","テスト結果のQuerySetが返却される","中","テスト結果取得"
"1926","UT-STK-135","stock.models.StockItem","getTestResults","正常系","テンプレートでフィルタできること","複数テスト結果あり","template=specific_template","フィルタされた結果が返却される","中","テスト結果取得"
"1927","UT-STK-136","stock.models.StockItem","testResultMap","正常系","テスト結果のマップが取得できること","複数テスト結果あり","なし","key: resultのdictが返却される","中","テスト結果マップ"
"1928","UT-STK-137","stock.models.StockItem","requiredTestStatus","正常系","必須テストのステータスが取得できること","必須テストあり","なし","total, passed, failedを含むdictが返却される","中","テストステータス"
"1929","UT-STK-138","stock.models.StockItem","passedAllRequiredTests","正常系","すべての必須テストに合格した場合Trueを返すこと","すべて合格","なし","Trueが返却される","中","テスト合格判定"
"1930","UT-STK-139","stock.models.StockItem","passedAllRequiredTests","異常系","未合格テストがある場合Falseを返すこと","一部不合格","なし","Falseが返却される","中","テスト合格判定"
"1931","UT-STK-140","stock.models.StockItemTracking","label","正常系","tracking_typeに対応するラベルが返却されること","tracking_type=STOCK_ADD","なし","Stock manually addedが返却される","低","ラベル取得"
"1932","UT-STK-141","stock.models.StockItemTracking","get_api_url","正常系","APIのURLが返却されること","なし","なし","api-stock-tracking-listのURLが返却される","低","静的メソッド"
"1933","UT-STK-142","stock.models.StockItemTestResult","__str__","正常系","文字列表現がテスト名と結果を含むこと","test_name=""Test1"", result=True","なし","Test1 - True形式の文字列が返却される","低","表示用メソッド"
"1934","UT-STK-143","stock.models.StockItemTestResult","clean","異常系","テンプレートがない場合ValidationErrorが発生すること","template=None","なし","ValidationErrorが発生","高","バリデーション"
"1935","UT-STK-144","stock.models.StockItemTestResult","clean","異常系","値が必須で未入力の場合ValidationErrorが発生すること","template.requires_value=True","value=""""","ValidationErrorが発生","高","バリデーション"
"1936","UT-STK-145","stock.models.StockItemTestResult","clean","異常系","添付ファイルが必須で未添付の場合ValidationErrorが発生すること","template.requires_attachment=True","attachment=None","ValidationErrorが発生","高","バリデーション"
"1937","UT-STK-146","stock.models.StockItemTestResult","clean","異常系","選択肢外の値でValidationErrorが発生すること","template.choices設定あり","value=invalid_choice","ValidationErrorが発生","高","バリデーション"
"1938","UT-STK-147","stock.models.StockItemTestResult","key","正常系","テスト名からキーが生成されること","test_name=""My Test Name""","なし","my_test_name形式のキーが返却される","低","キー生成"
"1939","UT-STK-148","stock.generators.generate_batch_code","","正常系","バッチコードが生成されること","STOCK_BATCH_CODE_TEMPLATE設定あり","なし","テンプレートに基づくバッチコードが返却される","中","バッチコード生成"
"1940","UT-STK-149","stock.generators.generate_batch_code","","正常系","プラグインからバッチコードが生成されること","プラグイン設定あり","なし","プラグインが生成したバッチコードが返却される","中","バッチコード生成"
"1941","UT-STK-150","stock.generators.generate_serial_number","","正常系","シリアル番号が生成されること","パーツが存在","part=part1, quantity=3","カンマ区切りの3つのシリアル番号が返却される","中","シリアル番号生成"
"1942","UT-STK-151","stock.generators.generate_serial_number","","境界値","パーツがNoneの場合Noneを返すこと","なし","part=None","Noneが返却される","中","シリアル番号生成"
"1943","UT-STK-152","stock.generators.generate_serial_number","","異常系","数量が1未満の場合ValidationErrorが発生すること","なし","quantity=0","ValidationErrorが発生","中","シリアル番号生成"
"1944","UT-STK-153","stock.tasks.rebuild_stock_items","","正常系","StockItemツリーが再構築されること","なし","なし","StockItem.objects.rebuild()が呼ばれる","中","ツリー再構築"
"1945","UT-STK-154","stock.tasks.rebuild_stock_item_tree","","正常系","特定のツリーIDで部分再構築が成功すること","tree_id存在","tree_id=1","Trueが返却される","中","ツリー再構築"
"1946","UT-STK-155","stock.tasks.rebuild_stock_item_tree","","正常系","tree_idがNoneの場合全体再構築すること","なし","tree_id=None","全体再構築が実行される","中","ツリー再構築"
"1947","UT-STK-156","stock.tasks.rebuild_stock_item_tree","","異常系","部分再構築失敗時に全体再構築がスケジュールされること","再構築エラー","rebuild_on_fail=True","offload_taskが呼ばれ、Falseが返却される","中","ツリー再構築"
"1948","UT-STK-157","stock.status_codes.StockStatus","","正常系","OKステータスの値が10であること","なし","StockStatus.OK.value","10が返却される","低","ステータスコード"
"1949","UT-STK-158","stock.status_codes.StockStatusGroups","","正常系","AVAILABLE_CODESに正しいステータスが含まれること","なし","StockStatusGroups.AVAILABLE_CODES","OK, ATTENTION, DAMAGED, RETURNEDの値が含まれる","中","ステータスグループ"
"1950","UT-STK-159","stock.events.StockEvents","","正常系","イベント列挙値が正しいこと","なし","StockEvents.ITEM_MOVED","stockitem.movedが返却される","低","イベント定義"
"1951","UT-STK-160","stock.filters.annotate_location_items","","正常系","ロケーションのアイテム数アノテーションが正しく機能すること","サブロケーションにアイテムあり","filter=None","正しいカウントがアノテーションされる","中","フィルタ"
"1952","UT-STK-161","stock.filters.annotate_sub_locations","","正常系","サブロケーション数アノテーションが正しく機能すること","サブロケーションあり","なし","正しいサブロケーション数がアノテーションされる","中","フィルタ"
"1953","UT-STK-162","stock.models.default_delete_on_deplete","","正常系","グローバル設定の値が返却されること","STOCK_DELETE_DEPLETED_DEFAULT=True","なし","Trueが返却される","中","デフォルト値"
"1954","UT-STK-163","stock.models.default_delete_on_deplete","","異常系","データベースエラー時にTrueを返すこと","IntegrityError発生","なし","Trueが返却される","低","デフォルト値"
"1955","UT-STK-164","stock.models.StockItem","_create_serial_numbers","正常系","複数のシリアル番号付きStockItemが一括作成されること","なし","serials=[""001"",""002"",""003""], part=part1","3つのStockItemが作成される","高","一括作成"
"1956","UT-STK-165","stock.models.StockItem","_create_serial_numbers","異常系","パーツがない場合ValidationErrorが発生すること","なし","part未指定","ValidationErrorが発生","高","一括作成"
"1957","UT-STK-166","stock.models.StockItem","barcode_model_type_code","正常系","バーコードモデルタイプコードがSIを返すこと","なし","なし","SIが返却される","低","静的メソッド"
"1958","UT-STK-167","stock.models.StockItem","status_label","正常系","ステータスラベルが返却されること","status=StockStatus.OK","なし","OKが返却される","低","プロパティ"
"1959","UT-STK-168","stock.models.StockItem","status_text","正常系","ステータステキストが返却されること","status=StockStatus.OK","なし","OKのテキストが返却される","低","プロパティ"
"1960","UT-USR-001","users.models.ApiToken","generate_key","正常系","カスタムプレフィックス付きトークンキーが生成されること","なし","prefix='inv-'","'inv-'で始まり日付サフィックスを含むキーが返却される","高","トークン生成の基本機能"
"1961","UT-USR-002","users.models.ApiToken","generate_key","正常系","デフォルトプレフィックスでトークンが生成されること","なし","引数なし","'inv-'で始まるキーが返却される","中","デフォルト値の確認"
"1962","UT-USR-003","users.models.ApiToken","token","正常系","トークンが正しく隠蔽されること","ApiTokenインスタンスが存在","保存済みトークン","先頭8文字と末尾12文字以外が'*'で隠蔽される","高","セキュリティ要件"
"1963","UT-USR-004","users.models.ApiToken","token","境界値","未保存トークンで生のキーが返却されること","pk=Noneの新規インスタンス","新規トークン","生のキーがそのまま返却される","中","新規作成時の挙動"
"1964","UT-USR-005","users.models.ApiToken","expired","正常系","有効期限切れトークンがTrueを返すこと","expiry < 今日の日付","期限切れトークン","Trueが返却される","高","認証制御の重要機能"
"1965","UT-USR-006","users.models.ApiToken","expired","正常系","有効期限内トークンがFalseを返すこと","expiry >= 今日の日付","有効なトークン","Falseが返却される","高","認証制御の重要機能"
"1966","UT-USR-007","users.models.ApiToken","expired","境界値","expiry=Noneの場合Falseを返すこと","expiryがNone","expiry=None","Falseが返却される","中","Null処理の確認"
"1967","UT-USR-008","users.models.ApiToken","active","正常系","revoked=Falseかつ未期限切れでTrueを返すこと","revoked=False, expired=False","有効なトークン","Trueが返却される","高","認証判定の基本機能"
"1968","UT-USR-009","users.models.ApiToken","active","正常系","revoked=TrueでFalseを返すこと","revoked=True","無効化されたトークン","Falseが返却される","高","無効化トークンの検証"
"1969","UT-USR-010","users.models.ApiToken","active","正常系","期限切れでFalseを返すこと","expired=True","期限切れトークン","Falseが返却される","高","期限切れトークンの検証"
"1970","UT-USR-011","users.models.ApiToken","sanitize_name","正常系","名前が正しくサニタイズされること","なし","name=' test name '","'test-name'が返却される","中","入力値の正規化"
"1971","UT-USR-012","users.models.ApiToken","sanitize_name","境界値","100文字を超える名前が切り詰められること","なし","101文字以上の文字列","100文字に切り詰められる","中","文字数制限の確認"
"1972","UT-USR-013","users.models.ApiToken","sanitize_name","異常系","HTMLタグが除去されること","なし","name='<script>test</script>'","'test'が返却される","高","XSS対策"
"1973","UT-USR-014","users.models.ApiToken","sanitize_name","異常系","非印刷文字が除去されること","なし","制御文字を含む文字列","制御文字が除去された文字列","中","入力値のクリーニング"
"1974","UT-USR-015","users.models.RuleSet","save","正常系","can_addがTrueのときcan_viewがTrueになること","RuleSetインスタンス","can_add=True, can_view=False","can_view=Trueで保存される","高","権限の整合性保持"
"1975","UT-USR-016","users.models.RuleSet","save","正常系","can_changeがTrueのときcan_viewがTrueになること","RuleSetインスタンス","can_change=True, can_view=False","can_view=Trueで保存される","高","権限の整合性保持"
"1976","UT-USR-017","users.models.RuleSet","save","正常系","can_deleteがTrueのときcan_viewとcan_changeがTrueになること","RuleSetインスタンス","can_delete=True","can_view=True, can_change=Trueで保存される","高","権限の整合性保持"
"1977","UT-USR-018","users.models.RuleSet","save","正常系","can_addがTrueのときcan_changeがTrueになること","RuleSetインスタンス","can_add=True","can_change=Trueで保存される","高","権限の整合性保持"
"1978","UT-USR-019","users.models.RuleSet","label","正常系","ルールセット名に対応するラベルが返却されること","RuleSetインスタンス","name='admin'","'Admin'が返却される","中","表示用ラベルの取得"
"1979","UT-USR-020","users.models.RuleSet","label","異常系","未定義のルールセット名で名前がそのまま返却されること","RuleSetインスタンス","name='unknown'","'unknown'が返却される","低","不明な名前のフォールバック"
"1980","UT-USR-021","users.models.RuleSet","get_models","正常系","ルールセットに対応するモデルリストが返却されること","RuleSetインスタンス","name='admin'","adminに関連するモデルリストが返却される","中","モデルマッピングの確認"
"1981","UT-USR-022","users.models.RuleSet","get_models","境界値","未定義のルールセット名で空リストが返却されること","RuleSetインスタンス","name='unknown'","空リストが返却される","低","存在しない名前の処理"
"1982","UT-USR-023","users.models.Owner","get_owners_matching_user","正常系","ユーザーに一致するOwnerが返却されること","ユーザーとOwnerが存在","user=対象ユーザー","ユーザーのOwnerが含まれるリスト","高","権限チェックの基盤"
"1983","UT-USR-024","users.models.Owner","get_owners_matching_user","正常系","ユーザーが所属するグループのOwnerも返却されること","ユーザーがグループに所属","user=グループ所属ユーザー","ユーザーとグループのOwnerが含まれるリスト","高","グループ権限の継承"
"1984","UT-USR-025","users.models.Owner","create","正常系","新規Ownerが作成されること","Ownerが存在しない","obj=新規ユーザー","新規Ownerインスタンスが返却される","高","Owner自動作成機能"
"1985","UT-USR-026","users.models.Owner","create","正常系","既存Ownerが返却されること","Ownerが既に存在","obj=既存ユーザー","既存Ownerインスタンスが返却される","中","重複作成の防止"
"1986","UT-USR-027","users.models.Owner","get_owner","正常系","Userに対応するOwnerが取得できること","ユーザーとOwnerが存在","user_or_group=User","ユーザーのOwnerが返却される","高","Owner取得の基本機能"
"1987","UT-USR-028","users.models.Owner","get_owner","正常系","Groupに対応するOwnerが取得できること","グループとOwnerが存在","user_or_group=Group","グループのOwnerが返却される","高","Owner取得の基本機能"
"1988","UT-USR-029","users.models.Owner","get_owner","異常系","Ownerが存在しない場合Noneが返却されること","Ownerが存在しない","user_or_group=存在しないユーザー","Noneが返却される","中","存在しないOwnerの処理"
"1989","UT-USR-030","users.models.Owner","name","正常系","DISPLAY_FULL_NAMESがTrueでフルネームが返却されること","設定=DISPLAY_FULL_NAMES=True","owner_type='user'","ユーザーのフルネームが返却される","中","表示名設定の反映"
"1990","UT-USR-031","users.models.Owner","name","正常系","DISPLAY_FULL_NAMESがFalseでusernameが返却されること","設定=DISPLAY_FULL_NAMES=False","owner_type='user'","ユーザー名が返却される","中","表示名設定の反映"
"1991","UT-USR-032","users.models.Owner","label","正常系","owner_typeの名前が返却されること","Ownerインスタンス","owner_type=User","'user'が返却される","低","タイプラベルの取得"
"1992","UT-USR-033","users.models.Owner","get_related_owners","正常系","グループの関連ユーザーOwnerが返却されること","グループに所属するユーザーが存在","owner=Group型Owner","グループ内ユーザーのOwnerリスト","高","関連Owner取得機能"
"1993","UT-USR-034","users.models.Owner","get_related_owners","正常系","include_group=Trueでグループ自身も含まれること","グループに所属するユーザーが存在","owner=Group型Owner, include_group=True","グループとユーザーのOwnerリスト","中","グループ含有オプション"
"1994","UT-USR-035","users.models.Owner","get_related_owners","正常系","User型Ownerで自身のみが返却されること","ユーザーOwnerが存在","owner=User型Owner","自身のOwnerのみ含むリスト","中","User型の処理"
"1995","UT-USR-036","users.models.Owner","is_user_allowed","正常系","許可されたユーザーでTrueが返却されること","ユーザーがグループに所属","user=グループ所属ユーザー, owner=グループOwner","Trueが返却される","高","権限チェック機能"
"1996","UT-USR-037","users.models.Owner","is_user_allowed","正常系","許可されていないユーザーでFalseが返却されること","ユーザーがグループに非所属","user=非所属ユーザー, owner=グループOwner","Falseが返却される","高","権限チェック機能"
"1997","UT-USR-038","users.models.Owner","__str__","正常系","文字列表現が正しく生成されること","Ownerインスタンス","owner=User","'username (user)'形式の文字列","低","表示用文字列"
"1998","UT-USR-039","users.models.UserProfile","save","正常系","primary_groupがユーザーのグループに含まれない場合Noneになること","ユーザーがグループに非所属","primary_group=非所属グループ","primary_group=Noneで保存される","高","データ整合性の保持"
"1999","UT-USR-040","users.models.UserProfile","save","正常系","primary_groupがユーザーのグループに含まれる場合保持されること","ユーザーがグループに所属","primary_group=所属グループ","primary_groupが保持される","中","正常な保存処理"
"2000","UT-USR-041","users.models.UserProfile","__str__","正常系","文字列表現が正しく生成されること","UserProfileインスタンス","user.username='testuser'","'testuser user profile'が返却される","低","表示用文字列"
"2001","UT-USR-042","users.models","user_model_str","正常系","DISPLAY_FULL_NAMESがTrueでフルネームが返却されること","設定=DISPLAY_FULL_NAMES=True, first_name/last_name設定済み","User.first_name='John', last_name='Doe'","'John Doe'が返却される","中","ユーザー表示名のカスタマイズ"
"2002","UT-USR-043","users.models","user_model_str","正常系","DISPLAY_FULL_NAMESがTrueでも名前未設定時usernameが返却されること","設定=DISPLAY_FULL_NAMES=True, first_name/last_name未設定","first_name='', last_name=''","usernameが返却される","中","フォールバック処理"
"2003","UT-USR-044","users.models","user_model_str","正常系","DISPLAY_FULL_NAMESがFalseでusernameが返却されること","設定=DISPLAY_FULL_NAMES=False","User","usernameが返却される","中","デフォルト表示"
"2004","UT-USR-045","users.models","default_token_expiry","正常系","1年後の日付が返却されること","なし","なし","現在日付+365日が返却される","中","トークン有効期限のデフォルト"
"2005","UT-USR-046","users.models","create_owner","正常系","User保存時にOwnerが自動作成されること","新規User","User.save()","Ownerインスタンスが作成される","高","シグナル連携"
"2006","UT-USR-047","users.models","create_owner","正常系","Group保存時にOwnerが自動作成されること","新規Group","Group.save()","Ownerインスタンスが作成される","高","シグナル連携"
"2007","UT-USR-048","users.models","delete_owner","正常系","User削除時にOwnerも削除されること","UserとOwnerが存在","User.delete()","Ownerも削除される","高","シグナル連携"
"2008","UT-USR-049","users.models","delete_owner","正常系","Group削除時にOwnerも削除されること","GroupとOwnerが存在","Group.delete()","Ownerも削除される","高","シグナル連携"
"2009","UT-USR-050","users.models","create_or_update_user_profile","正常系","User作成時にUserProfileが自動作成されること","新規User","User.save() (created=True)","UserProfileインスタンスが作成される","高","シグナル連携"
"2010","UT-USR-051","users.models","validate_primary_group_on_group_change","正常系","ユーザーがグループから外された時primary_groupがNoneになること","ユーザーがグループに所属, primary_group=該当グループ","user.groups.remove(group)","profile.primary_group=None","高","データ整合性の保持"
"2011","UT-USR-052","users.permissions","check_user_role","正常系","スーパーユーザーでTrueが返却されること","user.is_superuser=True","user=スーパーユーザー, role='admin', permission='view'","Trueが返却される","高","権限チェックの基本"
"2012","UT-USR-053","users.permissions","check_user_role","正常系","非アクティブユーザーでFalseが返却されること","user.is_active=False","user=非アクティブユーザー","Falseが返却される","高","アクティブ状態チェック"
"2013","UT-USR-054","users.permissions","check_user_role","正常系","allow_inactive=Trueで非アクティブユーザーも許可されること","user.is_active=False","user=非アクティブ, allow_inactive=True","権限に応じた結果","中","非アクティブ許可オプション"
"2014","UT-USR-055","users.permissions","check_user_role","正常系","ロールを持つグループに所属するユーザーでTrueが返却されること","ユーザーが権限付きグループに所属","user=権限付きユーザー, role='part', permission='view'","Trueが返却される","高","ロールベース権限"
"2015","UT-USR-056","users.permissions","check_user_role","正常系","ロールを持たないユーザーでFalseが返却されること","ユーザーが権限なしグループに所属","user=権限なしユーザー, role='admin', permission='delete'","Falseが返却される","高","権限不足の検証"
"2016","UT-USR-057","users.permissions","check_user_role","境界値","user=NoneでFalseが返却されること","なし","user=None","Falseが返却される","中","Nullユーザーの処理"
"2017","UT-USR-058","users.permissions","check_user_permission","正常系","スーパーユーザーでTrueが返却されること","user.is_superuser=True","user=スーパーユーザー, model=Part, permission='view'","Trueが返却される","高","権限チェックの基本"
"2018","UT-USR-059","users.permissions","check_user_permission","正常系","get_ruleset_ignoreに含まれるモデルでTrueが返却されること","なし","model=無視対象モデル","Trueが返却される","中","無視リストの処理"
"2019","UT-USR-060","users.permissions","check_user_permission","正常系","ロールベース権限で許可されること","ユーザーがロールを持つ","user=権限ユーザー, model=Part, permission='view'","Trueが返却される","高","モデル権限チェック"
"2020","UT-USR-061","users.permissions","split_model","正常系","モデルラベルが正しく分割されること","なし","model_label='part_partcategory'","('partcategory', 'part')が返却される","中","ユーティリティ関数"
"2021","UT-USR-062","users.permissions","split_model","正常系","アンダースコア含むアプリ名が正しく処理されること","なし","model_label='oauth2_provider_application'","('application', 'oauth2_provider')が返却される","中","複合アプリ名の処理"
"2022","UT-USR-063","users.permissions","get_model_permission_string","正常系","権限文字列が正しく生成されること","なし","model='part_part', permission='view'","'part.view_part'が返却される","中","権限文字列生成"
"2023","UT-USR-064","users.permissions","prefetch_rule_sets","正常系","プリフェッチされたグループクエリセットが返却されること","ユーザーがグループに所属","user=対象ユーザー","prefetched_rule_sets属性を持つクエリセット","中","パフォーマンス最適化"
"2024","UT-USR-065","users.authentication.ApiTokenAuthentication","authenticate_credentials","正常系","有効なトークンでユーザーとトークンが返却されること","有効なApiTokenが存在","key=有効なトークンキー","(user, token)タプルが返却される","高","認証の基本機能"
"2025","UT-USR-066","users.authentication.ApiTokenAuthentication","authenticate_credentials","異常系","無効化されたトークンで例外が発生すること","revoked=TrueのApiToken","key=無効化トークン","AuthenticationFailed例外が発生","高","セキュリティ要件"
"2026","UT-USR-067","users.authentication.ApiTokenAuthentication","authenticate_credentials","異常系","期限切れトークンで例外が発生すること","expired=TrueのApiToken","key=期限切れトークン","AuthenticationFailed例外が発生","高","セキュリティ要件"
"2027","UT-USR-068","users.authentication.ApiTokenAuthentication","authenticate_credentials","正常系","last_seenが今日でない場合更新されること","last_seen!=今日","key=有効トークン","last_seenが今日の日付に更新される","中","アクセス追跡機能"
"2028","UT-USR-069","users.tasks","update_group_roles","正常系","古いRuleSetが削除されること","無効なRuleSetが存在","group=対象グループ","outdated RuleSetが削除される","高","データクリーンアップ"
"2029","UT-USR-070","users.tasks","update_group_roles","正常系","不足しているRuleSetが作成されること","一部RuleSetが欠如","group=対象グループ","全てのRuleSetが作成される","高","権限の完全性保持"
"2030","UT-USR-071","users.tasks","update_group_roles","正常系","RuleSetに基づいてパーミッションが追加されること","can_view=TrueのRuleSet","group=対象グループ","view権限がグループに追加される","高","権限同期機能"
"2031","UT-USR-072","users.tasks","update_group_roles","正常系","RuleSetに基づいてパーミッションが削除されること","can_view=FalseのRuleSet","group=対象グループ","view権限がグループから削除される","高","権限同期機能"
"2032","UT-USR-073","users.tasks","rebuild_all_permissions","正常系","全グループの権限が再構築されること","複数グループが存在","なし","全グループでupdate_group_rolesが実行される","中","バッチ処理"
"2033","UT-USR-074","users.serializers","make_random_password","正常系","指定長のパスワードが生成されること","なし","length=14","14文字のパスワードが返却される","中","パスワード生成"
"2034","UT-USR-075","users.serializers","make_random_password","正常系","大文字・小文字・数字を含むパスワードが生成されること","なし","length=14","条件を満たすパスワード(小文字/大文字/数字3文字以上)","高","パスワード強度要件"
"2035","UT-USR-076","users.serializers","generate_permission_dict","正常系","権限が辞書形式で返却されること","Permissionオブジェクトリスト","permissions=[view_part, add_part]","{'part': ['view', 'add']}形式","中","権限データ変換"
"2036","UT-USR-077","users.serializers.ExtendedUserSerializer","validate_is_superuser","正常系","スーパーユーザーがis_superuserを変更できること","リクエストユーザー=スーパーユーザー","is_superuser=True","バリデーション成功","高","権限昇格の制御"
"2037","UT-USR-078","users.serializers.ExtendedUserSerializer","validate_is_superuser","異常系","非スーパーユーザーがis_superuserを変更しようとすると例外が発生すること","リクエストユーザー=一般ユーザー","is_superuser=True","PermissionDenied例外が発生","高","セキュリティ要件"
"2038","UT-USR-079","users.serializers.ExtendedUserSerializer","update","正常系","group_idsでグループが更新されること","ユーザーインスタンス","group_ids=[1, 2]","user.groupsが更新される","中","グループ更新機能"
"2039","UT-USR-080","users.serializers.UserCreateSerializer","validate","正常系","権限があるユーザーでバリデーション成功すること","リクエストユーザー=staff+admin権限","attrs=有効なデータ","passwordが自動生成されてバリデーション成功","高","ユーザー作成の権限チェック"
"2040","UT-USR-081","users.serializers.UserCreateSerializer","create","正常系","ユーザー作成後にログイン不可パスワードが設定されること","有効なvalidated_data","validated_data=ユーザーデータ","set_unusable_password()が呼ばれる","高","セキュリティ要件"
"2041","UT-USR-082","users.serializers.ApiTokenSerializer","get_in_use","正常系","現在使用中のトークンでTrueが返却されること","リクエストで使用中のトークン","token=使用中トークン","Trueが返却される","中","使用中トークンの識別"
"2042","UT-USR-083","users.serializers.ApiTokenSerializer","get_in_use","正常系","使用中でないトークンでFalseが返却されること","リクエストで未使用のトークン","token=未使用トークン","Falseが返却される","中","使用中トークンの識別"
"2043","UT-USR-084","users.serializers.RoleSerializer","get_roles","正常系","ユーザーのロールが辞書形式で返却されること","ユーザーがロールを持つ","user=権限ユーザー","{'admin': ['view'], 'part': ['view', 'add']}形式","中","ロール情報取得"
"2044","UT-USR-085","users.serializers.RoleSerializer","get_permissions","正常系","スーパーユーザーで全権限が返却されること","user.is_superuser=True","user=スーパーユーザー","全モデルの全権限が含まれる","中","権限一覧取得"
"2045","UT-USR-086","users.api.OwnerFilter","filter_is_active","正常系","is_active=Trueでアクティブユーザーのみフィルタされること","アクティブ/非アクティブユーザーが存在","is_active=True","アクティブユーザーのOwnerのみ返却","中","オーナーフィルタリング"
"2046","UT-USR-087","users.api.OwnerFilter","filter_is_active","正常系","is_active=Falseで非アクティブユーザーのみフィルタされること","アクティブ/非アクティブユーザーが存在","is_active=False","非アクティブユーザーのOwnerのみ返却","中","オーナーフィルタリング"
"2047","UT-USR-088","users.api.OwnerList","filter_queryset","正常系","検索語でOwnerがフィルタされること","複数Ownerが存在","search='john'","名前に'john'を含むOwnerのみ返却","中","検索機能"
"2048","UT-USR-089","users.api.UserDetail","perform_destroy","正常系","ユーザー削除時にセッションも削除されること","ユーザーにセッションが存在","instance=対象ユーザー","usersession_set.delete()が呼ばれる","高","セッション管理"
"2049","UT-USR-090","users.api.UserDetailSetPassword","perform_update","正常系","パスワードが設定されること","有効なパスワード","password='NewPassword123'","user.set_password()が呼ばれる","高","パスワード設定機能"
"2050","UT-USR-091","users.api.UserDetailSetPassword","perform_update","異常系","バリデーションエラーのパスワードで例外が発生すること","無効なパスワード(override_warning=False)","password='weak'","ValidationError例外が発生","高","パスワード強度チェック"
"2051","UT-USR-092","users.api.UserDetailSetPassword","perform_update","正常系","override_warning=Trueでバリデーションがスキップされること","override_warning=True","password='weak', override_warning=True","パスワードが設定される","中","警告オーバーライド"
"2052","UT-USR-093","users.api.GetAuthToken","get","正常系","認証済みユーザーでトークンが返却されること","認証済みユーザー","name='test-token'","token, name, expiryを含むレスポンス","高","トークン取得API"
"2053","UT-USR-094","users.api.GetAuthToken","get","正常系","既存の有効なトークンが再利用されること","同名の有効トークンが存在","name='existing-token'","既存トークンが返却される","中","トークン再利用"
"2054","UT-USR-095","users.api.GetAuthToken","get","正常系","メタデータがトークンに保存されること","認証済みユーザー","リクエストヘッダー付き","user_agent等のメタデータが保存される","中","メタデータ記録"
"2055","UT-USR-096","users.api.TokenMixin","get_queryset","正常系","一般ユーザーで自分のトークンのみ返却されること","一般ユーザー","user=一般ユーザー","自分のトークンのみのクエリセット","高","データアクセス制御"
"2056","UT-USR-097","users.api.TokenMixin","get_queryset","正常系","スーパーユーザー+all_users=Trueで全トークンが返却されること","スーパーユーザー","user=スーパーユーザー, all_users=True","全ユーザーのトークン","中","管理者機能"
"2057","UT-USR-098","users.api.TokenDetailView","perform_destroy","正常系","トークンが削除ではなくrevokedになること","ApiTokenインスタンス","instance=対象トークン","revoked=Trueに設定される","高","ソフトデリート"
"2058","UT-USR-099","users.api.TokenListView","create","正常系","作成されたトークンの生キーがレスポンスに含まれること","認証済みユーザー","name='new-token'","レスポンスにtokenキーが含まれる","高","トークン作成API"
"2059","UT-USR-100","users.api.MeUserDetail","get_object","正常系","常にリクエストユーザーが返却されること","認証済みユーザー","なし","request.userが返却される","中","自己参照エンドポイント"
"2060","UT-USR-101","users.api.UserProfileDetail","get_object","正常系","常にリクエストユーザーのプロファイルが返却されること","認証済みユーザー","なし","request.user.profileが返却される","中","プロファイルエンドポイント"
"2061","UT-USR-102","users.ruleset","get_ruleset_models","正常系","ルールセットとモデルのマッピングが返却されること","なし","なし","辞書形式でルールセット-モデルリストが返却される","中","設定データの取得"
"2062","UT-USR-103","users.ruleset","get_ruleset_ignore","正常系","無視すべきモデルリストが返却されること","なし","なし","権限不要モデルのリストが返却される","中","設定データの取得"
