package api import ( "encoding/json" "io/ioutil" "net/http" "net/http/httptest" "path/filepath" "testing" "github.com/remogatto/prettytest" "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/config" "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/renderer" ) var ( server *httptest.Server teacherUrl string ) // Start of setup type testSuite struct { prettytest.Suite } func exp(name string) string { path := filepath.Join("testdata/expectations", name+".html") exp, err := ioutil.ReadFile(path) if err != nil { panic(err) } return string(exp) } func TestRunner(t *testing.T) { prettytest.Run( t, new(testSuite), ) } func (t *testSuite) BeforeAll() { config.LogLevel = config.LOG_LEVEL_OFF config.DocumentRootDir = "./testdata/documents" rend := renderer.NewJSONRenderer() renderer.Use(rend) } func (t *testSuite) TestGetDocumentsFromFS() { documents := getDocumentsFromFS() t.Equal(2, len(documents)) t.Equal("Document 1", documents[0].Config.Name) t.Equal("Document 2", documents[1].Config.Name) } func (t *testSuite) TestDocumentsHandler() { var data struct { Documents []Document } req, err := http.NewRequest("GET", "/documents", nil) t.Nil(err) rr := httptest.NewRecorder() documentsHandler().ServeHTTP(rr, req) t.Equal(http.StatusOK, rr.Code) err = json.Unmarshal(rr.Body.Bytes(), &data) t.Nil(err) t.Equal(2, len(data.Documents)) t.Equal("Document 1", data.Documents[0].Config.Name) } // func (t *testSuite) TestGetToken() { // tokenUrl := fmt.Sprintf("%s/get-token", server.URL) // resp, err := http.Get(tokenUrl) // defer resp.Body.Close() // t.Nil(err) // _, err = ioutil.ReadAll(resp.Body) // t.Nil(err) // t.Equal(http.StatusOK, resp.StatusCode) // } // func (t *testSuite) TestGetTeacher() { // token, err := getToken() // t.Nil(err) // if !t.Failed() { // teacher := orm.Teacher{} // teacherUrl = fmt.Sprintf("%s/teachers/andrea.fazzi", server.URL) // resp, err := sendAuthenticatedRequest("GET", teacherUrl, token) // t.Nil(err) // if !t.Failed() { // defer resp.Body.Close() // body, err := ioutil.ReadAll(resp.Body) // t.Nil(err) // t.Equal(http.StatusOK, resp.StatusCode) // if !t.Failed() { // err = json.Unmarshal(body, &teacher) // t.Equal("Andrea", teacher.Name) // t.Equal("FAZZI", teacher.Surname) // } // } // } // } // func getToken() ([]byte, error) { // resp, err := http.Get(fmt.Sprintf("%s/get-token", server.URL)) // defer resp.Body.Close() // if err != nil { // return nil, err // } // token, err := ioutil.ReadAll(resp.Body) // if err != nil { // return nil, err // } // return token, nil // } // func sendAuthenticatedRequest(method string, url string, token []byte) (*http.Response, error) { // req, err := http.NewRequest(method, url, nil) // if err != nil { // return nil, err // } // req.Header.Set("Authorization", fmt.Sprintf("bearer %v", string(token))) // resp, err := http.DefaultClient.Do(req) // if err != nil { // return nil, err // } // return resp, nil // }