Basic tests
This commit is contained in:
		
							
								
								
									
										125
									
								
								src/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								src/main_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"os" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestSanitizeFilename(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		input    string | ||||
| 		expected string | ||||
| 	}{ | ||||
| 		{"file:name.mp4", "file_name.mp4"}, | ||||
| 		{"file/name.mp4", "file_name.mp4"}, | ||||
| 		{"file\\name.mp4", "file_name.mp4"}, | ||||
| 		{"file?name.mp4", "file_name.mp4"}, | ||||
| 		{"file*name.mp4", "file_name.mp4"}, | ||||
| 		{"file<name>.mp4", "file_name_.mp4"}, | ||||
| 		{".hidden", "hidden"}, | ||||
| 	} | ||||
|  | ||||
| 	for _, test := range tests { | ||||
| 		result := sanitizeFilename(test.input) | ||||
| 		if result != test.expected { | ||||
| 			t.Errorf("sanitizeFilename(%q) = %q, want %q", test.input, result, test.expected) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestIsValidURL(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		input    string | ||||
| 		expected bool | ||||
| 	}{ | ||||
| 		{"https://example.com", true}, | ||||
| 		{"http://example.com", true}, | ||||
| 		{"ftp://example.com", true}, | ||||
| 		{"not a url", false}, | ||||
| 	} | ||||
|  | ||||
| 	for _, test := range tests { | ||||
| 		result := isValidURL(test.input) | ||||
| 		if result != test.expected { | ||||
| 			t.Errorf("isValidURL(%q) = %v, want %v", test.input, result, test.expected) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestParseMetadata(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		input    string | ||||
| 		expected Metadata | ||||
| 	}{ | ||||
| 		{"Show Title; serie; 01", Metadata{Title: "Show Title", Type: "serie", Season: "S01"}}, | ||||
| 		{"Movie Title; movie; ", Metadata{Title: "Movie Title", Type: "movie", Season: "S"}}, | ||||
| 		{"Invalid Metadata", Metadata{}}, | ||||
| 	} | ||||
|  | ||||
| 	for _, test := range tests { | ||||
| 		result := parseMetadata(test.input) | ||||
| 		if !reflect.DeepEqual(result, test.expected) { | ||||
| 			t.Errorf("parseMetadata(%q) = %v, want %v", test.input, result, test.expected) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestParseInputFile(t *testing.T) { | ||||
| 	tempFile, err := os.CreateTemp("", "test_input_*.json") | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Failed to create temp file: %v", err) | ||||
| 	} | ||||
| 	defer os.Remove(tempFile.Name()) | ||||
|  | ||||
| 	testData := Items{ | ||||
| 		Items: []Item{ | ||||
| 			{MPD: "http://example.com/video1.mpd", Filename: "video1.mp4"}, | ||||
| 			{MPD: "http://example.com/video2.mpd", Filename: "video2.mp4"}, | ||||
| 		}, | ||||
| 	} | ||||
| 	jsonData, _ := json.Marshal(testData) | ||||
| 	if _, err := tempFile.Write(jsonData); err != nil { | ||||
| 		t.Fatalf("Failed to write to temp file: %v", err) | ||||
| 	} | ||||
| 	tempFile.Close() | ||||
|  | ||||
| 	items, err := parseInputFile(tempFile.Name()) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("parseInputFile() returned an error: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	if len(items) != len(testData.Items) { | ||||
| 		t.Errorf("parseInputFile() returned %d items, want %d", len(items), len(testData.Items)) | ||||
| 	} | ||||
|  | ||||
| 	for i, item := range items { | ||||
| 		if !reflect.DeepEqual(item, testData.Items[i]) { | ||||
| 			t.Errorf("parseInputFile() item %d = %v, want %v", i, item, testData.Items[i]) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestGroupItemsBySeason(t *testing.T) { | ||||
| 	items := []Item{ | ||||
| 		{Filename: "show1_s01e01.mp4", Metadata: "Show 1; serie; 01"}, | ||||
| 		{Filename: "show1_s01e02.mp4", Metadata: "Show 1; serie; 01"}, | ||||
| 		{Filename: "show2_s01e01.mp4", Metadata: "Show 2; serie; 01"}, | ||||
| 		{Filename: "movie1.mp4", Metadata: "Movie 1; movie; "}, | ||||
| 	} | ||||
|  | ||||
| 	grouped := groupItemsBySeason(items) | ||||
|  | ||||
| 	expectedGroups := map[string]int{ | ||||
| 		"Show 1 - S01": 2, | ||||
| 		"Show 2 - S01": 1, | ||||
| 		"Movies":       1, | ||||
| 	} | ||||
|  | ||||
| 	for group, count := range expectedGroups { | ||||
| 		if len(grouped[group]) != count { | ||||
| 			t.Errorf("groupItemsBySeason() group %q has %d items, want %d", group, len(grouped[group]), count) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user