handlers_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package api
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. "time"
  8. "github.com/jinzhu/gorm"
  9. "github.com/remogatto/prettytest"
  10. "gogs.carducci-dante.gov.it/karmen/core/config"
  11. "gogs.carducci-dante.gov.it/karmen/core/orm"
  12. )
  13. var (
  14. token string
  15. )
  16. // Start of setup
  17. type testSuite struct {
  18. prettytest.Suite
  19. }
  20. func TestRunner(t *testing.T) {
  21. prettytest.Run(
  22. t,
  23. new(testSuite),
  24. )
  25. }
  26. func (t *testSuite) BeforeAll() {
  27. var (
  28. db *gorm.DB
  29. err error
  30. )
  31. connected := false
  32. for !connected {
  33. time.Sleep(10 * time.Second)
  34. db, err = orm.New("karmen:karmen@/karmen_test?charset=utf8&parseTime=True&loc=Local")
  35. if err != nil {
  36. time.Sleep(5 * time.Second)
  37. continue
  38. }
  39. connected = true
  40. }
  41. orm.Use(db)
  42. orm.AutoMigrate()
  43. err = config.ReadFile("testdata/config.yaml", config.Config)
  44. if err != nil {
  45. panic(err)
  46. }
  47. config.Config.LogLevel = config.LOG_LEVEL_OFF
  48. req, err := http.NewRequest("GET", "/get_token", nil)
  49. if err != nil {
  50. panic(err)
  51. }
  52. req.SetBasicAuth("admin", "admin")
  53. rr := httptest.NewRecorder()
  54. tokenHandler().ServeHTTP(rr, req)
  55. var data struct {
  56. Token string
  57. UserID string
  58. }
  59. if err := json.Unmarshal(rr.Body.Bytes(), &data); err != nil {
  60. panic(err)
  61. }
  62. token = data.Token
  63. }
  64. func (t *testSuite) TestTeachersJSON() {
  65. var teachers []*orm.Teacher
  66. req, err := http.NewRequest("GET", "/teachers?format=json", nil)
  67. if err != nil {
  68. panic(err)
  69. }
  70. pattern := PathPattern{
  71. "/api/%s",
  72. "/%s?format=json&tpl_layout=base&tpl_content=%s",
  73. []string{"GET"},
  74. }
  75. rr := httptest.NewRecorder()
  76. modelHandler("teachers", pattern).ServeHTTP(rr, req)
  77. t.Equal(http.StatusOK, rr.Code)
  78. if !t.Failed() {
  79. err := json.Unmarshal(rr.Body.Bytes(), &teachers)
  80. t.Nil(err)
  81. if !t.Failed() {
  82. t.Equal("AGOSTINO", teachers[0].Surname)
  83. }
  84. }
  85. }