浏览代码

Begin writing tests for POST JSON request

Andrea Fazzi 6 年之前
父节点
当前提交
fe4110ea13
共有 2 个文件被更改,包括 48 次插入1 次删除
  1. 36 1
      handlers/handlers_test.go
  2. 12 0
      orm/orm.go

+ 36 - 1
handlers/handlers_test.go

@@ -1,6 +1,7 @@
 package api
 
 import (
+	"bytes"
 	"encoding/json"
 	"net/http"
 	"net/http/httptest"
@@ -80,7 +81,7 @@ func (t *testSuite) BeforeAll() {
 
 }
 
-func (t *testSuite) TestTeachersJSON() {
+func (t *testSuite) TestGetTeachersJSON() {
 	var teachers []*orm.Teacher
 
 	req, err := http.NewRequest("GET", "/teachers?format=json", nil)
@@ -108,3 +109,37 @@ func (t *testSuite) TestTeachersJSON() {
 	}
 
 }
+
+func (t *testSuite) TestPostTeacherJSON() {
+	teacher := new(orm.Teacher)
+	teacher.Name = "Mario"
+	teacher.Surname = "ROSSI"
+
+	data, err := json.Marshal(teacher)
+	t.Nil(err)
+
+	req, err := http.NewRequest("POST", "/teachers/add?format=json", bytes.NewBuffer(data))
+	if err != nil {
+		panic(err)
+	}
+
+	pattern := PathPattern{
+		"/api/%s/add",
+		"/%s?format=json&tpl_layout=base&tpl_content=%s",
+		[]string{"POST"},
+	}
+
+	rr := httptest.NewRecorder()
+	modelHandler("teachers", pattern).ServeHTTP(rr, req)
+
+	t.Equal(http.StatusOK, rr.Code)
+
+	// if !t.Failed() {
+	// 	err := json.Unmarshal(rr.Body.Bytes(), &teachers)
+	// 	t.Nil(err)
+	// 	if !t.Failed() {
+	// 		t.Equal("AGOSTINO", teachers[0].Surname)
+	// 	}
+	// }
+
+}

+ 12 - 0
orm/orm.go

@@ -107,11 +107,16 @@ var (
 		"/api/teachers": GetTeachersAll,
 
 		// Classes
+
+		/// HTML
+
 		"/classes":             GetClassesAll,
 		"/classes/{id}":        GetClassAll,
 		"/classes/{id}/update": GetClassForUpdate,
 		"/classes/add/":        GetClassForAdd,
 
+		/// JSON
+
 		"/api/classes": GetClassesAll,
 
 		// Subjects
@@ -133,10 +138,17 @@ var (
 
 	Post map[string]PostFn = map[string]PostFn{
 		// Teacher
+
+		/// HTML
+
 		"/teachers/{id}/update": UpdateTeacher,
 		"/teachers/{id}/delete": DeleteTeacher,
 		"/teachers/add/":        AddTeacher,
 
+		/// JSON
+
+		"/api/teachers/add": AddTeacher,
+
 		// Classes
 		"/classes/{id}/update": UpdateClass,
 		"/classes/{id}/delete": DeleteClass,