handlers_test.go 2.5 KB

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