Skip to content
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
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: ci pipeline

on:
pull_request:
branches:
- dev
- main
paths-ignore:
- 'README.md'

jobs:
ci:
runs-on: ubuntu-latest

steps:
- name: checkout code
uses: actions/checkout@v4

- name: set up jdk 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: set up gradle
uses: gradle/actions/setup-gradle@v3

- name: grant permission to gradlew
run: chmod +x gradlew

- name: test for dev
if: github.event.pull_request.base.ref == 'dev'
run: ./gradlew test

- name: test for main
if: github.event.pull_request.base.ref == 'main'
run: ./gradlew clean build
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar

!**/src/main/**/build/
!**/src/test/**/build/

Expand Down Expand Up @@ -182,7 +182,9 @@ replay_pid*

.DS_Store

src/main/resources/application-dev.properties
src/main/resources/application-prod.properties

loki/data/

!**/gradle/wrapper/gradle-wrapper.jar
!**/gradle/wrapper/gradle-wrapper.properties
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ dependencies {
// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'org.testcontainers:testcontainers:1.19.3'
testImplementation 'org.testcontainers:junit-jupiter:1.19.3'
testImplementation 'org.testcontainers:mysql'

// lombok
compileOnly 'org.projectlombok:lombok'
Expand Down
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
12 changes: 4 additions & 8 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion promtail/positions/positions.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
positions:
/logs/app.log: "5166"
/logs/app.log: "5165"
/var/log/alternatives.log: "4682"
/var/log/bootstrap.log: "61237"
/var/log/dpkg.log: "171709"
1 change: 1 addition & 0 deletions src/main/java/knu_chatbot/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class Member extends DateTimeEntity {

private String nickname;

@Builder.Default
private int questionCount = 0;

@OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
Expand Down
7 changes: 7 additions & 0 deletions src/main/resources/application-dev.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=knu-chatbot_user
MYSQL_PASSWORD=knu-chatbot123
MYSQL_DATABASE=knu-chatbot

DISCORD_WEBHOOK_URL=discord_webhook_url
3 changes: 2 additions & 1 deletion src/test/java/knu_chatbot/KnuChatbotApplicationTests.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package knu_chatbot;

import knu_chatbot.config.WithContainerTest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class KnuChatbotApplicationTests {
class KnuChatbotApplicationTests extends WithContainerTest {

@Test
void contextLoads() {
Expand Down
21 changes: 21 additions & 0 deletions src/test/java/knu_chatbot/config/WithContainerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package knu_chatbot.config;

import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.MySQLContainer;

public class WithContainerTest {

protected static MySQLContainer mySQLContainer = new MySQLContainer("mysql:8");

static {
mySQLContainer.start();
}

@DynamicPropertySource
static void properties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", mySQLContainer::getJdbcUrl);
registry.add("spring.datasource.username", mySQLContainer::getUsername);
registry.add("spring.datasource.password", mySQLContainer::getPassword);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package knu_chatbot.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.core.instrument.MeterRegistry;
import knu_chatbot.controller.request.UpdateHistoryNameRequest;
import knu_chatbot.controller.response.AnswerResponse;
import knu_chatbot.controller.response.HistoryResponse;
Expand All @@ -10,6 +11,7 @@
import knu_chatbot.exception.KnuChatbotException;
import knu_chatbot.service.HistoryService;
import knu_chatbot.service.request.UpdateHistoryNameServiceRequest;
import knu_chatbot.util.DiscordClient;
import knu_chatbot.util.SessionConst;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -39,6 +41,12 @@ class HistoryControllerTest {
@Autowired
private ObjectMapper objectMapper;

@MockitoBean
DiscordClient discordClient;

@MockitoBean
MeterRegistry meterRegistry;

@MockitoBean
private HistoryService historyService;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package knu_chatbot.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.core.instrument.MeterRegistry;
import knu_chatbot.controller.request.MemberEmailCheckRequest;
import knu_chatbot.controller.request.MemberLoginRequest;
import knu_chatbot.controller.request.MemberSignupRequest;
Expand All @@ -9,6 +10,7 @@
import knu_chatbot.service.request.MemberEmailCheckServiceRequest;
import knu_chatbot.service.request.MemberLoginServiceRequest;
import knu_chatbot.service.response.MemberResponse;
import knu_chatbot.util.DiscordClient;
import knu_chatbot.util.SessionConst;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -37,6 +39,12 @@ class MemberControllerTest {
@Autowired
private ObjectMapper objectMapper;

@MockitoBean
DiscordClient discordClient;

@MockitoBean
MeterRegistry meterRegistry;

@MockitoBean
private MemberService memberService;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package knu_chatbot.repository;

import knu_chatbot.config.WithContainerTest;
import knu_chatbot.entity.History;
import knu_chatbot.entity.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import java.util.ArrayList;
Expand All @@ -13,7 +15,8 @@
import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
class HistoryRepositoryTest {
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class HistoryRepositoryTest extends WithContainerTest {

@Autowired
private MemberRepository memberRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package knu_chatbot.repository;

import knu_chatbot.config.WithContainerTest;
import knu_chatbot.entity.History;
import knu_chatbot.entity.Member;
import knu_chatbot.entity.Question;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
class MemberRepositoryTest {
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class MemberRepositoryTest extends WithContainerTest {

@Autowired
private MemberRepository memberRepository;
Expand Down
5 changes: 3 additions & 2 deletions src/test/java/knu_chatbot/service/HistoryServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package knu_chatbot.service;

import jakarta.persistence.EntityManager;
import knu_chatbot.config.WithContainerTest;
import knu_chatbot.controller.response.HistoryResponse;
import knu_chatbot.controller.response.QuestionAndAnswerResponse;
import knu_chatbot.entity.*;
Expand All @@ -20,9 +21,9 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;

@Transactional
@SpringBootTest
class HistoryServiceTest {
@Transactional
class HistoryServiceTest extends WithContainerTest {

@Autowired
HistoryService historyService;
Expand Down
23 changes: 5 additions & 18 deletions src/test/java/knu_chatbot/service/MemberServiceTest.java
Original file line number Diff line number Diff line change
@@ -1,49 +1,36 @@
package knu_chatbot.service;

import knu_chatbot.config.WithContainerTest;
import knu_chatbot.entity.History;
import knu_chatbot.entity.Member;
import knu_chatbot.entity.Question;
import knu_chatbot.exception.KnuChatbotException;
import knu_chatbot.repository.HistoryRepository;
import knu_chatbot.repository.MemberRepository;
import knu_chatbot.repository.QuestionRepository;
import knu_chatbot.service.request.MemberEmailCheckServiceRequest;
import knu_chatbot.service.request.MemberLoginServiceRequest;
import knu_chatbot.service.request.MemberSignupServiceRequest;
import knu_chatbot.service.response.MemberResponse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
class MemberServiceTest {
@Transactional
class MemberServiceTest extends WithContainerTest {

@Autowired
private MemberService memberService;

@Autowired
private MemberRepository memberRepository;

@Autowired
private QuestionRepository questionRepository;

@Autowired
private HistoryRepository historyRepository;

@AfterEach
void tearDown() {
questionRepository.deleteAllInBatch();
historyRepository.deleteAllInBatch();
memberRepository.deleteAllInBatch();
}

@DisplayName("이미 존재하는 이메일 확인 시 예외가 발생한다.")
@Test
void emailCheckTest() {
Expand Down Expand Up @@ -201,7 +188,7 @@ void getMyInfoWithExistMemberId() {
// then
assertThat(myInfo).isNotNull()
.extracting("email", "questionCount")
.contains(email, 1000);
.contains(email, 0);
}

@DisplayName("계정 탈퇴시 멤버 정보가 삭제되어야 한다.")
Expand Down
Loading
Loading