orm_test.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. package orm
  2. import (
  3. "strconv"
  4. "testing"
  5. "time"
  6. "github.com/jinzhu/gorm"
  7. "github.com/remogatto/prettytest"
  8. )
  9. type testSuite struct {
  10. prettytest.Suite
  11. }
  12. func TestRunner(t *testing.T) {
  13. prettytest.Run(
  14. t,
  15. new(testSuite),
  16. )
  17. }
  18. func (t *testSuite) BeforeAll() {
  19. var (
  20. db *gorm.DB
  21. err error
  22. )
  23. connected := false
  24. for !connected {
  25. time.Sleep(10 * time.Second)
  26. db, err = New("karmen:karmen@/karmen_test?charset=utf8&parseTime=True&loc=Local")
  27. if err != nil {
  28. time.Sleep(5 * time.Second)
  29. continue
  30. }
  31. connected = true
  32. }
  33. Use(db)
  34. AutoMigrate()
  35. }
  36. func (t *testSuite) TestDB() {
  37. t.Not(t.Nil(DB()))
  38. }
  39. func (t *testSuite) TestGetActivityAll() {
  40. activity, err := GetActivityAll(map[string]string{"id": "1"})
  41. t.Nil(err)
  42. if !t.Failed() {
  43. t.Equal("Amilcare", activity.(*Activity).Teacher.Name)
  44. }
  45. }
  46. func (t *testSuite) TestGetActivityForUpdate() {
  47. data, err := GetActivityForUpdate(map[string]string{"id": "1"})
  48. t.Nil(err)
  49. if !t.Failed() {
  50. t.Equal("Amilcare", data.(ActivityForUpdate).Activity.Teacher.Name)
  51. t.Equal("1 A", data.(ActivityForUpdate).AllClasses[0].Name)
  52. t.Equal("ITALIANO", data.(ActivityForUpdate).AllSubjects[1].Name)
  53. t.Equal("Costanza", data.(ActivityForUpdate).AllTeachers[2].Name)
  54. }
  55. }
  56. func (t *testSuite) TestSaveActivity() {
  57. activity, err := GetActivity(map[string]string{"id": "1"})
  58. t.Nil(err)
  59. t.Equal(uint(1), activity.(*Activity).SubjectID)
  60. activity.(*Activity).SubjectID = 2
  61. _, err = SaveActivity(activity)
  62. t.Nil(err)
  63. if !t.Failed() {
  64. activity, _ = GetActivity(map[string]string{"id": "1"})
  65. t.Equal(uint(2), activity.(*Activity).SubjectID)
  66. }
  67. }
  68. func (t *testSuite) TestDeleteActivity() {
  69. var activities []*Activity
  70. err := DB().Find(&activities).Error
  71. t.Nil(err)
  72. numActivities := len(activities)
  73. activity, err := CreateActivity(
  74. &Activity{
  75. SubjectID: 1,
  76. TeacherID: 1,
  77. ClassID: 1,
  78. })
  79. t.Nil(err)
  80. err = DB().Find(&activities).Error
  81. t.Nil(err)
  82. t.Equal(numActivities+1, len(activities))
  83. act, err := DeleteActivity(map[string]string{"id": strconv.Itoa(int(activity.ID))}, nil)
  84. t.Nil(err)
  85. t.Equal(14, act.GetID())
  86. err = DB().Find(&activities).Error
  87. t.Nil(err)
  88. t.Equal(numActivities, len(activities))
  89. }
  90. func (t *testSuite) TestGetTeacher() {
  91. teacher, err := GetTeacher(map[string]string{"id": "1"})
  92. t.Nil(err)
  93. if !t.Failed() {
  94. t.Equal("Amilcare", teacher.(*Teacher).Name)
  95. t.Equal("AGOSTINO", teacher.(*Teacher).Surname)
  96. }
  97. }
  98. func (t *testSuite) TestGetTeacherAll() {
  99. teacher, err := GetTeacherAll(map[string]string{"id": "1"})
  100. t.Nil(err)
  101. if !t.Failed() {
  102. t.Equal("Amilcare", teacher.(*Teacher).Name)
  103. t.Equal("AGOSTINO", teacher.(*Teacher).Surname)
  104. t.Equal("1 A", teacher.(*Teacher).Activities[0].Class.Name)
  105. t.Equal("1 B", teacher.(*Teacher).Activities[1].Class.Name)
  106. t.Equal(4, teacher.(*Teacher).ActualHours)
  107. }
  108. teacher, err = GetTeacherAll(map[string]string{"id": "3"})
  109. t.Nil(err)
  110. if !t.Failed() {
  111. t.Equal("Costanza", teacher.(*Teacher).Name)
  112. t.Equal("LUNGA", teacher.(*Teacher).Surname)
  113. t.Equal(true, teacher.(*Teacher).IsCoordinator)
  114. }
  115. }
  116. func (t *testSuite) TestGetStudentAll() {
  117. student, err := GetStudentAll(map[string]string{"id": "1"})
  118. t.Nil(err)
  119. if !t.Failed() {
  120. t.Equal("Mario", student.(*Student).Name)
  121. t.Equal("ROSSI", student.(*Student).Surname)
  122. t.Equal("1 A", student.(*Student).Class.Name)
  123. t.Equal("LUNGA", student.(*Student).Class.Coordinator.Surname)
  124. }
  125. }
  126. func (t *testSuite) TestGetTeachers() {
  127. teachers, err := GetTeachers(map[string]string{})
  128. t.Nil(err)
  129. t.Equal(11, len(teachers.([]*Teacher)))
  130. teacher := teachers.([]*Teacher)[0]
  131. classes, err := teacher.GetClasses()
  132. t.Nil(err)
  133. t.Equal(2, len(classes))
  134. t.Equal(2, len(teacher.Classes))
  135. class := classes[0]
  136. t.Equal("1 A", class.Name)
  137. }
  138. func (t *testSuite) TestGetTeachersAll() {
  139. teachers, err := GetTeachersAll(map[string]string{})
  140. t.Nil(err)
  141. t.Equal(11, len(teachers.([]*Teacher)))
  142. t.Equal("1 A", teachers.([]*Teacher)[0].Classes[0].Name)
  143. t.Equal("SCIENZE", teachers.([]*Teacher)[0].Subjects[0].Name)
  144. t.Equal(1, len(teachers.([]*Teacher)[0].SubjectsByClass[1]))
  145. }
  146. func (t *testSuite) TestGetTeachersFast() {
  147. teachers, err := GetTeachersFast(map[string]string{})
  148. t.Nil(err)
  149. t.Equal(11, len(teachers.([]*Teacher)))
  150. }
  151. func (t *testSuite) TestGetTeacherActByClass() {
  152. teacher, err := GetTeacher(map[string]string{"id": "1"})
  153. t.Nil(err)
  154. if !t.Failed() {
  155. _, err := teacher.(*Teacher).GetActivitiesByClass("1")
  156. t.Nil(err)
  157. if !t.Failed() {
  158. t.True(len(teacher.(*Teacher).Activities) > 0)
  159. }
  160. }
  161. }
  162. func (t *testSuite) TestGetTeacherSubjByClass() {
  163. teacher, err := GetTeacherAll(map[string]string{"id": "1"})
  164. t.Nil(err)
  165. t.Equal(2, len(teacher.(*Teacher).Subjects))
  166. if !t.Failed() {
  167. subjects, err := teacher.(*Teacher).GetSubjectsByClassID("1")
  168. t.Nil(err)
  169. if !t.Failed() {
  170. t.Equal(1, len(subjects))
  171. }
  172. }
  173. }
  174. func (t *testSuite) TestSaveTeacher() {
  175. teacher, err := GetTeacher(map[string]string{"id": "1"})
  176. t.Nil(err)
  177. teacher.(*Teacher).Name = "Roberto"
  178. _, err = SaveTeacher(teacher)
  179. t.Nil(err)
  180. if !t.Failed() {
  181. teacher, _ = GetTeacher(map[string]string{"id": "1"})
  182. t.Equal("Roberto", teacher.(*Teacher).Name)
  183. }
  184. }
  185. func (t *testSuite) TestCreateDeleteTeacher() {
  186. teacher, err := CreateTeacher(&Teacher{Credential: Credential{Name: "Giovanni", Surname: "GIACOBBE"}})
  187. t.Nil(err)
  188. if !t.Failed() {
  189. _, err = DeleteTeacher(map[string]string{"id": strconv.Itoa(int(teacher.ID))}, nil)
  190. t.Nil(err)
  191. teachers, _ := GetTeachers(map[string]string{})
  192. t.Equal(11, len(teachers.([]*Teacher)))
  193. }
  194. teacher, err = CreateTeacher(&Teacher{Credential: Credential{Name: "Amilcare", Surname: "AGOSTINO"}})
  195. t.Not(t.Nil(err))
  196. }
  197. func (t *testSuite) TestGetDepartments() {
  198. departments, err := GetDepartments(map[string]string{})
  199. t.Nil(err)
  200. t.Equal(2, len(departments.([]*Department)))
  201. if !t.Failed() {
  202. department := departments.([]*Department)[0]
  203. subjects, err := department.GetSubjects()
  204. t.Nil(err)
  205. t.Equal(1, len(subjects))
  206. t.Equal(1, len(department.Subjects))
  207. subject := subjects[0]
  208. t.Equal("FRANCESE", subject.Name)
  209. }
  210. }
  211. func (t *testSuite) TestGetDepartment() {
  212. department, err := GetDepartment(map[string]string{"id": "1"})
  213. t.Nil(err)
  214. if !t.Failed() {
  215. t.Equal("LINGUE STRANIERE", department.(*Department).Name)
  216. }
  217. }
  218. func (t *testSuite) TestGetDepartmentAll() {
  219. department, err := GetDepartmentAll(map[string]string{"id": "1"})
  220. t.Nil(err)
  221. if !t.Failed() {
  222. t.Equal("FRANCESE", department.(*Department).Subjects[0].Name)
  223. t.Equal("DELLE ROSE", department.(*Department).Teachers[0].Surname)
  224. }
  225. }
  226. func (t *testSuite) TestGetSubjectForAdd() {
  227. data, err := GetSubjectForAdd(nil)
  228. t.Nil(err)
  229. if !t.Failed() {
  230. t.Equal("LINGUE STRANIERE", data.(SubjectForAdd).AllDepartments[0].Name)
  231. }
  232. }
  233. func (t *testSuite) TestSaveStudent() {
  234. student, err := GetStudentAll(map[string]string{"id": "1"})
  235. t.Nil(err)
  236. t.Equal(uint(1), student.(*Student).ClassID)
  237. student.(*Student).ClassID = 2
  238. student.(*Student).Handicap = true
  239. _, err = SaveStudent(student)
  240. t.Nil(err)
  241. if !t.Failed() {
  242. student, _ = GetStudent(map[string]string{"id": "1"})
  243. t.Equal(uint(2), student.(*Student).ClassID)
  244. t.Equal(true, student.(*Student).Handicap)
  245. }
  246. }
  247. // Groups
  248. func (t *testSuite) TestGetGroups() {
  249. groups, err := GetGroups(map[string]string{})
  250. t.Nil(err)
  251. t.Equal(1, len(groups.([]*Group)))
  252. }
  253. func (t *testSuite) TestGetGroup() {
  254. group, err := GetGroup(map[string]string{"id": "1"})
  255. t.Nil(err)
  256. if !t.Failed() {
  257. t.Equal("Gruppo", group.(*Group).Name)
  258. }
  259. }
  260. func (t *testSuite) TestTeacherQuery() {
  261. group := new(Group)
  262. // Select all
  263. group.Query = "surname:*"
  264. teachers, err := group.executeTeacherQuery()
  265. t.Nil(err)
  266. if !t.Failed() {
  267. t.Equal(11, len(teachers))
  268. }
  269. // Select teacher with surname beginning with the letter A
  270. group.Query = "surname:A*"
  271. teachers, err = group.executeTeacherQuery()
  272. t.Nil(err)
  273. if !t.Failed() {
  274. t.Equal(2, len(teachers))
  275. }
  276. // Select teacher with surname beginning with the letter A
  277. group.Query = "coordinator:true"
  278. teachers, err = group.executeTeacherQuery()
  279. t.Nil(err)
  280. if !t.Failed() {
  281. t.Equal(1, len(teachers))
  282. }
  283. }