Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#82/config #94

Merged
merged 2 commits into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.syncd.application.port.out.openai.ChatGPTPort;
import com.syncd.configs.ChatGPTConfig;
import com.syncd.dto.ChatRequestDto;
import com.syncd.dto.MakeUserStoryResponseDto;
import com.syncd.dto.OpenAIToken;
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/syncd/application/service/LoginService.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,13 @@ private String getAccessToken(String authorizationCode, String registrationId, S
System.out.print(tokenUri);

ResponseEntity<JsonNode> responseNode = restTemplate.exchange(tokenUri, HttpMethod.POST, entity, JsonNode.class);
// if (responseNode.getStatusCode() != HttpStatus.OK) {
// throw new RuntimeException("Failed to get access token");
// }
JsonNode accessTokenNode = responseNode.getBody();
// if (accessTokenNode == null || !accessTokenNode.has("access_token")) {
// throw new RuntimeException("Access token is missing in the response");
// }
return accessTokenNode.get("access_token").asText();
}
private JsonNode getUserResource(String accessToken, String registrationId) {
Expand Down
28 changes: 16 additions & 12 deletions src/main/java/com/syncd/application/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,46 @@

import com.syncd.application.port.in.GetAllRoomsByUserIdUsecase;
import com.syncd.application.port.in.GetUserInfoUsecase;
import com.syncd.application.port.in.RegitsterUserUsecase;
//import com.syncd.application.port.in.RegitsterUserUsecase;
import com.syncd.application.port.out.autentication.AuthenticationPort;
import com.syncd.application.port.out.persistence.user.ReadUserPort;
import com.syncd.application.port.out.persistence.user.WriteUserPort;
import com.syncd.domain.user.User;
import com.syncd.dto.TokenDto;
import com.syncd.dto.UserForTokenDto;
//import com.syncd.dto.TokenDto;
//import com.syncd.dto.UserForTokenDto;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Primary;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;


@Service
@Primary
@RequiredArgsConstructor
public class UserService implements RegitsterUserUsecase, GetUserInfoUsecase {
public class UserService implements GetUserInfoUsecase {
private final ReadUserPort readUserPort;
private final WriteUserPort writeUserPort;

private final AuthenticationPort authenticationPort;

private final GetAllRoomsByUserIdUsecase getAllRoomsByUserIdUsecase;

@Override
public RegisterUserResponseDto registerUser(RegisterUserRequestDto registerDto){
String userId = writeUserPort.createUser(registerDto.name(), registerDto.email(),"").value();
TokenDto tokens = authenticationPort.GetJwtTokens(new UserForTokenDto(userId));
return new RegisterUserResponseDto(tokens.accessToken(), tokens.refreshToken());
}
// @Override
// public RegisterUserResponseDto registerUser(RegisterUserRequestDto registerDto){
// String userId = writeUserPort.createUser(registerDto.name(), registerDto.email(),"").value();
// TokenDto tokens = authenticationPort.GetJwtTokens(new UserForTokenDto(userId));
// return new RegisterUserResponseDto(tokens.accessToken(), tokens.refreshToken());
// }

@Override
public GetUserInfoResponseDto getUserInfo(String userId) {
User user = readUserPort.findByUserId(userId);

if (user == null) {
throw new RuntimeException("User not found with ID: " + userId);
}

GetAllRoomsByUserIdUsecase.GetAllRoomsByUserIdResponseDto projects = getAllRoomsByUserIdUsecase.getAllRoomsByUserId(userId);

return new GetUserInfoResponseDto(userId, user.getName(), user.getProfileImg(), user.getEmail(), projects.projects());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.out.liveblock;
package com.syncd.configs;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.out.openai;
package com.syncd.configs;


import org.springframework.beans.factory.annotation.Value;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.out.persistence;
package com.syncd.configs;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.out.s3;
package com.syncd.configs;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.in.web;
package com.syncd.configs;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.syncd.adapter.in.web;
package com.syncd.configs;

import com.syncd.application.port.in.JwtAuthenticationFilterUsecase;
import com.syncd.application.port.in.ResolveTokenUsecase;
Expand Down
65 changes: 65 additions & 0 deletions src/test/java/application/service/LoginServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package application.service;

import com.syncd.application.port.in.GenerateTokenUsecase;
import com.syncd.application.port.out.persistence.user.ReadUserPort;
import com.syncd.application.port.out.persistence.user.WriteUserPort;
import com.syncd.application.service.LoginService;
import com.syncd.dto.TokenDto;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.web.client.RestTemplate;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

public class LoginServiceTest {

@Mock
private RestTemplate restTemplate;

@Mock
private WriteUserPort writeUserPort;

@Mock
private GenerateTokenUsecase generateTokenUsecase;

@Mock
private ReadUserPort readUserPort;

@InjectMocks
private LoginService loginService;

@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
}

@Test
void testSocialLoginWithGoogleRegistrationId() {
// Given
String authorizationCode = "sample_authorization_code";
String registrationId = "google";

// Mocking the behavior of restTemplate.exchange(...) method
// Here you should mock the behavior to return a proper response entity
// For simplicity, let's assume it returns a valid response node
// when calling with the given parameters
// For actual implementation, you should define the behavior according to your needs
// For example:
// when(restTemplate.exchange(anyString(), any(), any(), eq(JsonNode.class)))
// .thenReturn(new ResponseEntity<>(mockResponseNode, HttpStatus.OK));

// When
TokenDto tokenDto = loginService.socialLogin(authorizationCode, registrationId);

// Then
// Assert that the returned tokenDto is not null
// Add more assertions based on your actual implementation
// For example, you can assert that the generated access token is not empty
assertEquals("google", registrationId);
// Add more assertions based on your actual implementation
}
}
85 changes: 85 additions & 0 deletions src/test/java/application/service/UserServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package application.service;

import com.syncd.application.port.in.GetAllRoomsByUserIdUsecase;
import com.syncd.application.port.out.persistence.user.ReadUserPort;
import com.syncd.domain.user.User;
import com.syncd.application.service.UserService;
import com.syncd.enums.Role;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;

public class UserServiceTest {

@Mock
private ReadUserPort readUserPort;

@Mock
private GetAllRoomsByUserIdUsecase getAllRoomsByUserIdUsecase;

@InjectMocks
private UserService userService;

@BeforeEach
public void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
public void testGetUserInfo_UserNotFound() {
// Given
String userId = "user123";

// When
when(readUserPort.findByUserId(userId)).thenReturn(null);

// Then
assertThrows(RuntimeException.class, () -> {
userService.getUserInfo(userId);
});
}

@Test
public void testGetUserInfo() {
// Given
String userId = "user123";
User user = new User();
user.setId(userId);
user.setName("syncd");
user.setEmail("[email protected]");
user.setProfileImg("profile.jpg");

GetAllRoomsByUserIdUsecase.ProjectForGetAllInfoAboutRoomsByUserIdResponseDto project1 =
new GetAllRoomsByUserIdUsecase.ProjectForGetAllInfoAboutRoomsByUserIdResponseDto(
"project1", "1", "description1", Role.HOST, List.of("[email protected]"), 0, "2024-05-19");
GetAllRoomsByUserIdUsecase.ProjectForGetAllInfoAboutRoomsByUserIdResponseDto project2 =
new GetAllRoomsByUserIdUsecase.ProjectForGetAllInfoAboutRoomsByUserIdResponseDto(
"project2", "2", "description2", Role.MEMBER, List.of("[email protected]"), 50, "2024-05-20");
GetAllRoomsByUserIdUsecase.GetAllRoomsByUserIdResponseDto projects =
new GetAllRoomsByUserIdUsecase.GetAllRoomsByUserIdResponseDto(userId, List.of(project1, project2));

// When
when(readUserPort.findByUserId(userId)).thenReturn(user);
when(getAllRoomsByUserIdUsecase.getAllRoomsByUserId(userId)).thenReturn(projects);

// Act
UserService.GetUserInfoResponseDto response = userService.getUserInfo(userId);

// Then
assertEquals(userId, response.userId());
assertEquals("syncd", response.name());
assertEquals("[email protected]", response.email());
assertEquals("profile.jpg", response.img());
assertEquals(2, response.projects().size());
assertEquals("project1", response.projects().get(0).name());
assertEquals("project2", response.projects().get(1).name());
}
}
52 changes: 52 additions & 0 deletions src/test/java/domain/user/UserInProjectTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package domain.user;

import com.syncd.domain.user.User;
import com.syncd.enums.Role;
import com.syncd.domain.project.UserInProject;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class UserInProjectTest {

@Test
public void testUserInProjectsFromUsers() {
// 호스트 사용자 ID
String hostId = "host123";

// 멤버 사용자 리스트 생성
User user1 = new User();
user1.setId("1");
user1.setName("donggni");
user1.setEmail("[email protected]");
user1.setProfileImg("profile1.jpg");

User user2 = new User();
user2.setId("2");
user2.setName("jalju");
user2.setEmail("[email protected]");
user2.setProfileImg("profile2.jpg");

List<User> members = Arrays.asList(user1, user2);

// UserInProject 리스트 생성
List<UserInProject> userInProjects = UserInProject.userInProjectsFromUsers(hostId, members);

// 예상 결과
assertEquals(3, userInProjects.size());

// 호스트 검증
assertEquals("host123", userInProjects.get(0).getUserId());
assertEquals(Role.HOST, userInProjects.get(0).getRole());

// 멤버 검증
assertEquals("1", userInProjects.get(1).getUserId());
assertEquals(Role.MEMBER, userInProjects.get(1).getRole());

assertEquals("2", userInProjects.get(2).getUserId());
assertEquals(Role.MEMBER, userInProjects.get(2).getRole());
}
}

Loading