From 68aa375305ea6689022e7dcd1322834c4982acab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Schr=C3=B6ter?= Date: Sat, 2 Jan 2021 16:14:38 +0000 Subject: [PATCH] Resolve "Select university on registration" --- appapi.yaml | 36 +++++++++++-- endpoint/university/endpoint.go | 21 ++++++++ endpoint/university/query.go | 61 ++++++++++++++++++++++ endpoint/user/endpoint.go | 19 +++++-- endpoint/user/query.go | 32 ++++++++++-- endpoint/user/request.go | 9 ++-- endpoint/user/util.go | 18 ------- endpoint/util.go | 8 +++ main.go | 3 +- resources/data/testdata.sql | 4 +- schemas/university.go | 8 +++ schemas/user.go | 22 ++++---- setup/setup.go | 11 +++- test/available_test.go | 4 +- test/avatar_test.go | 8 +-- test/duel_test.go | 40 +++++++------- test/e2e/responses/university/get_200.json | 16 ++++++ test/e2e/universityendpoint_test.go | 30 +++++++++++ test/e2e/userendpoint_test.go | 37 ++++++++++--- test/e2e/util.go | 6 +-- test/friend_test.go | 20 +++---- test/pool_test.go | 2 +- test/refreshjwt_test.go | 6 +-- test/resource_test.go | 6 +-- test/title_test.go | 4 +- test/user_test.go | 42 +++++++-------- 26 files changed, 345 insertions(+), 128 deletions(-) create mode 100644 endpoint/university/endpoint.go create mode 100644 endpoint/university/query.go create mode 100644 test/e2e/responses/university/get_200.json create mode 100644 test/e2e/universityendpoint_test.go diff --git a/appapi.yaml b/appapi.yaml index 510d8aa..5d20d20 100755 --- a/appapi.yaml +++ b/appapi.yaml @@ -896,7 +896,20 @@ paths: description: Authentication failure. '500': description: The server was unable to perform the requested operation. - + '/university': + get: + security: [] + summary: Get all registered universities. + description: Get a list of universities, which Akamu is available to. + responses: + '200': + description: List of universities. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/university' '/avatar': get: summary: Get all unlocked avatars. @@ -1138,7 +1151,6 @@ components: - username - password - email - - university - semester properties: username: @@ -1148,8 +1160,6 @@ components: email: type: string format: email - university: - type: string semester: type: integer format: int32 @@ -1191,7 +1201,7 @@ components: verified: type: boolean university: - type: string + $ref: '#/components/schemas/university' experience: type: integer format: int32 @@ -1200,6 +1210,22 @@ components: format: int32 email: type: string + university: + description: University with its details. + type: object + properties: + id: + type: integer + format: uint32 + name: + type: string + shortform: + type: string + city: + type: string + domain: + description: Domain for university emails. Email addresses must match either *@ or *@*. + type: string patch-user: description: Updated values for the currently logged in user. type: object diff --git a/endpoint/university/endpoint.go b/endpoint/university/endpoint.go new file mode 100644 index 0000000..0625fc8 --- /dev/null +++ b/endpoint/university/endpoint.go @@ -0,0 +1,21 @@ +package university + +import ( + "net/http" + + "github.com/getsentry/raven-go" + "github.com/gin-gonic/gin" +) + +func GetUniversities(repository UniversityQuery) gin.HandlerFunc { + return func(ctx *gin.Context) { + universities, err := repository.SelectAll() + if err != nil { + raven.CaptureError(err, nil) + ctx.AbortWithError(http.StatusInternalServerError, err) + return + } + + ctx.JSON(http.StatusOK, universities) + } +} diff --git a/endpoint/university/query.go b/endpoint/university/query.go new file mode 100644 index 0000000..58f2879 --- /dev/null +++ b/endpoint/university/query.go @@ -0,0 +1,61 @@ +package university + +import ( + "database/sql" + "fmt" + + "gitlab.akamu.de/akamu/game-server-go/dbhandler" + "gitlab.akamu.de/akamu/game-server-go/schemas" +) + +type UniversityQuery interface { + SelectAll() ([]schemas.UniversitySchema, error) + SelectByEmail(email string) (*schemas.UniversitySchema, error) +} + +type MySQLUniversityQuery struct{} + +func (*MySQLUniversityQuery) SelectAll() ([]schemas.UniversitySchema, error) { + db, err := dbhandler.GetDBConnection() + if err != nil { + return nil, fmt.Errorf("failed to receive database connection: %v", err) + } + + rows, err := db.Query("SELECT `iduniversity`, `name`, `shortform`, `city`, `domain` FROM `university`") + + if err != nil { + return nil, fmt.Errorf("failed to query universities: %v", err) + } + + result := make([]schemas.UniversitySchema, 0) + for rows.Next() { + var u schemas.UniversitySchema + if err := rows.Scan(&u.ID, &u.Name, &u.Shortform, &u.City, &u.Domain); err != nil { + return nil, fmt.Errorf("error while fetching universities from database: %v", err) + } + + result = append(result, u) + } + + return result, nil +} + +func (*MySQLUniversityQuery) SelectByEmail(email string) (*schemas.UniversitySchema, error) { + db, err := dbhandler.GetDBConnection() + if err != nil { + return nil, fmt.Errorf("failed to receive database connection: %v", err) + } + + row := db.QueryRow("SELECT `iduniversity`, `name`, `shortform`, `city`, `domain` FROM `university` WHERE ? RLIKE CONCAT('^.+[\\.@]', `domain`, '$')", email) + + var u schemas.UniversitySchema + if err := row.Scan(&u.ID, &u.Name, &u.Shortform, &u.City, &u.Domain); err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + + return nil, fmt.Errorf("failed to validate email address against universities: %v", err) + } + + return &u, nil +} diff --git a/endpoint/user/endpoint.go b/endpoint/user/endpoint.go index 31773c9..872c8eb 100755 --- a/endpoint/user/endpoint.go +++ b/endpoint/user/endpoint.go @@ -10,6 +10,7 @@ import ( "gitlab.akamu.de/akamu/game-server-go/endpoint" "gitlab.akamu.de/akamu/game-server-go/endpoint/title" + "gitlab.akamu.de/akamu/game-server-go/endpoint/university" "gitlab.akamu.de/akamu/game-server-go/sendmail" "gitlab.akamu.de/akamu/game-server-go/token/otp" @@ -53,7 +54,7 @@ func SetupUserRoutes(group *gin.RouterGroup, repository UserQuery, titleReposito * In case the request is executed successfully the response value is * a json containing the user database id and authentication token. */ -func RegisterUser(repository UserQuery, tokenFactory otp.TokenFactory, verifyEmail *sendmail.TemplateMail) gin.HandlerFunc { +func RegisterUser(repository UserQuery, universityRepository university.UniversityQuery, tokenFactory otp.TokenFactory, verifyEmail *sendmail.TemplateMail) gin.HandlerFunc { return func(ctx *gin.Context) { //database type is int(11) @@ -83,8 +84,18 @@ func RegisterUser(repository UserQuery, tokenFactory otp.TokenFactory, verifyEma return } - if err := validateEmailDomain(signUpForm.Email); err != nil { - ctx.String(http.StatusBadRequest, fmt.Sprintf("domain of email address violates rules: %v", err)) + // fetch university + university, err := universityRepository.SelectByEmail(signUpForm.Email) + if err != nil { + raven.CaptureError(err, nil) + ctx.AbortWithError(http.StatusInternalServerError, err) + return + } + + // temporary: allow users not attending an university later + if university == nil && endpoint.IsProduction() { + ctx.AbortWithStatus(http.StatusBadRequest) + return } //creates an empty user struct @@ -96,7 +107,7 @@ func RegisterUser(repository UserQuery, tokenFactory otp.TokenFactory, verifyEma Experience: initialUserExperience, SelectedAvatar: initialUserAvatar, SelectedTitle: initialUserTitle, - University: signUpForm.University, + University: university, Verified: initialVerifiedStatus} //insert user into the Akamu sql database and returns the id diff --git a/endpoint/user/query.go b/endpoint/user/query.go index 6ab6e8b..8882e6b 100755 --- a/endpoint/user/query.go +++ b/endpoint/user/query.go @@ -99,9 +99,14 @@ func (MySQLUserQuery) Insert(user *schemas.FullUserSchema, password string) (id return 0, fmt.Errorf("failed to hash the password with bcrypt: " + err.Error()) } + university := sql.NullInt32{} + if user.University != nil { + university = sql.NullInt32{Valid: true, Int32: user.University.ID} + } + //execute sql statement to insert the new user into the user table _, err = stmt.Exec(user.TimeRegistered, user.Username, hashed, - user.Email, user.Semester, user.Experience, user.Verified, user.University) + user.Email, user.Semester, user.Experience, user.Verified, university) //check for erros while executing the insert sql statement if err != nil { @@ -168,7 +173,7 @@ func (MySQLUserQuery) Select(id uint32) ([]schemas.FullUserSchema, error) { } //create statement to fetch user from db - stmt, err := db.Prepare("select iduser, time_registered, username, email, semester, experience, idavatar, avatar.image, avatar.level, title.idtitle, title.name, subject.idsubject, subject.name, subject.shortform, subject.department, subject.description, title.unlock_score, title.unlock_win, verified, user.university, user.level FROM user LEFT JOIN title ON (title.idtitle=selected_title) LEFT JOIN subject ON (idsubject=title.subject) LEFT JOIN avatar ON (idavatar=selected_avatar) WHERE iduser = ?") + stmt, err := db.Prepare("select iduser, time_registered, username, email, semester, experience, idavatar, avatar.image, avatar.level, title.idtitle, title.name, subject.idsubject, subject.name, subject.shortform, subject.department, subject.description, title.unlock_score, title.unlock_win, verified, iduniversity, university.name, university.shortform, university.city, university.domain, user.level FROM user LEFT JOIN title ON (title.idtitle=selected_title) LEFT JOIN subject ON (idsubject=title.subject) LEFT JOIN avatar ON (idavatar=selected_avatar) LEFT JOIN university ON (iduniversity=user.university) WHERE iduser = ?") if err != nil { return nil, fmt.Errorf("Could not prepare sql statement to retrieve user from Datase. " + err.Error()) } @@ -184,6 +189,13 @@ func (MySQLUserQuery) Select(id uint32) ([]schemas.FullUserSchema, error) { var tmpSubjectDepartment sql.NullString var tmpSubjectDescription sql.NullString + // Temporary university + var tmpUniversityID sql.NullInt32 + var tmpUniversityName sql.NullString + var tmpUniversityShortform sql.NullString + var tmpUniversityCity sql.NullString + var tmpUniversityDomain sql.NullString + var tmpUnlockScore sql.NullInt32 var tmpUnlockWin sql.NullInt32 @@ -208,7 +220,11 @@ func (MySQLUserQuery) Select(id uint32) ([]schemas.FullUserSchema, error) { &tmpUnlockScore, &tmpUnlockWin, &users[0].Verified, - &users[0].University, + &tmpUniversityID, + &tmpUniversityName, + &tmpUniversityShortform, + &tmpUniversityCity, + &tmpUniversityDomain, &users[0].Level) if err != nil { if err == sql.ErrNoRows { @@ -228,6 +244,16 @@ func (MySQLUserQuery) Select(id uint32) ([]schemas.FullUserSchema, error) { } } + if tmpUniversityID.Valid { + users[0].University = &schemas.UniversitySchema{ + ID: tmpUniversityID.Int32, + Name: tmpUniversityName.String, + Shortform: tmpUniversityShortform.String, + City: tmpUniversityCity.String, + Domain: tmpUniversityDomain.String, + } + } + if tmpUnlockScore.Valid { users[0].SelectedTitle.UnlockScore = tmpUnlockScore.Int32 } else { diff --git a/endpoint/user/request.go b/endpoint/user/request.go index 7f46289..bdf2ba7 100644 --- a/endpoint/user/request.go +++ b/endpoint/user/request.go @@ -1,11 +1,10 @@ package user type SignUpRequest struct { - Username string `json:"username" binding:"required"` - Password string `json:"password" binding:"required"` - Email string `json:"email" binding:"required,email"` - University string `json:"university" binding:"required"` - Semester uint32 `json:"semester" binding:"required"` + Username string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` + Email string `json:"email" binding:"required,email"` + Semester uint32 `json:"semester" binding:"required"` } type PatchUserRequest struct { diff --git a/endpoint/user/util.go b/endpoint/user/util.go index 67c77ab..217f671 100644 --- a/endpoint/user/util.go +++ b/endpoint/user/util.go @@ -1,10 +1,7 @@ package user import ( - "fmt" "strings" - - "gitlab.akamu.de/akamu/game-server-go/version" ) // password rules @@ -23,18 +20,3 @@ func CheckPasswordOK(pw string) bool { return containsLower && containsUpper } - -func validateEmailDomain(email string) error { - // This is only for master builds - if version.Environment != "master" { - return nil - } - - // Check email suffix against passlist - for i := 0; i < len(emailPasslist); i += 1 { - if strings.HasSuffix(email, emailPasslist[i]) { - return nil - } - } - return fmt.Errorf("email address needs to end with %v", emailPasslist) -} diff --git a/endpoint/util.go b/endpoint/util.go index f5858c4..f00dab8 100644 --- a/endpoint/util.go +++ b/endpoint/util.go @@ -2,6 +2,7 @@ package endpoint import ( "errors" + "flag" "net/http" "github.com/getsentry/raven-go" @@ -11,6 +12,7 @@ import ( "github.com/gin-gonic/gin" "gitlab.akamu.de/akamu/game-server-go/schemas" + "gitlab.akamu.de/akamu/game-server-go/version" ) var ErrFetchingSessionPayload = errors.New("failed to fetch session payload") @@ -71,3 +73,9 @@ func GetTranslator() ut.Translator { return translator } + +// IsProduction returns true when the server was built +// from the master branch or is running tests. +func IsProduction() bool { + return (version.Environment == "master" || flag.Lookup("test.v") != nil) +} diff --git a/main.go b/main.go index 6297b50..ca7b45b 100755 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( "time" "gitlab.akamu.de/akamu/game-server-go/endpoint/resource" + "gitlab.akamu.de/akamu/game-server-go/endpoint/university" "gitlab.akamu.de/akamu/game-server-go/endpoint/refreshjwt" @@ -208,7 +209,7 @@ func main() { panic("Setting could not be loaded." + errLoadSettings.Error()) } - router := setup.SetupRoutes(&course.MySQLTitleQuery{}, &flashcard.MySQLFlashcardQuery{}, &subject.MySQLSubjectQuery{}, &title.MySQLTitleQuery{}, &traininglist.MySQLTrainingListQuery{}, &user.MySQLUserQuery{}, &pool.MySQLPoolQuery{}, &friend.MySQLFriendQuery{}, &avatar.MySQLAvatarQuery{}, &duel.MySQLDuelQuery{}, &refreshjwt.MySQLRefreshJWTQuery{}, &resource.MySQLResourceQuery{}, &cfg.ResourceServer, settings, &cfg.SMTP, cfg.JwtSecret) + router := setup.SetupRoutes(&course.MySQLTitleQuery{}, &flashcard.MySQLFlashcardQuery{}, &subject.MySQLSubjectQuery{}, &title.MySQLTitleQuery{}, &traininglist.MySQLTrainingListQuery{}, &user.MySQLUserQuery{}, &pool.MySQLPoolQuery{}, &friend.MySQLFriendQuery{}, &avatar.MySQLAvatarQuery{}, &duel.MySQLDuelQuery{}, &refreshjwt.MySQLRefreshJWTQuery{}, &resource.MySQLResourceQuery{}, &university.MySQLUniversityQuery{}, &cfg.ResourceServer, settings, &cfg.SMTP, cfg.JwtSecret) raven.CapturePanic(func() { // By default it serves on :8080 unless a diff --git a/resources/data/testdata.sql b/resources/data/testdata.sql index bb11820..ba8e47b 100644 --- a/resources/data/testdata.sql +++ b/resources/data/testdata.sql @@ -92,8 +92,8 @@ INSERT INTO title (idtitle, name, subject, unlock_score, unlock_win) VALUES (2," INSERT INTO title (idtitle, name, subject, unlock_score, unlock_win) VALUES (3,"easy",1,5,0); -- answering one question correctly will unlock this title -- UNIVERSITY -INSERT INTO university (iduniversity, name, shortform, city, country) VALUES (1,"Technische Universität Darmstadt","TU Darmstadt","Darmstadt","Deutschland"); -INSERT INTO university (iduniversity, name, shortform, city, country) VALUES (2,"Hochschule Darmstadt","HDA","Darmstadt","Deutschland"); +INSERT INTO university (iduniversity, name, shortform, city, country, domain) VALUES (1,"Technische Universität Darmstadt","TU Darmstadt","Darmstadt","Deutschland", "tu-darmstadt.de"); +INSERT INTO university (iduniversity, name, shortform, city, country, domain) VALUES (2,"Hochschule Darmstadt","HDA","Darmstadt","Deutschland", "h-da.de"); -- SUBJECT INSERT INTO subject (idsubject, name, shortform, department, university, description, idmongo) diff --git a/schemas/university.go b/schemas/university.go index faeaab6..7ecd178 100644 --- a/schemas/university.go +++ b/schemas/university.go @@ -1 +1,9 @@ package schemas + +type UniversitySchema struct { + ID int32 `json:"id"` + Name string `json:"name"` + Shortform string `json:"shortform"` + City string `json:"city"` + Domain string `json:"domain"` +} diff --git a/schemas/user.go b/schemas/user.go index 589c99a..623b4d4 100644 --- a/schemas/user.go +++ b/schemas/user.go @@ -10,17 +10,17 @@ type InfoUserSchema struct { } type FullUserSchema struct { - ID uint32 `json:"id,omitempty"` - Username string `json:"username,omitempty"` - SelectedAvatar AvatarSchema `json:"avatar,omitemtpy"` - SelectedTitle TitleSchema `json:"title,omitempty"` - TimeRegistered time.Time `json:"time-registered,omitempty"` - Email string `json:"email,omitempty"` - Semester uint32 `json:"semester,omitempty"` - Experience int `json:"experience"` - Level int `json:"level"` - University string `json:"university,omitempty"` - Verified bool `json:"verified,omitempty"` + ID uint32 `json:"id,omitempty"` + Username string `json:"username,omitempty"` + SelectedAvatar AvatarSchema `json:"avatar,omitemtpy"` + SelectedTitle TitleSchema `json:"title,omitempty"` + TimeRegistered time.Time `json:"time-registered,omitempty"` + Email string `json:"email,omitempty"` + Semester uint32 `json:"semester,omitempty"` + Experience int `json:"experience"` + Level int `json:"level"` + University *UniversitySchema `json:"university"` + Verified bool `json:"verified,omitempty"` } type CredentialsSchema struct { diff --git a/setup/setup.go b/setup/setup.go index e6e65a0..7815db3 100644 --- a/setup/setup.go +++ b/setup/setup.go @@ -36,6 +36,7 @@ import ( "gitlab.akamu.de/akamu/game-server-go/endpoint/subject" "gitlab.akamu.de/akamu/game-server-go/endpoint/title" "gitlab.akamu.de/akamu/game-server-go/endpoint/traininglist" + "gitlab.akamu.de/akamu/game-server-go/endpoint/university" "gitlab.akamu.de/akamu/game-server-go/endpoint/user" "gitlab.akamu.de/akamu/game-server-go/endpoint/usernameavailable" "gitlab.akamu.de/akamu/game-server-go/setting" @@ -121,7 +122,7 @@ func getRoot(ctx *gin.Context) { ctx.String(http.StatusOK, "AKAMU REST API") } -func SetupRoutes(courseRepository course.CourseQuery, flashcardRepository flashcard.FlashcardQuery, subjectRepository subject.SubjectQuery, titleRepository title.TitleQuery, traininglistRepository traininglist.TrainingListQuery, userRepository user.UserQuery, poolRepository pool.PoolQuery, friendRepository friend.FriendQuery, avatarRepository avatar.AvatarQuery, duelRepository duel.DuelQuery, refreshjwtRepository refreshjwt.RefreshJWTQuery, resourceRepository resource.ResourceQuery, resourceServerConfig *config.ResourceServer, settings *setting.Settings, smtpTransport *sendmail.Transport, jwtSecret ...string) *gin.Engine { +func SetupRoutes(courseRepository course.CourseQuery, flashcardRepository flashcard.FlashcardQuery, subjectRepository subject.SubjectQuery, titleRepository title.TitleQuery, traininglistRepository traininglist.TrainingListQuery, userRepository user.UserQuery, poolRepository pool.PoolQuery, friendRepository friend.FriendQuery, avatarRepository avatar.AvatarQuery, duelRepository duel.DuelQuery, refreshjwtRepository refreshjwt.RefreshJWTQuery, resourceRepository resource.ResourceQuery, universityRepository university.UniversityQuery, resourceServerConfig *config.ResourceServer, settings *setting.Settings, smtpTransport *sendmail.Transport, jwtSecret ...string) *gin.Engine { //gin.SetMode(gin.ReleaseMode) router := gin.Default() @@ -265,7 +266,7 @@ func SetupRoutes(courseRepository course.CourseQuery, flashcardRepository flashc authGroup.Use(authMiddleware.MiddlewareFunc()) router.POST("/login", authMiddleware.LoginHandler) - router.POST("/register", user.RegisterUser(userRepository, tokenFactory, userVerifyMail)) + router.POST("/register", user.RegisterUser(userRepository, universityRepository, tokenFactory, userVerifyMail)) router.GET("/verify", user.Verify(userRepository, tokenFactory, userVerifyMail)) @@ -303,6 +304,12 @@ func SetupRoutes(courseRepository course.CourseQuery, flashcardRepository flashc ctx.JSON(http.StatusOK, version.Version) }) + router.GET("/university", university.GetUniversities(universityRepository)) + router.OPTIONS("/university", func(ctx *gin.Context) { + ctx.Header("Allow", "GET") + ctx.Status(200) + }) + usernameavailable.SetupUsernameavailableRoutes(router.Group("/usernameavailable"), userRepository) user.SetupUserRoutes(authGroup.Group("/user"), userRepository, titleRepository) flashcard.SetupFlashcardRoutes(authGroup.Group("/flashcard"), flashcardRepository) diff --git a/test/available_test.go b/test/available_test.go index 1e5758e..52d486e 100644 --- a/test/available_test.go +++ b/test/available_test.go @@ -15,7 +15,7 @@ import ( func Test_isAvailable_200_true(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -38,7 +38,7 @@ func Test_isAvailable_200_true(t *testing.T) { func Test_isAvailable_200_false(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/avatar_test.go b/test/avatar_test.go index d9bb124..46f3a0d 100644 --- a/test/avatar_test.go +++ b/test/avatar_test.go @@ -29,7 +29,7 @@ func (mockAvatar) SelectAll() ([]schemas.AvatarSchema, error) { type mockAvatarError struct{} func Test_getAvatars200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -45,7 +45,7 @@ func Test_getAvatars200(t *testing.T) { } func Test_getAvatars401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -58,7 +58,7 @@ func Test_getAvatars401(t *testing.T) { } func Test_getAllAvatars200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -74,7 +74,7 @@ func Test_getAllAvatars200(t *testing.T) { } func Test_getAllAvatars401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, &mockAvatar{}, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/duel_test.go b/test/duel_test.go index ea874ad..c5506ab 100644 --- a/test/duel_test.go +++ b/test/duel_test.go @@ -307,7 +307,7 @@ func newMockDuel() mockDuel { func Test_getAllDuels200(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) // Test with user1 env1 := new(TestEnv) @@ -342,7 +342,7 @@ func Test_getAllDuels200(t *testing.T) { func Test_getDuel200(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -361,7 +361,7 @@ func Test_getDuel200(t *testing.T) { func Test_getDuel401(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -376,7 +376,7 @@ func Test_getDuel401(t *testing.T) { func Test_getDuel403(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -392,7 +392,7 @@ func Test_getDuel403(t *testing.T) { func Test_getDuel404(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -407,7 +407,7 @@ func Test_getDuel404(t *testing.T) { func Test_postDuel201(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -429,7 +429,7 @@ func Test_postDuel201(t *testing.T) { func Test_postDuel400(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) backup, _ := json.Marshal(duelRepo.duels) @@ -459,7 +459,7 @@ func Test_postDuel400(t *testing.T) { func Test_postDuel401(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -473,7 +473,7 @@ func Test_postDuel401(t *testing.T) { func Test_postDuel403(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -488,7 +488,7 @@ func Test_postDuel403(t *testing.T) { func Test_postDuel404(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -503,7 +503,7 @@ func Test_postDuel404(t *testing.T) { func Test_getDuelPool200(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -521,7 +521,7 @@ func Test_getDuelPool200(t *testing.T) { func Test_getDuelPool400(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -536,7 +536,7 @@ func Test_getDuelPool400(t *testing.T) { func Test_getDuelPool401(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -550,7 +550,7 @@ func Test_getDuelPool401(t *testing.T) { func Test_getDuelPool403(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -565,7 +565,7 @@ func Test_getDuelPool403(t *testing.T) { func Test_getDuelPool404(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -580,7 +580,7 @@ func Test_getDuelPool404(t *testing.T) { func Test_patchDuelPool200(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -614,7 +614,7 @@ func Test_patchDuelPool200(t *testing.T) { func Test_patchDuelPool400(t *testing.T) { duelRepo := newMockDuel() expect, _ := json.Marshal(duelRepo.duels) - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -638,7 +638,7 @@ func Test_patchDuelPool400(t *testing.T) { func Test_patchDuelPool401(t *testing.T) { duelRepo := newMockDuel() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -653,7 +653,7 @@ func Test_patchDuelPool401(t *testing.T) { func Test_patchDuelPool403(t *testing.T) { duelRepo := newMockDuel() expected, _ := json.Marshal(duelRepo.duels) - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -679,7 +679,7 @@ func Test_patchDuelPool403(t *testing.T) { func Test_patchDuelPool404(t *testing.T) { duelRepo := newMockDuel() expected, _ := json.Marshal(duelRepo.duels) - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, &duelRepo, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/e2e/responses/university/get_200.json b/test/e2e/responses/university/get_200.json new file mode 100644 index 0000000..fa95142 --- /dev/null +++ b/test/e2e/responses/university/get_200.json @@ -0,0 +1,16 @@ +[ + { + "id": 1, + "name": "Technische Universität Darmstadt", + "shortform": "TU Darmstadt", + "city": "Darmstadt", + "domain": "tu-darmstadt.de" + }, + { + "id": 2, + "name": "Hochschule Darmstadt", + "shortform": "HDA", + "city": "Darmstadt", + "domain": "h-da.de" + } +] \ No newline at end of file diff --git a/test/e2e/universityendpoint_test.go b/test/e2e/universityendpoint_test.go new file mode 100644 index 0000000..6e510a0 --- /dev/null +++ b/test/e2e/universityendpoint_test.go @@ -0,0 +1,30 @@ +package e2e + +import ( + "testing" + + "github.com/gin-gonic/gin" + "gitlab.akamu.de/akamu/game-server-go/test" +) + +func get_university200(router *gin.Engine) func(t *testing.T) { + return func(t *testing.T) { + env := new(test.TestEnv) + env.Router = router + + req, _ := env.NewRequest("GET", "/university", nil) + responseFile := "university/get_200.json" + _ = executeAndAssertJSONOk(t, router, req, responseFile) + } +} + +func Test_getUniversities(t *testing.T) { + env := E2EEnvironment{} + router, setuperr := env.SetupEnvironment() + if setuperr != nil { + t.Fail() + t.Skip("Skipping E2E getUniversities tests. Environment setup failed.", setuperr.Error()) + } + + t.Run("testGetUniversities_200", get_university200(router)) +} diff --git a/test/e2e/userendpoint_test.go b/test/e2e/userendpoint_test.go index c8a95a4..2b9d044 100644 --- a/test/e2e/userendpoint_test.go +++ b/test/e2e/userendpoint_test.go @@ -30,17 +30,16 @@ func testLogin(router *gin.Engine, username, password string, code int) func(t * } } -func testRegister(router *gin.Engine, username, password string, code int) func(t *testing.T) { +func testRegister(router *gin.Engine, username, password, email string, code int) func(t *testing.T) { return func(t *testing.T) { env := new(test.TestEnv) env.Router = router requestForm := user.SignUpRequest{ - Username: username, - Password: password, - Email: "newEmail@stud.tu-darmstadt.de", - University: "TU Darmstadt", - Semester: 1, + Username: username, + Password: password, + Email: email, + Semester: 1, } requestString, err := json.Marshal(requestForm) @@ -113,16 +112,38 @@ func Test_register(t *testing.T) { t.Skip("Skipping E2E register tests. Enviroment setup failed.", setuperr.Error()) } - t.Run("testRegisterUser", testRegister(router, "newUser", "newPassword", 503)) + t.Run("testRegisterNoUniversityUser", testRegister(router, "newUser", "newPassword", "test@gmail.de", 400)) + + // SMTP not configured for tests -> 503 since verification mail was not sent + t.Run("testRegisterUser", testRegister(router, "newUser", "newPassword", "test@tu-darmstadt.de", 503)) + + t.Run("testRegisterHDAUser", testRegister(router, "newHDA", "newPassword", "test@h-da.de", 503)) t.Run("testFreshUserUnverified", testLogin(router, "newUser", "newPassword", 403)) - // Manually verify all users + // Check university conn, err := dbhandler.GetDBConnection() if err != nil { t.Fatalf("failed to get database connection: %v", err) } + rt := conn.QueryRow("SELECT `university` FROM `user` WHERE `username`=?", "newUser") + var tuID uint32 + if err := rt.Scan(&tuID); err != nil { + t.Fatalf("failed to fetch university of registered user: %v", err) + } + + assert.EqualValues(t, 1, tuID) + + rh := conn.QueryRow("SELECT `university` FROM `user` WHERE `username`=?", "newHDA") + var hdaID uint32 + if err := rh.Scan(&hdaID); err != nil { + t.Fatalf("failed to fetch university of registered user: %v", err) + } + + assert.EqualValues(t, 2, hdaID) + + // Manually verify all users if _, err := conn.Exec("UPDATE `user` SET `verified`=1"); err != nil { t.Fatalf("failed to verify users: %v", err) } diff --git a/test/e2e/util.go b/test/e2e/util.go index 7321f56..c360529 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -12,8 +12,6 @@ import ( "path" "testing" - "gitlab.akamu.de/akamu/game-server-go/endpoint/resource" - "github.com/gin-gonic/gin" "github.com/kinbiko/jsonassert" "github.com/stretchr/testify/assert" @@ -26,9 +24,11 @@ import ( "gitlab.akamu.de/akamu/game-server-go/endpoint/friend" "gitlab.akamu.de/akamu/game-server-go/endpoint/pool" "gitlab.akamu.de/akamu/game-server-go/endpoint/refreshjwt" + "gitlab.akamu.de/akamu/game-server-go/endpoint/resource" "gitlab.akamu.de/akamu/game-server-go/endpoint/subject" "gitlab.akamu.de/akamu/game-server-go/endpoint/title" "gitlab.akamu.de/akamu/game-server-go/endpoint/traininglist" + "gitlab.akamu.de/akamu/game-server-go/endpoint/university" "gitlab.akamu.de/akamu/game-server-go/endpoint/user" "gitlab.akamu.de/akamu/game-server-go/schemas" "gitlab.akamu.de/akamu/game-server-go/setting" @@ -97,7 +97,7 @@ func (env *E2EEnvironment) SetupEnvironment() (*gin.Engine, error) { return nil, errSettings } - router := setup.SetupRoutes(&course.MySQLTitleQuery{}, &flashcard.MySQLFlashcardQuery{}, &subject.MySQLSubjectQuery{}, &title.MySQLTitleQuery{}, &traininglist.MySQLTrainingListQuery{}, &user.MySQLUserQuery{}, &pool.MySQLPoolQuery{}, &friend.MySQLFriendQuery{}, &avatar.MySQLAvatarQuery{}, &duel.MySQLDuelQuery{}, &refreshjwt.MySQLRefreshJWTQuery{}, &resource.MySQLResourceQuery{}, &env.Config.ResourceServer, &settings, nil, env.Config.JwtSecret) + router := setup.SetupRoutes(&course.MySQLTitleQuery{}, &flashcard.MySQLFlashcardQuery{}, &subject.MySQLSubjectQuery{}, &title.MySQLTitleQuery{}, &traininglist.MySQLTrainingListQuery{}, &user.MySQLUserQuery{}, &pool.MySQLPoolQuery{}, &friend.MySQLFriendQuery{}, &avatar.MySQLAvatarQuery{}, &duel.MySQLDuelQuery{}, &refreshjwt.MySQLRefreshJWTQuery{}, &resource.MySQLResourceQuery{}, &university.MySQLUniversityQuery{}, &env.Config.ResourceServer, &settings, nil, env.Config.JwtSecret) return router, err } diff --git a/test/friend_test.go b/test/friend_test.go index 310bfe2..1d69abf 100644 --- a/test/friend_test.go +++ b/test/friend_test.go @@ -77,7 +77,7 @@ func (m *mockFriend) Delete(userID, userIDToRemove uint32) ([]schemas.InfoUserSc func Test_getFriend200(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[2]), getMockUserInfo(mockUsers[3])} @@ -101,7 +101,7 @@ func Test_getFriend200(t *testing.T) { func Test_getFriend401(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) res := httptest.NewRecorder() @@ -114,7 +114,7 @@ func Test_getFriend401(t *testing.T) { func Test_postFriend200(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[3])} @@ -152,7 +152,7 @@ func Test_postFriend200(t *testing.T) { func Test_postFriend401(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) res := httptest.NewRecorder() @@ -165,7 +165,7 @@ func Test_postFriend401(t *testing.T) { func Test_postFriend400(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[3])} @@ -192,7 +192,7 @@ func Test_postFriend400(t *testing.T) { func Test_postFriend404(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[3])} @@ -219,7 +219,7 @@ func Test_postFriend404(t *testing.T) { func Test_postFriendTwice400(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[3])} @@ -246,7 +246,7 @@ func Test_postFriendTwice400(t *testing.T) { func Test_deleteFriend200(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) expected := []schemas.InfoUserSchema{getMockUserInfo(mockUsers[3])} @@ -286,7 +286,7 @@ func Test_deleteFriend200(t *testing.T) { func Test_deleteFriend401(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) res := httptest.NewRecorder() @@ -299,7 +299,7 @@ func Test_deleteFriend401(t *testing.T) { func Test_deleteFriend404(t *testing.T) { friendRepo := &mockFriend{friends: make(map[uint32][]schemas.InfoUserSchema)} - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, friendRepo, nil, nil, newSession(), nil, nil, nil, nil, nil) friendRepo.friends[1] = []schemas.InfoUserSchema{getMockUserInfo(mockUsers[2])} diff --git a/test/pool_test.go b/test/pool_test.go index fc89246..ceeffed 100644 --- a/test/pool_test.go +++ b/test/pool_test.go @@ -31,7 +31,7 @@ func (p *mockPool) PatchUserPools(userID uint32, selection []uint32) error { } func Test_getPools(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, &mockPool{}, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, &mockPool{}, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/refreshjwt_test.go b/test/refreshjwt_test.go index 3c7d5d5..2f0f359 100644 --- a/test/refreshjwt_test.go +++ b/test/refreshjwt_test.go @@ -76,7 +76,7 @@ func (instance *mockSession) UpdateFirebaseToken(sessionID uint32, newToken stri func Test_patchRefreshJWT200(t *testing.T) { repository := newSession() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -109,7 +109,7 @@ func Test_patchRefreshJWT200(t *testing.T) { func Test_patchRefreshJWT401(t *testing.T) { // No matching session found repository := newSession() - router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, nil, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -133,7 +133,7 @@ func Test_patchRefreshJWT401(t *testing.T) { func Test_JWT440(t *testing.T) { repository := newSession() - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, repository, nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/resource_test.go b/test/resource_test.go index a413b93..f415b42 100644 --- a/test/resource_test.go +++ b/test/resource_test.go @@ -40,7 +40,7 @@ func Test_ResourceServerDirector(t *testing.T) { } func Test_getResource_500(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, &resourceServer, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, nil, &resourceServer, nil, nil) env := new(TestEnv) env.Router = router @@ -54,7 +54,7 @@ func Test_getResource_500(t *testing.T) { } func Test_getResource_404(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, &resourceServer, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, nil, &resourceServer, nil, nil) env := new(TestEnv) env.Router = router @@ -68,7 +68,7 @@ func Test_getResource_404(t *testing.T) { } func Test_getResource_400(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, &resourceServer, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), &mockResource{}, nil, &resourceServer, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/title_test.go b/test/title_test.go index 11bcffd..8a50311 100644 --- a/test/title_test.go +++ b/test/title_test.go @@ -44,7 +44,7 @@ func (mockTitle) SelectAndUpdateNew(uint32) ([]schemas.TitleSchema, error) { type mockTitleError struct{} func Test_getTitles(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -61,7 +61,7 @@ func Test_getTitles(t *testing.T) { } func Test_getAllTitles(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router diff --git a/test/user_test.go b/test/user_test.go index 93b87bb..784cf12 100644 --- a/test/user_test.go +++ b/test/user_test.go @@ -34,7 +34,7 @@ var mockUsers = map[uint32]schemas.FullUserSchema{ Level: 1, Experience: 0, Email: "", - University: "", + University: nil, Verified: true, }, 2: schemas.FullUserSchema{ @@ -51,7 +51,7 @@ var mockUsers = map[uint32]schemas.FullUserSchema{ Experience: 0, Level: 1, Email: "", - University: "", + University: nil, Verified: true, }, 3: schemas.FullUserSchema{ @@ -67,7 +67,7 @@ var mockUsers = map[uint32]schemas.FullUserSchema{ }, Experience: 0, Email: "", - University: "", + University: nil, Verified: true, }, 4: schemas.FullUserSchema{ @@ -84,7 +84,7 @@ var mockUsers = map[uint32]schemas.FullUserSchema{ Experience: 0, Level: 1, Email: "", - University: "", + University: nil, Verified: false, }, } @@ -245,7 +245,7 @@ func (m *mockUser) VerifyUser(userID uint32, email string) error { func Test_getAllUsers_200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -274,7 +274,7 @@ func Test_getAllUsers_200(t *testing.T) { func Test_getAllUsers_401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -290,7 +290,7 @@ func Test_getAllUsers_401(t *testing.T) { * GET /user/search?s= *************************/ func Test_searchForUsers_200_multipleMatchingUsernames(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -324,7 +324,7 @@ func Test_searchForUsers_200_multipleMatchingUsernames(t *testing.T) { } func Test_searchForUsers_200_singleMatchingUsername(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -355,7 +355,7 @@ func Test_searchForUsers_200_singleMatchingUsername(t *testing.T) { } func Test_searchForUsers_200_noMatchingUsernames(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -385,7 +385,7 @@ func Test_searchForUsers_200_noMatchingUsernames(t *testing.T) { } func Test_searchForUsers_400_noSearchQuery(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -404,7 +404,7 @@ func Test_searchForUsers_400_noSearchQuery(t *testing.T) { } func Test_searchForUsers_400_tooShortSearchQuery(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -425,7 +425,7 @@ func Test_searchForUsers_400_tooShortSearchQuery(t *testing.T) { } func Test_searchForUsers_401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -449,7 +449,7 @@ func Test_searchForUsers_401(t *testing.T) { func Test_getUser_200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -475,7 +475,7 @@ func Test_getUser_200(t *testing.T) { func Test_getUser_401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -493,7 +493,7 @@ func Test_getUser_401(t *testing.T) { func Test_getUserByID_200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -525,7 +525,7 @@ func Test_getUserByID_200(t *testing.T) { func Test_getUserByID_401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -539,7 +539,7 @@ func Test_getUserByID_401(t *testing.T) { func Test_getUserByID_400(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -556,7 +556,7 @@ func Test_getUserByID_400(t *testing.T) { func Test_getUserByID_404(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -577,7 +577,7 @@ func Test_getUserByID_404(t *testing.T) { func Test_patchUser_200(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -628,7 +628,7 @@ func Test_patchUser_200(t *testing.T) { func Test_patchUser_401(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router @@ -642,7 +642,7 @@ func Test_patchUser_401(t *testing.T) { func Test_patchUser_400(t *testing.T) { - router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil) + router := setup.SetupRoutes(nil, nil, nil, &mockTitle{}, nil, &mockUser{}, nil, nil, nil, nil, newSession(), nil, nil, nil, nil, nil) env := new(TestEnv) env.Router = router -- GitLab