From 4d64e4bc052b2b098df48add1021887cf2cfb3f0 Mon Sep 17 00:00:00 2001
From: Sori <exploitsori@ajou.ac.kr>
Date: Wed, 26 Mar 2025 18:42:45 +0900
Subject: [PATCH] ADD file uploads testing complate

---
 pom.xml                                       | 142 ++++++++++++++++--
 .../java/com/example/demo/TestController.java |  13 ++
 src/main/java/com/example/demo/UserDto.java   |  12 ++
 .../example/demo/constant/ItemSellStatus.java |   4 +
 .../java/com/example/demo/entity/Item.java    |  38 +++++
 .../demo/repository/ItemRepository.java       |  11 ++
 .../resources/application-test.properties     |   7 +
 src/main/resources/application.properties     |  20 ++-
 .../com/example/demo/ItemRepositoryTest.java  |  39 +++++
 9 files changed, 269 insertions(+), 17 deletions(-)
 create mode 100644 src/main/java/com/example/demo/TestController.java
 create mode 100644 src/main/java/com/example/demo/UserDto.java
 create mode 100644 src/main/java/com/example/demo/constant/ItemSellStatus.java
 create mode 100644 src/main/java/com/example/demo/entity/Item.java
 create mode 100644 src/main/java/com/example/demo/repository/ItemRepository.java
 create mode 100644 src/main/resources/application-test.properties
 create mode 100644 src/test/java/com/example/demo/ItemRepositoryTest.java

diff --git a/pom.xml b/pom.xml
index 1fd283a..ee799c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,31 +5,24 @@
 	<parent>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>3.4.4</version>
+		<version>2.6.7</version>
 		<relativePath/> <!-- lookup parent from repository -->
 	</parent>
-	<groupId>com.example</groupId>
+	<groupId>com.example.demo</groupId>
 	<artifactId>demo</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<name>demo</name>
 	<description>Demo project for Spring Boot</description>
-	<url/>
-	<licenses>
-		<license/>
-	</licenses>
-	<developers>
-		<developer/>
-	</developers>
-	<scm>
-		<connection/>
-		<developerConnection/>
-		<tag/>
-		<url/>
-	</scm>
 	<properties>
-		<java.version>17</java.version>
+		<java.version>18</java.version>
 	</properties>
 	<dependencies>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-actuator</artifactId>
+		</dependency>
+
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
@@ -40,6 +33,97 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+
+		<dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+
+		<dependency>
+			<groupId>com.h2database</groupId>
+			<artifactId>h2</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+
+		<dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>javax.persistence-api</artifactId>
+			<version>2.2</version>
+        </dependency>
+
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+		</dependency>
+
+		<dependency>
+    		<groupId>mysql</groupId>
+    		<artifactId>mysql-connector-java</artifactId>
+    		<scope>runtime</scope>
+  		</dependency>
+
+		<dependency>
+			<groupId>com.querydsl</groupId>
+			<artifactId>querydsl-jpa</artifactId>
+			<version>5.0.0</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.querydsl</groupId>
+			<artifactId>querydsl-apt</artifactId>
+			<version>5.0.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.googlecode.json-simple</groupId>
+			<artifactId>json-simple</artifactId>
+			<version>1.1.1</version>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+			<version>2.9.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.webjars</groupId>
+			<artifactId>jquery</artifactId>
+			<version>3.6.0</version>
+		</dependency>
+
+		<!-- https://mvnrepository.com/artifact/org.webjars/bootstrap -->
+		<dependency>
+			<groupId>org.webjars</groupId>
+			<artifactId>bootstrap</artifactId>
+			<version>5.1.3</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-devtools</artifactId>
+		</dependency>
+
+		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
+		<dependency>
+			<groupId>org.mybatis</groupId>
+			<artifactId>mybatis</artifactId>
+			<version>3.5.13</version>
+		</dependency>
+
+		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
+		<dependency>
+			<groupId>org.mybatis</groupId>
+			<artifactId>mybatis-spring</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+
+
 	</dependencies>
 
 	<build>
@@ -47,6 +131,32 @@
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
+				<version>${parent.version}</version>
+				<configuration>
+					<excludes>
+						<exclude>
+							<groupId>org.project-lombok</groupId>
+							<artifactId>lombok</artifactId>
+						</exclude>
+					</excludes>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>com.mysema.maven</groupId>
+				<artifactId>apt-maven-plugin</artifactId>
+				<version>1.1.3</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>process</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>target/generated-sources/java</outputDirectory>
+							<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/src/main/java/com/example/demo/TestController.java b/src/main/java/com/example/demo/TestController.java
new file mode 100644
index 0000000..643fb5f
--- /dev/null
+++ b/src/main/java/com/example/demo/TestController.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+@RestController
+public class TestController {
+    @GetMapping(value = "/test")
+    public UserDto test(){
+        UserDto dto = new UserDto();
+        dto.setAge(17);
+        dto.setName("Jane");
+        return dto;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/UserDto.java b/src/main/java/com/example/demo/UserDto.java
new file mode 100644
index 0000000..3ba7a5a
--- /dev/null
+++ b/src/main/java/com/example/demo/UserDto.java
@@ -0,0 +1,12 @@
+package com.example.demo;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+@Getter
+@Setter
+@ToString
+public class UserDto {
+    private String name;
+    private Integer age;
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/constant/ItemSellStatus.java b/src/main/java/com/example/demo/constant/ItemSellStatus.java
new file mode 100644
index 0000000..d1ebff7
--- /dev/null
+++ b/src/main/java/com/example/demo/constant/ItemSellStatus.java
@@ -0,0 +1,4 @@
+package com.example.demo.constant;
+public enum ItemSellStatus {
+    SELL, SOLD_OUT
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/entity/Item.java b/src/main/java/com/example/demo/entity/Item.java
new file mode 100644
index 0000000..e19924f
--- /dev/null
+++ b/src/main/java/com/example/demo/entity/Item.java
@@ -0,0 +1,38 @@
+package com.example.demo.entity;
+import com.example.demo.constant.ItemSellStatus;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import java.time.LocalDateTime;
+import javax.persistence.*;
+import org.springframework.stereotype.Component;
+
+@Table(name="item")
+@Getter
+@Setter
+@ToString
+@Entity
+public class Item {
+    @Id
+    @Column(name="item_id")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @Column(nullable = false, length= 50)
+    private String itemNm;
+
+    @Column(name="price", nullable = false)
+    private int price;
+
+    @Column(nullable = false)
+    private int stockNumber;
+
+    @Lob
+    @Column(nullable = false)
+    private String itemDetail;
+    
+    @Enumerated(EnumType.STRING)
+    private ItemSellStatus itemSellStatus;
+    private LocalDateTime regTime;
+    private LocalDateTime updateTime;   
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/repository/ItemRepository.java b/src/main/java/com/example/demo/repository/ItemRepository.java
new file mode 100644
index 0000000..1187d33
--- /dev/null
+++ b/src/main/java/com/example/demo/repository/ItemRepository.java
@@ -0,0 +1,11 @@
+package com.example.demo.repository;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import java.util.List;
+import com.example.demo.entity.Item;
+// @NoRepositoryBean
+public interface ItemRepository extends JpaRepository<Item, Long>{
+    
+}
\ No newline at end of file
diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties
new file mode 100644
index 0000000..073b6e3
--- /dev/null
+++ b/src/main/resources/application-test.properties
@@ -0,0 +1,7 @@
+spring.datasource.driver-class-name=org.h2.Driver
+spring.datasource.url=jdbc:h2:mem:test
+spring.datasource.username=sa
+spring.datasource.password=
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.jpa.hibernate.ddl-auto=create
+spring.jpa.properties.hibernate.show_sql = true
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index fbd7fa0..741d198 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,2 +1,20 @@
 spring.application.name=demo
-server.port=3000
\ No newline at end of file
+server.port=3000
+
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.show-sql=true
+spring.datasource.url=jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=tr
+ue&serverTimezone=Asia/Seoul
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.datasource.username=root
+spring.datasource.password=web1
+# spring.datasource.driver-class-name=org.h2.Driver
+# spring.datasource.url=jdbc:h2:mem:test
+# spring.datasource.username=sa
+# spring.datasource.password=
+# spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+# spring.jpa.hibernate.ddl-auto=create
+spring.jpa.properties.hibernate.show_sql = true
+spring.jpa.properties.hibernate.connection.autocommit = true
+spring.jpa.properties.hibernate.format_sql = true
+logging.level.org.hibernate.type.descriptor.sql = trace
\ No newline at end of file
diff --git a/src/test/java/com/example/demo/ItemRepositoryTest.java b/src/test/java/com/example/demo/ItemRepositoryTest.java
new file mode 100644
index 0000000..6d9104a
--- /dev/null
+++ b/src/test/java/com/example/demo/ItemRepositoryTest.java
@@ -0,0 +1,39 @@
+package com.example.demo;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import com.example.demo.entity.Item;
+
+import com.example.demo.repository.ItemRepository;
+
+import org.junit.jupiter.api.DisplayName;
+import java.time.LocalDateTime;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.junit.runner.RunWith;
+import com.example.demo.constant.ItemSellStatus;
+import java.util.List;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import com.querydsl.jpa.impl.JPAQuery;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+@SpringBootTest
+@TestPropertySource(locations = "classpath:application-test.properties")
+@RunWith(SpringJUnit4ClassRunner.class)
+public class ItemRepositoryTest {
+  @Autowired
+  ItemRepository itemRepository;
+  @Test
+  @DisplayName("상품 저장 테스트")
+  public void createItemTest() {
+    Item item = new Item();
+    item.setItemNm("테스트 상품");
+    item.setPrice(100000);
+    item.setItemDetail("테스트 상품 상세 설명");
+    item.setStockNumber(100);
+    item.setRegTime(LocalDateTime.now());
+    item.setUpdateTime(LocalDateTime.now());
+    Item savedItem = itemRepository.save(item);
+    System.out.println(savedItem.toString());
+  }
+}
\ No newline at end of file
-- 
GitLab