@@ -13,18 +13,27 @@ import (
1313 "github.com/capyrpi/api/internal/config"
1414 "github.com/capyrpi/api/internal/database"
1515 "github.com/capyrpi/api/internal/handler"
16+ "github.com/capyrpi/api/internal/middleware"
1617 "github.com/capyrpi/api/internal/router"
1718 "github.com/go-chi/chi/v5"
19+ "github.com/golang-jwt/jwt/v5"
20+ "github.com/jackc/pgx/v5/pgtype"
1821 "github.com/jackc/pgx/v5/pgxpool"
1922 "github.com/testcontainers/testcontainers-go"
2023 "github.com/testcontainers/testcontainers-go/modules/postgres"
2124 "github.com/testcontainers/testcontainers-go/wait"
2225)
2326
2427var (
25- benchDB * pgxpool.Pool
26- benchRouter chi.Router
27- benchServer * httptest.Server
28+ benchDB * pgxpool.Pool
29+ benchRouter chi.Router
30+ benchServer * httptest.Server
31+ benchQueries * database.Queries
32+ benchJWTToken string
33+ benchUserID string
34+ benchOrgID string
35+ benchEventID string
36+ benchJWTSecret string = "bench-secret"
2837)
2938
3039func TestMain (m * testing.M ) {
@@ -73,7 +82,8 @@ func TestMain(m *testing.M) {
7382 log .Fatalf ("failed to connect to database: %v" , err )
7483 }
7584
76- queries := database .New (benchDB )
85+ benchQueries = database .New (benchDB )
86+ setupTestData (ctx )
7787
7888 cfg := & config.Config {
7989 Env : "bench" ,
@@ -95,8 +105,8 @@ func TestMain(m *testing.M) {
95105 },
96106 }
97107
98- h := handler .New (queries , cfg )
99- benchRouter = router .New (h , queries , cfg .JWT .Secret , []string {"*" })
108+ h := handler .New (benchQueries , cfg )
109+ benchRouter = router .New (h , benchQueries , cfg .JWT .Secret , []string {"*" })
100110
101111 benchServer = httptest .NewServer (benchRouter )
102112 defer benchServer .Close ()
@@ -106,3 +116,55 @@ func TestMain(m *testing.M) {
106116
107117 os .Exit (code )
108118}
119+
120+ func setupTestData (ctx context.Context ) {
121+ user , err := benchQueries .CreateUser (ctx , database.CreateUserParams {
122+ FirstName : "Bench" ,
123+ LastName : "User" ,
124+ PersonalEmail : pgtype.Text {String : "bench@example.com" , Valid : true },
125+ Role : database.NullUserRole {UserRole : database .UserRoleStudent , Valid : true },
126+ })
127+ if err != nil {
128+ log .Fatalf ("failed to create user: %v" , err )
129+ }
130+ benchUserID = user .Uid .String ()
131+
132+ org , err := benchQueries .CreateOrganization (ctx , "Bench Org" )
133+ if err != nil {
134+ log .Fatalf ("failed to create organization: %v" , err )
135+ }
136+ benchOrgID = org .Oid .String ()
137+
138+ event , err := benchQueries .CreateEvent (ctx , database.CreateEventParams {
139+ Location : pgtype.Text {String : "Bench Event" , Valid : true },
140+ EventTime : pgtype.Timestamp {Time : time .Now ().Add (24 * time .Hour ), Valid : true },
141+ Description : pgtype.Text {String : "Benchmark organization" , Valid : true },
142+ })
143+ if err != nil {
144+ log .Fatalf ("failed to create event: %v" , err )
145+ }
146+ benchEventID = event .Eid .String ()
147+
148+ err = benchQueries .AddEventHost (ctx , database.AddEventHostParams {
149+ Eid : event .Eid ,
150+ Oid : org .Oid ,
151+ })
152+ if err != nil {
153+ log .Fatalf ("failed to add event host: %v" , err )
154+ }
155+
156+ claims := middleware.UserClaims {
157+ UserID : benchUserID ,
158+ Email : "bench@example.com" ,
159+ Role : "student" ,
160+ RegisteredClaims : jwt.RegisteredClaims {
161+ ExpiresAt : jwt .NewNumericDate (time .Now ().Add (24 * time .Hour )),
162+ IssuedAt : jwt .NewNumericDate (time .Now ()),
163+ },
164+ }
165+ token := jwt .NewWithClaims (jwt .SigningMethodHS256 , claims )
166+ benchJWTToken , err = token .SignedString ([]byte (benchJWTSecret ))
167+ if err != nil {
168+ log .Fatalf ("failed to generate token: %v" , err )
169+ }
170+ }
0 commit comments