Improved parameter validation

Change-Id: If2e7ec1b063a6e114a6c5582463af784b75c37b8
diff --git a/validation/validator_test.go b/validation/validator_test.go
index 43254a7..88d01a2 100644
--- a/validation/validator_test.go
+++ b/validation/validator_test.go
@@ -96,22 +96,78 @@
 			errorMsg:  "query is required and cannot be empty",
 		},
 		{
+			name: "valid_poliqarp_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "poliqarp",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_poliqarpplus_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "poliqarpplus",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_cosmas2_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "cosmas2",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_annis_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "annis",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_cql_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "cql",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_cqp_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "cqp",
+			},
+			expectErr: false,
+		},
+		{
+			name: "valid_fcsql_language",
+			request: SearchRequest{
+				Query:         "test query",
+				QueryLanguage: "fcsql",
+			},
+			expectErr: false,
+		},
+		{
 			name: "invalid_query_language",
 			request: SearchRequest{
 				Query:         "test query",
 				QueryLanguage: "invalid",
 			},
 			expectErr: true,
-			errorMsg:  "invalid query language",
+			errorMsg:  "invalid query language, must be one of: poliqarp, poliqarpplus, cosmas2, annis, cql, cqp, fcsql",
 		},
 		{
 			name: "invalid_corpus_id",
 			request: SearchRequest{
 				Query:  "test query",
-				Corpus: "invalid corpus!",
+				Corpus: "invalid@corpus#format",
 			},
 			expectErr: true,
-			errorMsg:  "corpus ID contains invalid characters",
+			errorMsg:  "collection query contains invalid characters",
 		},
 		{
 			name: "count_negative",
@@ -231,10 +287,10 @@
 			name: "invalid_corpus_id",
 			request: MetadataRequest{
 				Action: "statistics",
-				Corpus: "invalid corpus!",
+				Corpus: "invalid@corpus#format",
 			},
 			expectErr: true,
-			errorMsg:  "corpus ID contains invalid characters",
+			errorMsg:  "collection query contains invalid characters",
 		},
 	}
 
@@ -465,7 +521,7 @@
 			response: &service.CorpusListResponse{
 				Corpora: []service.CorpusInfo{
 					{
-						ID:        "invalid id!",
+						ID:        "invalid@corpus#format",
 						Name:      "Test Corpus",
 						Documents: 100,
 						Tokens:    50000,
@@ -473,7 +529,7 @@
 				},
 			},
 			expectErr: true,
-			errorMsg:  "corpus ID contains invalid characters",
+			errorMsg:  "collection query contains invalid characters",
 		},
 		{
 			name: "corpus_missing_name",
@@ -708,15 +764,34 @@
 		},
 		{
 			name:      "corpus_id_invalid_chars",
-			corpusID:  "invalid corpus!",
+			corpusID:  "invalid@corpus#format",
 			expectErr: true,
-			errorMsg:  "corpus ID contains invalid characters",
+			errorMsg:  "collection query contains invalid characters",
 		},
 		{
 			name:      "corpus_id_with_space",
 			corpusID:  "corpus with space",
-			expectErr: true,
-			errorMsg:  "corpus ID contains invalid characters",
+			expectErr: false, // Now allowed with updated regex
+		},
+		{
+			name:      "corpus_id_with_boolean_operators",
+			corpusID:  "corpus1 & corpus2",
+			expectErr: false, // Now allowed with updated regex
+		},
+		{
+			name:      "collection_query_with_metadata",
+			corpusID:  "textClass = \"politics\" & pubDate in 2020",
+			expectErr: false, // Collection query syntax
+		},
+		{
+			name:      "collection_query_with_regex",
+			corpusID:  "corpusSigle = \"DeReKo/WPD*\" & availability = /CC.*/",
+			expectErr: false, // Collection query with regex
+		},
+		{
+			name:      "collection_query_complex",
+			corpusID:  "(textType = \"news\" | textType = \"blog\") & textClass != \"fiction\"",
+			expectErr: false, // Complex collection query
 		},
 	}