package api import ( "bytes" "encoding/json" "net/http" "net/http/httptest" "testing" "time" "github.com/jinzhu/gorm" "github.com/remogatto/prettytest" "gogs.carducci-dante.gov.it/karmen/core/config" "gogs.carducci-dante.gov.it/karmen/core/orm" ) var ( token string ) // Start of setup type testSuite struct { prettytest.Suite } func TestRunner(t *testing.T) { prettytest.Run( t, new(testSuite), ) } func (t *testSuite) BeforeAll() { var ( db *gorm.DB err error ) connected := false for !connected { time.Sleep(10 * time.Second) db, err = orm.New("karmen:karmen@/karmen_test?charset=utf8&parseTime=True&loc=Local") if err != nil { time.Sleep(5 * time.Second) continue } connected = true } orm.Use(db) orm.AutoMigrate() err = config.ReadFile("testdata/config.yaml", config.Config) if err != nil { panic(err) } config.Config.LogLevel = config.LOG_LEVEL_OFF req, err := http.NewRequest("GET", "/get_token", nil) if err != nil { panic(err) } req.SetBasicAuth("admin", "admin") rr := httptest.NewRecorder() tokenHandler().ServeHTTP(rr, req) var data struct { Token string UserID string } if err := json.Unmarshal(rr.Body.Bytes(), &data); err != nil { panic(err) } token = data.Token } func (t *testSuite) TestGetTeachersJSON() { var teachers []*orm.Teacher req, err := http.NewRequest("GET", "/teachers?format=json", nil) if err != nil { panic(err) } pattern := PathPattern{ "/api/%s", "/%s?format=json&tpl_layout=base&tpl_content=%s", []string{"GET"}, } 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) } } } 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) // } // } }