Skip to content

Commit

Permalink
Merge pull request #35 from dnd-side-project/feat/ddd
Browse files Browse the repository at this point in the history
통합 테스트 추가
  • Loading branch information
haeyonghahn committed Jan 29, 2024
2 parents a0a6562 + d9787f1 commit f526467
Show file tree
Hide file tree
Showing 22 changed files with 351 additions and 50 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@ out/
/.nb-gradle/

### VS Code ###
.vscode/
.vscode/

### local environment ###
infra/local/dbdata
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
// Test
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mockito:mockito-core:3.+'
testImplementation "org.testcontainers:testcontainers:1.19.0"
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
}
Expand Down
9 changes: 9 additions & 0 deletions db/flyway.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
flyway.url=${FLYWAY_DB_URL}
flyway.user=${FLYWAY_DB_USER}
flyway.password=${FLYWAY_DB_PASSWORD}

flyway.encoding=UTF-8
flyway.outOfOrder=true
flyway.validateOnMigrate=true
flyway.connectRetries=60
flyway.connectRetriesInterval=5
43 changes: 43 additions & 0 deletions db/migration/V0__init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
CREATE TABLE IF NOT EXISTS `member` (
`member_id` varchar(255) NOT NULL,
`emails` varchar(255) DEFAULT NULL,
`interests` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`oauth_id` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`user_role` varchar(255) DEFAULT NULL,
PRIMARY KEY (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `oauth` (
`oauth_id` varchar(255) NOT NULL,
`email` varchar(255) DEFAULT NULL,
`image_url` varchar(255) DEFAULT NULL,
`provider` varchar(255) DEFAULT NULL,
PRIMARY KEY (`oauth_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `record` (
`record_number` varchar(255) NOT NULL,
`place_latitude` double DEFAULT NULL,
`place_longitude` double DEFAULT NULL,
`place_title` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`record_date` datetime(6) DEFAULT NULL,
`record_score` bigint(20) DEFAULT NULL,
`recorder_id` varchar(255) DEFAULT NULL,
`recorder_name` varchar(255) DEFAULT NULL,
`state` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`record_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `image` (
`image_id` bigint(20) NOT NULL AUTO_INCREMENT,
`image_path` varchar(255) DEFAULT NULL,
`upload_time` datetime(6) DEFAULT NULL,
`record_number` varchar(255) DEFAULT NULL,
`list_idx` int(11) DEFAULT NULL,
PRIMARY KEY (`image_id`),
FOREIGN KEY (`record_number`) REFERENCES `record` (`record_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
23 changes: 23 additions & 0 deletions infra/local/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
version: "3.8"

services:
local-db:
image: mysql:8.0
environment:
MYSQL_DATABASE: gooding
MYSQL_ROOT_PASSWORD: test1357
ports:
- 3306:3306
volumes:
- ./dbdata:/var/lib/mysql
local-db-migrate:
image: flyway/flyway:7
restart: always
environment:
- FLYWAY_DB_URL=jdbc:mysql://local-db/gooding
- FLYWAY_DB_USER=root
- FLYWAY_DB_PASSWORD=test1357
command: migrate
volumes:
- ../../db/flyway.conf:/flyway/conf/flyway.conf
- ../../db/migration:/flyway/sql
21 changes: 21 additions & 0 deletions infra/test/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: "3.8"

services:
local-db:
image: mysql:8.0
environment:
MYSQL_DATABASE: gooding
MYSQL_ROOT_PASSWORD: test1357
ports:
- 3306
local-db-migrate:
image: flyway/flyway:7
restart: always
environment:
- FLYWAY_DB_URL=jdbc:mysql://local-db/gooding
- FLYWAY_DB_USER=root
- FLYWAY_DB_PASSWORD=test1357
command: migrate
volumes:
- ../../db/flyway.conf:/flyway/conf/flyway.conf
- ../../db/migration:/flyway/sql
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ public String getId() {
return id;
}

public static OAuthId of(String id) {
return new OAuthId(id);
}

@Override
public boolean equals(Object o) {
if (this == o)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@Service
public class CreateMemberService {

public MemberRepository memberRepository;
private MemberRepository memberRepository;

public CreateMemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
Expand All @@ -21,7 +21,7 @@ public CreateMemberService(MemberRepository memberRepository) {
public void createMember(String id, String oAuthId) {
MemberId memberId = MemberId.of(id);
Member member = new Member(memberId, null, null, null,
UserRole.ROLE_USER.name(), new OAuthId(oAuthId));
UserRole.ROLE_USER.name(), new OAuthId(oAuthId));
save(member);
}

Expand Down
12 changes: 11 additions & 1 deletion src/main/java/com/dnd/gooding/user/command/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@
import java.util.Random;
import java.util.Set;

import javax.persistence.*;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Embedded;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

import com.dnd.gooding.common.jpa.EmailSetConverter;
import com.dnd.gooding.common.jpa.InterestConverter;
Expand All @@ -13,6 +20,8 @@
import com.dnd.gooding.common.model.InterestSet;
import com.dnd.gooding.oauth.command.domain.OAuthId;

import lombok.Builder;

@Entity
@Table(name = "member")
@Access(AccessType.FIELD)
Expand All @@ -35,6 +44,7 @@ public class Member {
protected Member() {
}

@Builder
public Member(MemberId id, String name, EmailSet emails,
InterestSet interests, String userRole, OAuthId oAuthId) {
this.id = id;
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/dnd/gooding/user/query/dto/MemberData.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import com.dnd.gooding.common.model.InterestSet;
import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.Builder;

@Entity
@Immutable
@Table(name = "member")
Expand Down Expand Up @@ -67,6 +69,7 @@ public class MemberData {
protected MemberData() {
}

@Builder
public MemberData(String id, String name) {
this.id = id;
this.name = name;
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ spring:
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
hibernate:
ddl-auto: create
ddl-auto: none
properties:
hibernate:
format_sql: true
Expand Down
8 changes: 0 additions & 8 deletions src/main/sql/init.sql

This file was deleted.

13 changes: 13 additions & 0 deletions src/test/java/com/dnd/gooding/fixture/MemberDataFixture.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.dnd.gooding.fixture;

import com.dnd.gooding.user.query.dto.MemberData;

public class MemberDataFixture {

public static MemberData getMember() {
return MemberData.builder()
.id("[email protected]")
.name("haeyong")
.build();
}
}
20 changes: 20 additions & 0 deletions src/test/java/com/dnd/gooding/fixture/MemberFixture.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.dnd.gooding.fixture;

import com.dnd.gooding.common.model.UserRole;
import com.dnd.gooding.oauth.command.domain.OAuthId;
import com.dnd.gooding.user.command.domain.Member;
import com.dnd.gooding.user.command.domain.MemberId;

public class MemberFixture {

public static Member create() {
return Member.builder()
.id(MemberId.of("[email protected]"))
.name(null)
.emails(null)
.interests(null)
.userRole(UserRole.ROLE_USER.name())
.oAuthId(OAuthId.of("12356"))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.dnd.gooding.integration;

import org.junit.jupiter.api.Test;

public class GoodingApplicationTest extends IntegrationTest {

@Test
void contextLoads() {
}
}
59 changes: 59 additions & 0 deletions src/test/java/com/dnd/gooding/integration/IntegrationTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.dnd.gooding.integration;

import java.io.File;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;

import org.junit.Ignore;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.transaction.annotation.Transactional;
import org.testcontainers.containers.DockerComposeContainer;
import org.testcontainers.containers.wait.strategy.Wait;

@Ignore
@Transactional
@SpringBootTest
@ContextConfiguration(initializers = IntegrationTest.IntegrationTestInitializer.class)
public class IntegrationTest {

static DockerComposeContainer rdbms;

static {
rdbms = new DockerComposeContainer(new File("infra/test/docker-compose.yml"))
.withExposedService(
"local-db",
3306,
Wait.forLogMessage(".*ready for connections.*", 1)
.withStartupTimeout(Duration.ofSeconds(300))
)
.withExposedService(
"local-db-migrate",
0,
Wait.forLogMessage("(.*Successfully applied.*)|(.*Successfully validated.*)", 1)
.withStartupTimeout(Duration.ofSeconds(300))
);

rdbms.start();
}

static class IntegrationTestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
Map<String, String> properties = new HashMap<>();
String rdbmsHost = rdbms.getServiceHost("local-db", 3306);
Integer rdbmsPort = rdbms.getServicePort("local-db", 3306);

properties.put("spring.datasource.url",
"jdbc:mysql://" + rdbmsHost + ":" + rdbmsPort + "+/gooding?serverTimezone=Asia/Seoul");

TestPropertyValues.of(properties)
.applyTo(applicationContext);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.dnd.gooding.integration.user.query;

public class MemberQueryServiceIntegrationTest {
}
33 changes: 0 additions & 33 deletions src/test/java/com/dnd/gooding/record/query/RecordDataDaoTest.java

This file was deleted.

Loading

0 comments on commit f526467

Please sign in to comment.