using VideoDownloader.App; using VideoDownloader.Core.Config; using VideoDownloader.Tests.Infrastructure; namespace VideoDownloader.Tests.E2E; /// /// UI 복잡 버전 RED 스펙 — §F 설정 창 유즈케이스(docs/UI_USECASES.md §F, UC-S01~S20). /// RED 단계: 전부 실패하는 것이 정상이다. /// public class UiUsecaseSettingsRedTests { [Fact] public void UC_S01_설정을_검색으로_찾을_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("SettingsSearchBox"), "UC-S01", "설정 검색 상자(SettingsSearchBox)가 필요하다"); [Fact] public void UC_S02_카테고리_내비게이션이_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("SettingsNavList"), "UC-S02", "좌측 카테고리 내비게이션(SettingsNavList)이 필요하다"); [Fact] public void UC_S03_재시작_필요_변경을_배너로_알린다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("RestartBanner"), "UC-S03", "재시작 필요 알림 배너(RestartBanner)가 필요하다"); [Fact] public void UC_S04_기본값으로_한번에_되돌릴_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("ResetDefaultsButton"), "UC-S04", "기본값 복원 버튼(ResetDefaultsButton)이 필요하다"); [Fact] public void UC_S05_설정을_내보낼_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("ExportSettingsButton"), "UC-S05", "설정 내보내기 버튼(ExportSettingsButton)이 필요하다"); [Fact] public void UC_S06_설정을_가져올_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("ImportSettingsButton"), "UC-S06", "설정 가져오기 버튼(ImportSettingsButton)이 필요하다"); [Fact] public void UC_S07_고급_항목을_접을_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("AdvancedSection"), "UC-S07", "고급 섹션 접힘(AdvancedSection)이 필요하다"); [Fact] public void UC_S08_Ctrl_S로_저장할_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowCs.Contains("Key.S"), "UC-S08", "설정창 코드비하인드가 Ctrl+S(Key.S) 저장을 처리해야 한다"); [Fact] public void UC_S09_취소_시_폐기_확인을_받는다() => SourceTree.Usecase( SourceTree.MethodExists(typeof(SettingsWindow), "ConfirmDiscardChanges"), "UC-S09", "SettingsWindow.ConfirmDiscardChanges() 확인 절차가 필요하다"); [Fact] public void UC_S10_설정창_크기_위치가_기억된다() => SourceTree.Usecase( SourceTree.PropertyExists(typeof(AppConfig), "SettingsWindowBounds"), "UC-S10", "AppConfig.SettingsWindowBounds 속성이 필요하다"); [Fact] public void UC_S11_재시도_횟수를_UI에서_바꾼다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"RetriesBox\""), "UC-S11", "재시도 횟수 입력(RetriesBox)이 필요하다"); [Fact] public void UC_S12_UserAgent를_UI에서_바꾼다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"UserAgentBox\""), "UC-S12", "User-Agent 입력(UserAgentBox)이 필요하다"); [Fact] public void UC_S13_프록시를_설정할_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"ProxyBox\""), "UC-S13", "프록시 설정(ProxyBox)이 필요하다"); [Fact] public void UC_S14_UI_언어를_고를_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"LanguageBox\""), "UC-S14", "언어 선택(LanguageBox)이 필요하다"); [Fact] public void UC_S15_자동_실행을_설정할_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"AutoStartBox\""), "UC-S15", "시작 시 자동 실행(AutoStartBox)이 필요하다"); [Fact] public void UC_S16_트레이로_최소화할_수_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("MinimizeToTrayBox"), "UC-S16", "트레이 최소화 옵션(MinimizeToTrayBox)이 필요하다"); [Fact] public void UC_S17_알림_설정_섹션이_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("알림"), "UC-S17", "설정창에 '알림' 섹션이 필요하다"); [Fact] public void UC_S18_실험적_기능_섹션이_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("실험적"), "UC-S18", "설정창에 '실험적' 기능 섹션이 필요하다"); [Fact] public void UC_S19_실시간_검증_힌트가_있다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("ValidationHint"), "UC-S19", "입력 검증 힌트(ValidationHint) 요소가 필요하다"); [Fact] public void UC_S20_버전_정보가_표시된다() => SourceTree.Usecase( SourceTree.SettingsWindowXaml.Contains("Name=\"VersionText\""), "UC-S20", "앱 버전 표시(VersionText)가 필요하다"); }