Skip to content

Commit dc75d3d

Browse files
ci/cd : add first unit test codes
1 parent 8298e55 commit dc75d3d

File tree

7 files changed

+247
-15
lines changed

7 files changed

+247
-15
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,9 @@ public class CommonDataSourceConfiguration {
187187
## Running this App with Docker
188188
* Use the following module for Blue-Green deployment:
189189
* https://github.com/patternknife/docker-blue-green-runner
190-
* The above module references this app's Dockerfile and the entrypoint script in the .docker folder.
190+
* The above module references this app's Dockerfile and the entrypoint script in the .docker folder.
191+
192+
## Contribution Guide
193+
* You can create a pull request directly to the main branch.
194+
* Integration tests in the client folder are sufficient for now, but you may add more if necessary.
195+
* There is a lack of unit tests, so contributions to unit test code are welcome, which will help improve the overall codebase.

pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
6060
<maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
6161
<maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
6262
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
63+
<mockito.version>5.2.0</mockito.version>
6364
</properties>
6465

6566
<dependencyManagement>
@@ -194,6 +195,13 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
194195
<scope>test</scope>
195196
</dependency>
196197

198+
<dependency>
199+
<groupId>org.mockito</groupId>
200+
<artifactId>mockito-inline</artifactId>
201+
<version>${mockito.version}</version>
202+
<scope>test</scope>
203+
</dependency>
204+
197205

198206
<dependency>
199207
<groupId>javax.annotation</groupId>

src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/serivce/CommonOAuth2AuthorizationSaver.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.patternknife.securityhelper.oauth2.api.config.security.serivce;
22

33
import jakarta.annotation.Nullable;
4+
import jakarta.validation.constraints.NotNull;
45
import org.springframework.security.core.userdetails.UserDetails;
56
import org.springframework.security.oauth2.core.AuthorizationGrantType;
67
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
@@ -12,8 +13,8 @@
1213
* */
1314
public interface CommonOAuth2AuthorizationSaver {
1415

15-
OAuth2Authorization save(UserDetails userDetails, AuthorizationGrantType authorizationGrantType,
16-
String clientId, Map<String, Object> additionalParameters,
17-
@Nullable Map<String, Object> modifiableAdditionalParameters);
16+
@NotNull OAuth2Authorization save(UserDetails userDetails, AuthorizationGrantType authorizationGrantType,
17+
String clientId, Map<String, Object> additionalParameters,
18+
@Nullable Map<String, Object> modifiableAdditionalParameters);
1819

1920
}

src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/serivce/CommonOAuth2AuthorizationSaverImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.github.patternknife.securityhelper.oauth2.api.config.security.serivce.authentication.OAuth2AuthorizationBuildingService;
88
import io.github.patternknife.securityhelper.oauth2.api.config.security.serivce.persistence.authorization.OAuth2AuthorizationServiceImpl;
99

10+
import jakarta.validation.constraints.NotNull;
1011
import lombok.RequiredArgsConstructor;
1112
import org.slf4j.Logger;
1213
import org.slf4j.LoggerFactory;
@@ -31,8 +32,8 @@ public class CommonOAuth2AuthorizationSaverImpl implements CommonOAuth2Authoriza
3132
private final OAuth2AuthorizationServiceImpl oAuth2AuthorizationService;
3233

3334
@Override
34-
public OAuth2Authorization save(UserDetails userDetails, AuthorizationGrantType authorizationGrantType, String clientId,
35-
Map<String, Object> additionalParameters, Map<String, Object> modifiableAdditionalParameters) {
35+
public @NotNull OAuth2Authorization save(UserDetails userDetails, AuthorizationGrantType authorizationGrantType, String clientId,
36+
Map<String, Object> additionalParameters, Map<String, Object> modifiableAdditionalParameters) {
3637

3738
OAuth2Authorization oAuth2Authorization = oAuth2AuthorizationService.findByUserNameAndClientIdAndAppToken(userDetails.getUsername(), clientId, (String) additionalParameters.get(KnifeHttpHeaders.APP_TOKEN));
3839
if(authorizationGrantType.getValue().equals(AuthorizationGrantType.PASSWORD.getValue())){

src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/serivce/authentication/OAuth2AuthorizationBuildingServiceImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ private OAuth2Authorization build(String clientId, UserDetails userDetails,
4242

4343
if(AuthorizationServerContextHolder.getContext() == null){
4444

45+
// If you use "api/v1/traditional-oauth/token", "AuthorizationServerContextHolder.getContext()" is null,
46+
// while you use "/oauth2/token", "AuthorizationServerContextHolder.getContext()" is NOT null.
4547
AuthorizationServerContext authorizationServerContext = new AuthorizationServerContext() {
4648
@Override
4749
public String getIssuer() {

src/main/java/io/github/patternknife/securityhelper/oauth2/api/domain/traditionaloauth/service/TraditionalOauthService.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.github.patternknife.securityhelper.oauth2.api.domain.traditionaloauth.bo.BasicTokenResolver;
1616
import io.github.patternknife.securityhelper.oauth2.api.domain.traditionaloauth.dto.SpringSecurityTraditionalOauthDTO;
1717
import jakarta.servlet.http.HttpServletRequest;
18+
import jakarta.validation.constraints.NotNull;
1819
import org.slf4j.Logger;
1920
import org.slf4j.LoggerFactory;
2021
import org.springframework.security.core.userdetails.UserDetails;
@@ -46,7 +47,7 @@ public class TraditionalOauthService {
4647

4748
private final ConditionalDetailsService conditionalDetailsService;
4849

49-
private final CommonOAuth2AuthorizationSaver commonOAuth2AuthorizationCycle;
50+
private final CommonOAuth2AuthorizationSaver commonOAuth2AuthorizationSaver;
5051
private final DefaultOauth2AuthenticationHashCheckService oauth2AuthenticationHashCheckService;
5152

5253

@@ -55,15 +56,15 @@ public class TraditionalOauthService {
5556
public TraditionalOauthService(RegisteredClientRepositoryImpl registeredClientRepository,
5657
OAuth2AuthorizationServiceImpl authorizationService,
5758
ConditionalDetailsService conditionalDetailsService,
58-
CommonOAuth2AuthorizationSaver commonOAuth2AuthorizationCycle,
59+
CommonOAuth2AuthorizationSaver commonOAuth2AuthorizationSaver,
5960
DefaultOauth2AuthenticationHashCheckService oauth2AuthenticationHashCheckService,
6061
ISecurityUserExceptionMessageService iSecurityUserExceptionMessageService) {
6162

6263
this.registeredClientRepository = registeredClientRepository;
6364
this.authorizationService = authorizationService;
6465
this.conditionalDetailsService = conditionalDetailsService;
6566

66-
this.commonOAuth2AuthorizationCycle = commonOAuth2AuthorizationCycle;
67+
this.commonOAuth2AuthorizationSaver = commonOAuth2AuthorizationSaver;
6768
this.oauth2AuthenticationHashCheckService = oauth2AuthenticationHashCheckService;
6869

6970
this.iSecurityUserExceptionMessageService = iSecurityUserExceptionMessageService;
@@ -76,18 +77,19 @@ public SpringSecurityTraditionalOauthDTO.TokenResponse createAccessToken(SpringS
7677
try {
7778
BasicTokenResolver.BasicCredentials basicCredentials = BasicTokenResolver.parse(authorizationHeader).orElseThrow(() -> new KnifeOauth2AuthenticationException(ErrorMessages.builder().message("Header parsing error (header : " + authorizationHeader).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_CLIENT_ID_SECRET)).build()));
7879

79-
RegisteredClient registeredClient = registeredClientRepository.findByClientId(basicCredentials.getClientId());
80+
HttpServletRequest request =
81+
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
82+
83+
@NotNull RegisteredClient registeredClient = registeredClientRepository.findByClientId(basicCredentials.getClientId());
8084

8185
oauth2AuthenticationHashCheckService.validateClientCredentials(basicCredentials.getClientSecret(), registeredClient);
8286

83-
UserDetails userDetails = conditionalDetailsService.loadUserByUsername(accessTokenRequest.getUsername(), basicCredentials.getClientId());
87+
@NotNull UserDetails userDetails = conditionalDetailsService.loadUserByUsername(accessTokenRequest.getUsername(), basicCredentials.getClientId());
8488

8589
oauth2AuthenticationHashCheckService.validateUsernamePassword(accessTokenRequest.getPassword(), userDetails);
8690

87-
HttpServletRequest request =
88-
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
8991

90-
OAuth2Authorization oAuth2Authorization = commonOAuth2AuthorizationCycle.save(userDetails,
92+
@NotNull OAuth2Authorization oAuth2Authorization = commonOAuth2AuthorizationSaver.save(userDetails,
9193
new AuthorizationGrantType(accessTokenRequest.getGrant_type()), basicCredentials.getClientId(), RequestOAuth2Distiller.getTokenUsingSecurityAdditionalParameters(request), null);
9294

9395
Instant now = Instant.now();
@@ -127,7 +129,7 @@ public SpringSecurityTraditionalOauthDTO.TokenResponse refreshAccessToken(Spring
127129
Map<String, Object> modifiableAdditionalParameters = new HashMap<>();
128130
modifiableAdditionalParameters.put("refresh_token", refreshTokenRequest.getRefresh_token());
129131

130-
oAuth2Authorization = commonOAuth2AuthorizationCycle.save(userDetails,
132+
oAuth2Authorization = commonOAuth2AuthorizationSaver.save(userDetails,
131133
new AuthorizationGrantType(refreshTokenRequest.getGrant_type()),
132134
basicCredentials.getClientId(), oAuth2Authorization.getAttributes(), modifiableAdditionalParameters);
133135

0 commit comments

Comments
 (0)