package orm import ( "strconv" "testing" "time" "github.com/jinzhu/gorm" "github.com/remogatto/prettytest" ) 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 = New("karmen:karmen@/karmen_test?charset=utf8&parseTime=True&loc=Local") if err != nil { time.Sleep(5 * time.Second) continue } connected = true } Use(db) AutoMigrate() } func (t *testSuite) TestDB() { t.Not(t.Nil(DB())) } func (t *testSuite) TestGetActivityAll() { activity, err := GetActivityAll(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("Amilcare", activity.(*Activity).Teacher.Name) } } func (t *testSuite) TestGetActivityForUpdate() { data, err := GetActivityForUpdate(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("Amilcare", data.(ActivityForUpdate).Activity.Teacher.Name) t.Equal("1 A", data.(ActivityForUpdate).AllClasses[0].Name) t.Equal("ITALIANO", data.(ActivityForUpdate).AllSubjects[1].Name) t.Equal("Costanza", data.(ActivityForUpdate).AllTeachers[2].Name) } } func (t *testSuite) TestSaveActivity() { activity, err := GetActivity(map[string]string{"id": "1"}) t.Nil(err) t.Equal(uint(1), activity.(*Activity).SubjectID) activity.(*Activity).SubjectID = 2 _, err = SaveActivity(activity) t.Nil(err) if !t.Failed() { activity, _ = GetActivity(map[string]string{"id": "1"}) t.Equal(uint(2), activity.(*Activity).SubjectID) } } func (t *testSuite) TestDeleteActivity() { var activities []*Activity err := DB().Find(&activities).Error t.Nil(err) numActivities := len(activities) activity, err := CreateActivity( &Activity{ SubjectID: 1, TeacherID: 1, ClassID: 1, }) t.Nil(err) err = DB().Find(&activities).Error t.Nil(err) t.Equal(numActivities+1, len(activities)) _, err = DeleteActivity(map[string]string{"id": strconv.Itoa(int(activity.ID))}, nil) t.Nil(err) err = DB().Find(&activities).Error t.Nil(err) t.Equal(numActivities, len(activities)) } func (t *testSuite) TestGetTeacher() { teacher, err := GetTeacher(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("Amilcare", teacher.(*Teacher).Name) t.Equal("AGOSTINO", teacher.(*Teacher).Surname) } } func (t *testSuite) TestGetTeacherAll() { teacher, err := GetTeacherAll(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("Amilcare", teacher.(*Teacher).Name) t.Equal("AGOSTINO", teacher.(*Teacher).Surname) t.Equal("1 A", teacher.(*Teacher).Activities[0].Class.Name) } } func (t *testSuite) TestGetTeachers() { teachers, err := GetTeachers(map[string]string{}) t.Nil(err) t.Equal(9, len(teachers.([]*Teacher))) teacher := teachers.([]*Teacher)[0] classes, err := teacher.GetClasses() t.Nil(err) t.Equal(1, len(classes)) t.Equal(1, len(teacher.Classes)) class := classes[0] t.Equal("1 A", class.Name) } func (t *testSuite) TestGetTeachersAll() { teachers, err := GetTeachersAll(map[string]string{}) t.Nil(err) t.Equal(9, len(teachers.([]*Teacher))) t.Equal("1 A", teachers.([]*Teacher)[0].Classes[0].Name) t.Equal("MATEMATICA", teachers.([]*Teacher)[0].Subjects[0].Name) } func (t *testSuite) TestGetTeacherActByClass() { teacher, err := GetTeacher(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { _, err := teacher.(*Teacher).GetActivitiesByClass("1") t.Nil(err) if !t.Failed() { t.True(len(teacher.(*Teacher).Activities) > 0) } } } func (t *testSuite) TestSaveTeacher() { teacher, err := GetTeacher(map[string]string{"id": "1"}) t.Nil(err) teacher.(*Teacher).Name = "Roberto" _, err = SaveTeacher(teacher) t.Nil(err) if !t.Failed() { teacher, _ = GetTeacher(map[string]string{"id": "1"}) t.Equal("Roberto", teacher.(*Teacher).Name) } } func (t *testSuite) TestCreateDeleteTeacher() { teacher, err := CreateTeacher(&Teacher{Credential: Credential{Name: "Giovanni", Surname: "GIACOBBE"}}) t.Nil(err) if !t.Failed() { _, err = DeleteTeacher(map[string]string{"id": strconv.Itoa(int(teacher.ID))}, nil) t.Nil(err) teachers, _ := GetTeachers(map[string]string{}) t.Equal(9, len(teachers.([]*Teacher))) } } func (t *testSuite) TestGetDepartments() { departments, err := GetDepartments(map[string]string{}) t.Nil(err) t.Equal(2, len(departments.([]*Department))) if !t.Failed() { department := departments.([]*Department)[0] subjects, err := department.GetSubjects() t.Nil(err) t.Equal(2, len(subjects)) t.Equal(2, len(department.Subjects)) subject := subjects[0] t.Equal("INGLESE", subject.Name) } } func (t *testSuite) TestGetDepartment() { department, err := GetDepartment(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("LINGUE STRANIERE", department.(*Department).Name) } } func (t *testSuite) TestGetDepartmentAll() { department, err := GetDepartmentAll(map[string]string{"id": "1"}) t.Nil(err) if !t.Failed() { t.Equal("INGLESE", department.(*Department).Subjects[0].Name) t.Equal("FRANCESE", department.(*Department).Subjects[1].Name) t.Equal("DONADONI", department.(*Department).Teachers[0].Surname) t.Equal("DELLE ROSE", department.(*Department).Teachers[1].Surname) } } func (t *testSuite) TestGetSubjectForAdd() { data, err := GetSubjectForAdd(nil) t.Nil(err) if !t.Failed() { t.Equal("LINGUE STRANIERE", data.(SubjectForAdd).AllDepartments[0].Name) } }