Skip to content
This repository was archived by the owner on May 21, 2026. It is now read-only.

Commit d040a30

Browse files
Merge branch 'dev'
2 parents 086066a + 39bfcc4 commit d040a30

20 files changed

Lines changed: 277 additions & 131 deletions

AUTH_COOKIE_FIX.md

Lines changed: 0 additions & 55 deletions
This file was deleted.

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
plugins {
22
id 'java'
33
id 'war'
4-
id 'org.springframework.boot' version '3.3.13'
4+
id 'org.springframework.boot' version '3.4.11'
55
id 'io.spring.dependency-management' version '1.1.6'
66
id 'org.graalvm.buildtools.native' version '0.11.1'
77
id 'com.github.ben-manes.versions' version '0.47.0'
@@ -87,6 +87,8 @@ dependencies {
8787
implementation 'org.springframework.boot:spring-boot-starter-graphql'
8888
implementation 'org.springframework.boot:spring-boot-starter-web'
8989
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
90+
91+
implementation platform('com.squareup.okhttp3:okhttp-bom:4.12.0')
9092
implementation 'com.squareup.okhttp3:okhttp'
9193
implementation 'org.springframework.boot:spring-boot-starter-validation'
9294
implementation 'org.springframework.boot:spring-boot-starter-logging'
@@ -95,7 +97,7 @@ dependencies {
9597
implementation 'org.springframework.boot:spring-boot-starter-security'
9698
implementation 'io.jsonwebtoken:jjwt-api:0.13.0'
9799
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0'
98-
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0' // or 'io.jsonwebtoken:jjwt-gson:0.13.0' for gson
100+
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0'
99101

100102

101103
// ===== Escopos Especiais =====

src/main/java/com/espacogeek/geek/config/GraphQlCookieInterceptor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public GraphQlCookieInterceptor(JwtConfig jwtConfig) {
2626
this.jwtConfig = jwtConfig;
2727
}
2828

29+
@SuppressWarnings("null")
2930
@Override
3031
public @NonNull Mono<WebGraphQlResponse> intercept(@NonNull WebGraphQlRequest request, @NonNull Chain chain) {
3132
return chain.next(request).map(response -> {

src/main/resources/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ SPRING_MVC_CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173
55
SECURITY_JWT_ISSUER=espacogeek
66
SECURITY_JWT_EXPIRATION_MS=604800000
77
SECURITY_JWT_SECRET=your_jwt_secret_key_here
8+
SAMESITE_WHEN_SAME_SITE=Lax
9+
ALLOWED_ORIGINS=http://localhost:3000

src/main/resources/application.properties

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,35 @@ spring.threads.virtual.enabled=true
88
spring.main.allow-bean-definition-overriding=true
99
# spring.devtools.add-properties=false
1010

11-
# GraphQL configuration
12-
# GraphQL API endpoint: /api
1311
spring.graphql.path=/api
14-
# GraphiQL UI endpoint: /graphiql
12+
1513
spring.graphql.graphiql.enabled=true
1614
spring.graphql.graphiql.path=/graphiql
1715

18-
# In VSCode, I recommend: "terminal.integrated.scrollback": 100000000
19-
# logging.level.org.hibernate=DEBUG
20-
# logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
21-
# logging.level.web=debug
22-
23-
# spring.jpa.show-sql=true
24-
# spring.jpa.properties.hibernate.format_sql=true
25-
2616
spring.flyway.enabled=true
2717
spring.flyway.locations=classpath:db/migration
2818
spring.flyway.baselineOnMigrate=true
2919

3020
# ===== CORS & Cookie Security =====
3121
# Com credenciais, o origin deve ser exato (não "*"). Separe por vírgula para múltiplos.
3222
spring.mvc.cors.allowed-origins=${ALLOWED_ORIGINS:http://localhost:3000}
23+
3324
# Nome e path do cookie de autenticação
3425
security.jwt.cookie-name=EG_AUTH
3526
security.jwt.cookie-path=/
27+
3628
# Defina domain se precisar compartilhar subdomínios (ex: .seusite.com)
3729
# security.jwt.cookie-domain=
30+
3831
# SameSite quando a requisição for same-site: Lax (padrão) ou Strict
3932
security.jwt.same-site-when-same-site=${SAMESITE_WHEN_SAME_SITE:Lax}
33+
4034
# Validade do token/cookie (ms)
4135
security.jwt.expiration-ms=${JWT_EXPIRATION_MS:604800000}
36+
37+
# ! In VSCode, I recommend: "terminal.integrated.scrollback": 100000000
38+
# logging.level.org.hibernate=DEBUG
39+
# logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
40+
# logging.level.web=debug
41+
# spring.jpa.show-sql=true
42+
# spring.jpa.properties.hibernate.format_sql=true

src/main/resources/graphql/query.graphqls

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ type Query {
4141
login(email: String, password: String, deviceInfo: String): String
4242

4343
"""
44-
Get a random daily quote with artwork.
45-
Example: dailyQuoteArtwork
44+
Logout current user.
4645
"""
4746
logout: String
4847

@@ -57,4 +56,10 @@ type Query {
5756
Example: dailyQuoteArtwork
5857
"""
5958
dailyQuoteArtwork: QuoteArtwork
59+
60+
"""
61+
Get a random quote with artwork.
62+
Example: quote
63+
"""
64+
quote: QuoteArtwork
6065
}

src/test/java/com/espacogeek/geek/mutation/user/CreateUserMutationTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.junit.jupiter.api.Test;
99
import org.springframework.beans.factory.annotation.Autowired;
1010
import org.springframework.boot.test.autoconfigure.graphql.GraphQlTest;
11-
import org.springframework.boot.test.mock.mockito.MockBean;
11+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
1212
import org.springframework.graphql.test.tester.GraphQlTester;
1313
import org.springframework.test.context.ActiveProfiles;
1414

@@ -17,23 +17,30 @@
1717
import com.espacogeek.geek.models.UserModel;
1818
import com.espacogeek.geek.services.JwtTokenService;
1919
import com.espacogeek.geek.services.UserService;
20+
import com.espacogeek.geek.utils.TokenUtils;
2021

2122
@GraphQlTest(UserController.class)
2223
@ActiveProfiles("test")
24+
@SuppressWarnings("null")
2325
class CreateUserMutationTest {
2426

2527
@Autowired
2628
private GraphQlTester graphQlTester;
2729

28-
@MockBean
30+
@MockitoBean
2931
private UserService userService;
3032

31-
@MockBean
33+
@MockitoBean
3234
private JwtConfig jwtConfig;
3335

34-
@MockBean
36+
@MockitoBean
3537
private JwtTokenService jwtTokenService;
3638

39+
// Mock necessário para satisfazer a dependência do UserController
40+
@MockitoBean
41+
private TokenUtils tokenUtils;
42+
43+
3744
@Test
3845
void createUser_ValidCredentials_ShouldReturnCreatedStatus() {
3946
// Given

src/test/java/com/espacogeek/geek/mutation/user/DeleteUserMutationTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.junit.jupiter.api.Test;
1111
import org.springframework.beans.factory.annotation.Autowired;
1212
import org.springframework.boot.test.autoconfigure.graphql.GraphQlTest;
13-
import org.springframework.boot.test.mock.mockito.MockBean;
13+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
1414
import org.springframework.graphql.test.tester.GraphQlTester;
1515
import org.springframework.security.test.context.support.WithMockUser;
1616
import org.springframework.test.context.ActiveProfiles;
@@ -20,25 +20,31 @@
2020
import com.espacogeek.geek.models.UserModel;
2121
import com.espacogeek.geek.services.JwtTokenService;
2222
import com.espacogeek.geek.services.UserService;
23+
import com.espacogeek.geek.utils.TokenUtils;
2324

2425
import at.favre.lib.crypto.bcrypt.BCrypt;
2526

2627
@GraphQlTest(UserController.class)
2728
@ActiveProfiles("test")
29+
@SuppressWarnings("null")
2830
class DeleteUserMutationTest {
2931

3032
@Autowired
3133
private GraphQlTester graphQlTester;
3234

33-
@MockBean
35+
@MockitoBean
3436
private UserService userService;
3537

36-
@MockBean
38+
@MockitoBean
3739
private JwtConfig jwtConfig;
3840

39-
@MockBean
41+
@MockitoBean
4042
private JwtTokenService jwtTokenService;
4143

44+
// Necessário para satisfazer a injeção do UserController
45+
@MockitoBean
46+
private TokenUtils tokenUtils;
47+
4248
@Test
4349
@WithMockUser(authorities = {"ROLE_user", "ID_1"})
4450
void deleteUser_ValidPassword_ShouldReturnOkStatus() {

src/test/java/com/espacogeek/geek/mutation/user/EditEmailMutationTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.junit.jupiter.api.Test;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.boot.test.autoconfigure.graphql.GraphQlTest;
14-
import org.springframework.boot.test.mock.mockito.MockBean;
14+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
1515
import org.springframework.graphql.test.tester.GraphQlTester;
1616
import org.springframework.security.test.context.support.WithMockUser;
1717
import org.springframework.test.context.ActiveProfiles;
@@ -21,25 +21,31 @@
2121
import com.espacogeek.geek.models.UserModel;
2222
import com.espacogeek.geek.services.JwtTokenService;
2323
import com.espacogeek.geek.services.UserService;
24+
import com.espacogeek.geek.utils.TokenUtils;
2425

2526
import at.favre.lib.crypto.bcrypt.BCrypt;
2627

2728
@GraphQlTest(UserController.class)
2829
@ActiveProfiles("test")
30+
@SuppressWarnings("null")
2931
class EditEmailMutationTest {
3032

3133
@Autowired
3234
private GraphQlTester graphQlTester;
3335

34-
@MockBean
36+
@MockitoBean
3537
private UserService userService;
3638

37-
@MockBean
39+
@MockitoBean
3840
private JwtConfig jwtConfig;
3941

40-
@MockBean
42+
@MockitoBean
4143
private JwtTokenService jwtTokenService;
4244

45+
// Necessário para satisfazer a dependência do UserController
46+
@MockitoBean
47+
private TokenUtils tokenUtils;
48+
4349
@Test
4450
@WithMockUser(authorities = {"ROLE_user", "ID_1"})
4551
void editEmail_ValidPassword_ShouldReturnOkStatus() {

src/test/java/com/espacogeek/geek/mutation/user/EditPasswordMutationTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.junit.jupiter.api.Test;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.boot.test.autoconfigure.graphql.GraphQlTest;
14-
import org.springframework.boot.test.mock.mockito.MockBean;
14+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
1515
import org.springframework.graphql.test.tester.GraphQlTester;
1616
import org.springframework.security.test.context.support.WithMockUser;
1717
import org.springframework.test.context.ActiveProfiles;
@@ -21,25 +21,31 @@
2121
import com.espacogeek.geek.models.UserModel;
2222
import com.espacogeek.geek.services.JwtTokenService;
2323
import com.espacogeek.geek.services.UserService;
24+
import com.espacogeek.geek.utils.TokenUtils;
2425

2526
import at.favre.lib.crypto.bcrypt.BCrypt;
2627

2728
@GraphQlTest(UserController.class)
2829
@ActiveProfiles("test")
30+
@SuppressWarnings("null")
2931
class EditPasswordMutationTest {
3032

3133
@Autowired
3234
private GraphQlTester graphQlTester;
3335

34-
@MockBean
36+
@MockitoBean
3537
private UserService userService;
3638

37-
@MockBean
39+
@MockitoBean
3840
private JwtConfig jwtConfig;
3941

40-
@MockBean
42+
@MockitoBean
4143
private JwtTokenService jwtTokenService;
4244

45+
// Necessário para satisfazer a dependência do UserController
46+
@MockitoBean
47+
private TokenUtils tokenUtils;
48+
4349
@Test
4450
@WithMockUser(authorities = {"ROLE_user", "ID_1"})
4551
void editPassword_ValidPassword_ShouldReturnOkStatus() {

0 commit comments

Comments
 (0)