using VideoDownloader.Core.Config; using VideoDownloader.Tests.Infrastructure; namespace VideoDownloader.Tests.E2E; /// /// UI 복잡 버전 RED 스펙 — §I 라이브러리·재생목록·즐겨찾기·기록·노트 유즈케이스(docs/UI_USECASES.md §I, UC-M01~M22). /// 데스크톱 앱에는 아직 라이브러리 뷰가 없으므로 전부 RED 다. /// public class UiUsecaseLibraryRedTests { [Fact] public void UC_M01_라이브러리_뷰가_있다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibraryPopup") || SourceTree.MainWindowXaml.Contains("LibraryBtn"), "UC-M01", "받은 파일을 보는 라이브러리 뷰(LibraryPopup/LibraryBtn)가 필요하다"); [Fact] public void UC_M02_라이브러리를_그리드_리스트로_전환한다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibraryViewToggle"), "UC-M02", "그리드/리스트 전환(LibraryViewToggle)이 필요하다"); [Fact] public void UC_M03_라이브러리를_검색할_수_있다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibrarySearchBox"), "UC-M03", "라이브러리 검색 상자(LibrarySearchBox)가 필요하다"); [Fact] public void UC_M04_라이브러리를_정렬할_수_있다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibrarySortMenu"), "UC-M04", "라이브러리 정렬 메뉴(LibrarySortMenu)가 필요하다"); [Fact] public void UC_M05_항목에_추가일이_표시된다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("AddedDateText"), "UC-M05", "라이브러리 항목의 추가일 표시(AddedDateText)가 필요하다"); [Fact] public void UC_M06_항목에_썸네일이_표시된다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibraryThumbnail"), "UC-M06", "라이브러리 썸네일(LibraryThumbnail)이 필요하다"); [Fact] public void UC_M07_항목을_더블클릭해_재생한다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("LibraryPlay_Click"), "UC-M07", "라이브러리 재생(LibraryPlay_Click) 처리기가 필요하다"); [Fact] public void UC_M08_항목을_삭제할_수_있다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("LibraryDelete_Click"), "UC-M08", "라이브러리 삭제(LibraryDelete_Click) 처리기가 필요하다"); [Fact] public void UC_M09_항목_폴더를_열_수_있다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("LibraryOpenFolder_Click"), "UC-M09", "라이브러리 폴더 열기(LibraryOpenFolder_Click)가 필요하다"); [Fact] public void UC_M10_라이브러리_빈_상태_안내가_있다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("LibraryEmptyHint"), "UC-M10", "라이브러리 빈 상태 안내(LibraryEmptyHint)가 필요하다"); [Fact] public void UC_M11_재생목록_셔플이_있다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("PlaylistShuffle"), "UC-M11", "재생목록 셔플(PlaylistShuffle) 요소가 필요하다"); [Fact] public void UC_M12_반복_모드가_저장된다() => SourceTree.Usecase( SourceTree.PropertyExists(typeof(AppConfig), "PlaylistLoopMode"), "UC-M12", "AppConfig.PlaylistLoopMode 속성이 필요하다"); [Fact] public void UC_M13_재생목록을_파일로_저장_불러온다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("PlaylistExport"), "UC-M13", "재생목록 내보내기/불러오기(PlaylistExport)가 필요하다"); [Fact] public void UC_M14_재생목록_순서를_바꾼다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("PlaylistMoveUp"), "UC-M14", "재생목록 순서 변경(PlaylistMoveUp) 요소가 필요하다"); [Fact] public void UC_M15_재생목록을_검색한다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("PlaylistSearchBox"), "UC-M15", "재생목록 검색 상자(PlaylistSearchBox)가 필요하다"); [Fact] public void UC_M16_즐겨찾기를_폴더로_정리한다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("BookmarkFolder"), "UC-M16", "즐겨찾기 폴더(BookmarkFolder) 기능이 필요하다"); [Fact] public void UC_M17_즐겨찾기를_편집한다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("EditBookmark"), "UC-M17", "즐겨찾기 편집(EditBookmark) 기능이 필요하다"); [Fact] public void UC_M18_즐겨찾기를_검색한다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("BookmarkSearchBox"), "UC-M18", "즐겨찾기 검색 상자(BookmarkSearchBox)가 필요하다"); [Fact] public void UC_M19_즐겨찾기를_HTML로_내보낸다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("ExportBookmarks"), "UC-M19", "즐겨찾기 내보내기(ExportBookmarks) 기능이 필요하다"); [Fact] public void UC_M20_방문_기록을_날짜별로_묶는다() => SourceTree.Usecase( SourceTree.MainWindowCs.Contains("GroupHistoryByDate"), "UC-M20", "방문 기록 날짜 묶음(GroupHistoryByDate) 기능이 필요하다"); [Fact] public void UC_M21_방문_기록을_검색한다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("HistorySearchBox"), "UC-M21", "방문 기록 검색 상자(HistorySearchBox)가 필요하다"); [Fact] public void UC_M22_노트를_검색한다() => SourceTree.Usecase( SourceTree.MainWindowXaml.Contains("NotesSearchBox"), "UC-M22", "노트 검색 상자(NotesSearchBox)가 필요하다"); }