package handler import ( "net/http/httptest" "net/url" "strings" "testing" "vidarchive/internal/models" ) func TestApplyPresetFormClearsDependentCommentSettings(t *testing.T) { tests := []struct { name string writeInfo string writeComments string wantCleared bool }{ {"info JSON disabled", "", "1", true}, {"comments disabled", "1", "", true}, {"both enabled", "1", "1", false}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { form := url.Values{ "name": {"Preset"}, "format_mode": {"default"}, "write_info_json": {tc.writeInfo}, "write_comments": {tc.writeComments}, "comment_sort": {"top"}, "max_comments": {"25"}, "comment_extractor_args": {"youtube:player_client=web"}, } r := httptest.NewRequest("POST", "/settings/presets", strings.NewReader(form.Encode())) r.Header.Set("Content-Type", "application/x-www-form-urlencoded") preset := &models.Preset{} if err := applyPresetForm(preset, r); err != nil { t.Fatalf("applyPresetForm: %v", err) } if tc.wantCleared { if preset.WriteComments || preset.CommentSort != "" || preset.MaxComments != 0 || preset.CommentExtractorArgs != "" { t.Fatalf("dependent settings were not cleared: %+v", preset) } return } if !preset.WriteComments || preset.CommentSort != "top" || preset.MaxComments != 25 || preset.CommentExtractorArgs == "" { t.Fatalf("comment settings not retained: %+v", preset) } }) } }