| 
					
				 | 
			
			
				@@ -3,6 +3,7 @@ package handlers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"bytes" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"encoding/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/http" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/http/httptest" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/url" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -10,6 +11,7 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"testing" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"github.com/gorilla/mux" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/jinzhu/gorm" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/remogatto/prettytest" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"gogs.carducci-dante.gov.it/karmen/core/config" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -177,6 +179,39 @@ func (t *testSuite) TestGetTeachersJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (t *testSuite) TestGetTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		teacher  *orm.Teacher 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		response renderer.JsonResponse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	req, err := http.NewRequest("GET", "/api/teachers/9?format=json", nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pattern := PathPattern{"/api/%s/{id}", "", []string{"GET"}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	rr := httptest.NewRecorder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router := mux.NewRouter() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.Handle("/api/teachers/{id}", modelHandler("teachers", pattern)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.ServeHTTP(rr, req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	t.Equal(http.StatusOK, rr.Code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if !t.Failed() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		err := json.Unmarshal(rr.Body.Bytes(), &response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		t.Nil(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if !t.Failed() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			err := json.Unmarshal(response.Result, &teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			t.Nil(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			t.Equal("FRANCESCHINI", teacher.Surname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (t *testSuite) TestGetTeachersCSV() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var response renderer.JsonResponse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -227,7 +262,7 @@ func (t *testSuite) TestGetErrorJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func (t *testSuite) TestPostTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (t *testSuite) TestAddTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		response renderer.JsonResponse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		id       uint 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -240,7 +275,7 @@ func (t *testSuite) TestPostTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	data, err := json.Marshal(teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	t.Nil(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	req, err := http.NewRequest("POST", "/api/teachers/add?format=json", bytes.NewBuffer(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	req, err := http.NewRequest("POST", "/api/teachers/add", bytes.NewBuffer(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	req.Header.Set("Content-Type", "application/json; charset=utf-8") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -249,7 +284,7 @@ func (t *testSuite) TestPostTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	pattern := PathPattern{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"/api/%s/add", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		"/%s?format=json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		[]string{"POST"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -269,3 +304,66 @@ func (t *testSuite) TestPostTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (t *testSuite) TestUpdateTeacherJSON() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	teacher := getTeacherJSON(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	teacher.Name = "Mario" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	teacher.Surname = "ROSSI" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	data, err := json.Marshal(teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	req, err := http.NewRequest("POST", fmt.Sprintf("/api/teachers/%d/update?format=json", teacher.ID), bytes.NewBuffer(data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	req.Header.Set("Content-Type", "application/json; charset=utf-8") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	rr := httptest.NewRecorder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pattern := PathPattern{"/api/%s/{id}/update", "", []string{"POST"}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router := mux.NewRouter() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.Handle("/api/teachers/{id}/update", modelHandler("teachers", pattern)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.ServeHTTP(rr, req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	t.Equal(http.StatusOK, rr.Code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if !t.Failed() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dbTeacher := getTeacherJSON(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		t.Equal("ROSSI", dbTeacher.Surname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func getTeacherJSON(id uint) *orm.Teacher { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		teacher  *orm.Teacher 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		response renderer.JsonResponse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	req, err := http.NewRequest("GET", fmt.Sprintf("/api/teachers/%d?format=json", id), nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pattern := PathPattern{"/api/%s/{id}", "", []string{"GET"}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	rr := httptest.NewRecorder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router := mux.NewRouter() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.Handle("/api/teachers/{id}", modelHandler("teachers", pattern)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	router.ServeHTTP(rr, req) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	err = json.Unmarshal(rr.Body.Bytes(), &response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	err = json.Unmarshal(response.Result, &teacher) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return teacher 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |