mirror of
				https://github.com/adnanh/webhook.git
				synced 2025-10-25 02:30:58 +00:00 
			
		
		
		
	Merge 14ec47b214 into 2da9957e86
				
					
				
			This commit is contained in:
		
						commit
						01c8161cb3
					
				
					 1 changed files with 164 additions and 0 deletions
				
			
		
							
								
								
									
										164
									
								
								internal/hook/request_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								internal/hook/request_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,164 @@ | |||
| package hook | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| var parseJSONPayloadTests = []struct { | ||||
| 	body    []byte | ||||
| 	payload map[string]interface{} | ||||
| 	ok      bool | ||||
| }{ | ||||
| 	{[]byte(`[1,2,3]`), map[string]interface{}{"root": []interface{}{json.Number("1"), json.Number("2"), json.Number("3")}}, true}, | ||||
| 	{[]byte(`  [1,2,3]`), map[string]interface{}{"root": []interface{}{json.Number("1"), json.Number("2"), json.Number("3")}}, true}, | ||||
| 	{[]byte(`{"key": "value"}`), map[string]interface{}{"key": "value"}, true}, | ||||
| 	{[]byte(`[1, {"]`), map[string]interface{}(nil), false}, | ||||
| 	{[]byte(`{"key": "value}`), map[string]interface{}(nil), false}, | ||||
| } | ||||
| 
 | ||||
| func TestParseJSONPayload(t *testing.T) { | ||||
| 	for _, tt := range parseJSONPayloadTests { | ||||
| 		r := Request{ | ||||
| 			Body: tt.body, | ||||
| 		} | ||||
| 		err := r.ParseJSONPayload() | ||||
| 		if (err == nil) != tt.ok { | ||||
| 			t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) | ||||
| 		} | ||||
| 
 | ||||
| 		if !reflect.DeepEqual(tt.payload, r.Payload) { | ||||
| 			t.Errorf("failed to parse json %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.payload, r.Payload) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var parseHeadersTests = []struct { | ||||
| 	headers         map[string][]string | ||||
| 	expectedHeaders map[string]interface{} | ||||
| }{ | ||||
| 	{ | ||||
| 		map[string][]string{"header1": {"12"}}, | ||||
| 		map[string]interface{}{"header1": "12"}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string][]string{"header1": {"12", "34"}}, | ||||
| 		map[string]interface{}{"header1": "12"}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string][]string{"header1": {}}, | ||||
| 		map[string]interface{}{}, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestParseHeaders(t *testing.T) { | ||||
| 	for _, tt := range parseHeadersTests { | ||||
| 		r := Request{} | ||||
| 		r.ParseHeaders(tt.headers) | ||||
| 
 | ||||
| 		if !reflect.DeepEqual(tt.expectedHeaders, r.Headers) { | ||||
| 			t.Errorf("failed to parse headers %#v:\nexpected %#v,\ngot %#v", tt.headers, tt.expectedHeaders, r.Headers) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var parseQueryTests = []struct { | ||||
| 	query         map[string][]string | ||||
| 	expectedQuery map[string]interface{} | ||||
| }{ | ||||
| 	{ | ||||
| 		map[string][]string{"query1": {"12"}}, | ||||
| 		map[string]interface{}{"query1": "12"}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string][]string{"query1": {"12", "34"}}, | ||||
| 		map[string]interface{}{"query1": "12"}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		map[string][]string{"query1": {}}, | ||||
| 		map[string]interface{}{}, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestParseQuery(t *testing.T) { | ||||
| 	for _, tt := range parseQueryTests { | ||||
| 		r := Request{} | ||||
| 		r.ParseQuery(tt.query) | ||||
| 
 | ||||
| 		if !reflect.DeepEqual(tt.expectedQuery, r.Query) { | ||||
| 			t.Errorf("failed to parse query %#v:\nexpected %#v,\ngot %#v", tt.query, tt.expectedQuery, r.Query) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var parseFormPayloadTests = []struct { | ||||
| 	body            []byte | ||||
| 	expectedPayload map[string]interface{} | ||||
| 	ok              bool | ||||
| }{ | ||||
| 	{ | ||||
| 		[]byte("x=1&y=2"), | ||||
| 		map[string]interface{}{"x": "1", "y": "2"}, | ||||
| 		true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		[]byte("x=1&y=2&y=3"), | ||||
| 		map[string]interface{}{"x": "1", "y": "2"}, | ||||
| 		true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		[]byte(";"), | ||||
| 		map[string]interface{}(nil), | ||||
| 		false, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestParseFormPayload(t *testing.T) { | ||||
| 	for _, tt := range parseFormPayloadTests { | ||||
| 		r := Request{ | ||||
| 			Body: tt.body, | ||||
| 		} | ||||
| 		err := r.ParseFormPayload() | ||||
| 		if (err == nil) != tt.ok { | ||||
| 			t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) | ||||
| 		} | ||||
| 
 | ||||
| 		if !reflect.DeepEqual(tt.expectedPayload, r.Payload) { | ||||
| 			t.Errorf("failed to parse form payload %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.expectedPayload, r.Payload) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var parseXMLPayloadTests = []struct { | ||||
| 	body            []byte | ||||
| 	expectedPayload map[string]interface{} | ||||
| 	ok              bool | ||||
| }{ | ||||
| 	{ | ||||
| 		[]byte("<x>1</x>"), | ||||
| 		map[string]interface{}{"x": "1"}, | ||||
| 		true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		[]byte("<x>1<x>"), | ||||
| 		map[string]interface{}(nil), | ||||
| 		false, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestParseXMLPayload(t *testing.T) { | ||||
| 	for _, tt := range parseXMLPayloadTests { | ||||
| 		r := Request{ | ||||
| 			Body: tt.body, | ||||
| 		} | ||||
| 		err := r.ParseXMLPayload() | ||||
| 		if (err == nil) != tt.ok { | ||||
| 			t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) | ||||
| 		} | ||||
| 
 | ||||
| 		if !reflect.DeepEqual(tt.expectedPayload, r.Payload) { | ||||
| 			t.Errorf("failed to parse xml %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.expectedPayload, r.Payload) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue