From 1ccba38aee2e498672619b3be5bead8a7d8303bb Mon Sep 17 00:00:00 2001
From: samnyan <4137880+samnyan@users.noreply.github.com>
Date: Fri, 25 Dec 2020 14:16:55 +0800
Subject: [PATCH] [general] Add database test
---
.gitignore | 4 +-
pom.xml | 5 -
.../aqua/AquaServerApplicationTests.java | 4 +-
.../icu/samnyan/aqua/FlywayTestConfig.java | 20 +
.../dao/userdata/ChuniRepositoryTest.java | 347 +++++++++++++++
.../model/userdata/DivaRepositoryTest.java | 248 +++++++++++
.../sega/general/dao/CardRepositoryTest.java | 31 ++
.../dao/userdata/OngekiRepositoryTest.java | 419 ++++++++++++++++++
.../icu/samnyan/aqua/util/CardHelper.java | 17 +
.../application-testMysql.properties | 16 +
...ties => application-testSqlite.properties} | 4 +-
src/test/resources/application.properties | 1 +
12 files changed, 1105 insertions(+), 11 deletions(-)
create mode 100644 src/test/java/icu/samnyan/aqua/FlywayTestConfig.java
create mode 100644 src/test/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/ChuniRepositoryTest.java
create mode 100644 src/test/java/icu/samnyan/aqua/sega/diva/model/userdata/DivaRepositoryTest.java
create mode 100644 src/test/java/icu/samnyan/aqua/sega/general/dao/CardRepositoryTest.java
create mode 100644 src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java
create mode 100644 src/test/java/icu/samnyan/aqua/util/CardHelper.java
create mode 100644 src/test/resources/application-testMysql.properties
rename src/test/resources/{application-test.properties => application-testSqlite.properties} (76%)
create mode 100644 src/test/resources/application.properties
diff --git a/.gitignore b/.gitignore
index d0907d0..344a142 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,6 @@ build/
.vscode/
### Dev env ###
-application.properties
-aqua.jar
+/application.properties
+/aqua.jar
/data/
diff --git a/pom.xml b/pom.xml
index 87de046..c2440f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,11 +84,6 @@
mariadb-java-client
runtime
-
- com.h2database
- h2
- test
-
org.projectlombok
diff --git a/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java b/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java
index 2292033..28f1184 100644
--- a/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java
+++ b/src/test/java/icu/samnyan/aqua/AquaServerApplicationTests.java
@@ -1,10 +1,10 @@
package icu.samnyan.aqua;
import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-@TestPropertySource(locations = "classpath:application-test.properties")
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@SpringBootTest
class AquaServerApplicationTests {
diff --git a/src/test/java/icu/samnyan/aqua/FlywayTestConfig.java b/src/test/java/icu/samnyan/aqua/FlywayTestConfig.java
new file mode 100644
index 0000000..c9376bc
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/FlywayTestConfig.java
@@ -0,0 +1,20 @@
+package icu.samnyan.aqua;
+
+import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+@Configuration
+public class FlywayTestConfig {
+
+ @Bean
+ public FlywayMigrationStrategy clean() {
+ return flyway -> {
+ flyway.clean();
+ flyway.migrate();
+ };
+ }
+}
diff --git a/src/test/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/ChuniRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/ChuniRepositoryTest.java
new file mode 100644
index 0000000..0251f37
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/ChuniRepositoryTest.java
@@ -0,0 +1,347 @@
+package icu.samnyan.aqua.sega.chunithm.dao.userdata;
+
+import icu.samnyan.aqua.sega.chunithm.model.userdata.*;
+import icu.samnyan.aqua.sega.general.dao.CardRepository;
+import icu.samnyan.aqua.sega.general.model.Card;
+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.time.LocalDateTime;
+import java.util.List;
+
+import static icu.samnyan.aqua.util.CardHelper.getCard;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+@DataJpaTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+class ChuniRepositoryTest {
+
+ LocalDateTime now = LocalDateTime.now();
+
+ @Autowired
+ private CardRepository cardRepository;
+
+ @Autowired
+ private UserActivityRepository userActivityRepository;
+ @Autowired
+ private UserCharacterRepository userCharacterRepository;
+ @Autowired
+ private UserChargeRepository userChargeRepository;
+ @Autowired
+ private UserCourseRepository userCourseRepository;
+ @Autowired
+ private UserDataExRepository userDataExRepository;
+ @Autowired
+ private UserDataRepository userDataRepository;
+ @Autowired
+ private UserDuelRepository userDuelRepository;
+ @Autowired
+ private UserGameOptionExRepository userGameOptionExRepository;
+ @Autowired
+ private UserGameOptionRepository userGameOptionRepository;
+ @Autowired
+ private UserGeneralDataRepository userGeneralDataRepository;
+ @Autowired
+ private UserItemRepository userItemRepository;
+ @Autowired
+ private UserMapRepository userMapRepository;
+ @Autowired
+ private UserMusicDetailRepository userMusicDetailRepository;
+ @Autowired
+ private UserPlaylogRepository userPlaylogRepository;
+
+ @Test
+ void userData_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ userDataRepository.save(getUser(c));
+
+ var u = userDataRepository.findByCard_ExtId(114514L);
+
+ assertThat(u).isPresent().hasValueSatisfying(i -> assertThat(i.getUserName()).isEqualTo("Hello"));
+ }
+
+ @Test
+ void userActivity_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var aL = userActivityRepository.saveAll(List.of(
+ getActivity(u, 1),
+ getActivity(u, 2),
+ getActivity(u, 10010)
+ ));
+
+ var aRL = userActivityRepository.findAllByUser_Card_ExtId(114514L);
+
+ assertThat(aRL).hasSize(3);
+ }
+
+ @Test
+ void userCharacter_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var cL = userCharacterRepository.saveAll(List.of(
+ getCharacter(u, 10011),
+ getCharacter(u, 10012),
+ getCharacter(u, 10013)
+ ));
+
+ var cRL = userCharacterRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(cRL).hasSize(3);
+ }
+
+ @Test
+ void userCharge_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var cL = userChargeRepository.saveAll(List.of(
+ getCharge(u, 10011)
+ ));
+
+ var cRL = userChargeRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(cRL).hasSize(1);
+ }
+
+ @Test
+ void userCourse_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var cL = userCourseRepository.saveAll(List.of(
+ getCourse(u, 10011),
+ getCourse(u, 10012)
+ ));
+
+ var cRL = userCourseRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(cRL).hasSize(2);
+ }
+
+ @Test
+ void userDuel_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var dL = userDuelRepository.saveAll(List.of(
+ getDuel(u, 10011),
+ getDuel(u, 10012)
+ ));
+
+ var dRL = userDuelRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(dRL).hasSize(2);
+ }
+
+ @Test
+ void userDataEx_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var d = userDataExRepository.save(getDataEx(u));
+
+ var dR = userDataExRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(dR).isPresent();
+ }
+
+ @Test
+ void userGameOptionEx_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var g = userGameOptionExRepository.save(getGameOptionEx(u));
+
+ var gR = userGameOptionExRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(gR).isPresent();
+ }
+
+ @Test
+ void userGameOption_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var g = userGameOptionRepository.save(getGameOption(u));
+
+ var gR = userGameOptionRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(gR).isPresent();
+ }
+
+ @Test
+ void userGeneralData_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var g = userGeneralDataRepository.saveAll(List.of(
+ getGeneralData(u, "RATING", "VALUE1"),
+ getGeneralData(u, "RECENT_RATING", "VALUE2")
+ ));
+
+ var gR = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(114514L, "RATING");
+
+ assertThat(gR).isPresent().hasValueSatisfying(i -> assertThat(i.getPropertyValue()).isEqualTo("VALUE1"));
+ }
+
+ @Test
+ void userItem_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var iL = userItemRepository.saveAll(List.of(
+ getUserItem(u, 1),
+ getUserItem(u, 2)
+ ));
+
+ var iRL = userItemRepository.findAllByUser_Card_ExtId(114514L);
+
+ assertThat(iRL).hasSize(2);
+ }
+
+ @Test
+ void userMap_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var mL = userMapRepository.saveAll(List.of(
+ getUserMap(u, 1),
+ getUserMap(u, 2)
+ ));
+
+ var mRL = userMapRepository.findAllByUser_Card_ExtId(114514L);
+
+ assertThat(mRL).hasSize(2);
+ }
+
+ @Test
+ void userMusicDetail_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var mL = userMusicDetailRepository.saveAll(List.of(
+ getUserMusicDetail(u, 1),
+ getUserMusicDetail(u, 2)
+ ));
+
+ var mRL = userMusicDetailRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(mRL).hasSize(2);
+ }
+
+ @Test
+ void userPlaylog_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ var pL = userPlaylogRepository.saveAll(List.of(
+ getUserPlaylog(u, 1),
+ getUserPlaylog(u, 2)
+ ));
+
+ var pRL = userPlaylogRepository.findByUser_Card_ExtId(114514L);
+
+ assertThat(pRL).hasSize(2);
+ }
+
+ private UserData getUser(Card card) {
+ return new UserData(1,
+ card,
+ "Hello",
+ now,
+ false,
+ "",
+ 10,
+ 0,
+ "",
+ 10,
+ 10,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1,
+ now,
+ 1,
+ false,
+ "SDBT",
+ "1.00.00",
+ "1.00.00",
+ now,
+ "SDBT",
+ "1.00.00",
+ "1.00.00",
+ now,
+ 1,
+ "",
+ "",
+ "",
+ "",
+ ""
+ );
+ }
+
+ private UserActivity getActivity(UserData u, Integer activityId) {
+ return new UserActivity(-1, u, 1, activityId, 0, 0, 0, 0, 0);
+ }
+
+ private UserCharacter getCharacter(UserData u, Integer characterId) {
+ return new UserCharacter(-1, u, characterId, 1, 1, 1, 1, true, false, 0, 0);
+ }
+
+ private UserCharge getCharge(UserData u, Integer chargeId) {
+ return new UserCharge(-1, u, chargeId, 1, now, now, 0, 0, now);
+ }
+
+ private UserCourse getCourse(UserData u, Integer courseId) {
+ return new UserCourse(-1, u, courseId, 1, 1, 1, true, true, true, 1, 1, now, 1, 1, 1, 1, true);
+ }
+
+ private UserDuel getDuel(UserData u, Integer duelId) {
+ return new UserDuel(-1, u, duelId, 1, 1, true, now, 1, 1, 1, 1);
+ }
+
+ private UserDataEx getDataEx(UserData u) {
+ return new UserDataEx(-1, u, "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, "", "", "", "", "", 0L, 0L, 0L, 0L, 0L);
+ }
+
+ private UserGameOptionEx getGameOptionEx(UserData u) {
+ return new UserGameOptionEx(-1, u, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ }
+
+ private UserGameOption getGameOption(UserData u) {
+ return new UserGameOption(-1, u, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ }
+
+ private UserGeneralData getGeneralData(UserData u, String key, String value) {
+ return new UserGeneralData(-1, u, key, value);
+ }
+
+ private UserItem getUserItem(UserData u, Integer itemId) {
+ return new UserItem(-1, u, 1, itemId, 1, true);
+ }
+
+ private UserMap getUserMap(UserData u, Integer mapId) {
+ return new UserMap(-1, u, mapId, 1, true, 1, 1, 1, 1, 1, true);
+ }
+
+ private UserMusicDetail getUserMusicDetail(UserData u, Integer musicId) {
+ return new UserMusicDetail(-1, u, musicId, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, 1, 1, 1, true);
+ }
+
+ private UserPlaylog getUserPlaylog(UserData u, Integer musicId) {
+ return new UserPlaylog(-1, u, 0, 0, 0, now, now, musicId, 1, 1, 1, 1, 1, "", "", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, 1, true, true, false, 1, 1, 1, true, 1, 1, "", false);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/icu/samnyan/aqua/sega/diva/model/userdata/DivaRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/diva/model/userdata/DivaRepositoryTest.java
new file mode 100644
index 0000000..b672cfb
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/sega/diva/model/userdata/DivaRepositoryTest.java
@@ -0,0 +1,248 @@
+package icu.samnyan.aqua.sega.diva.model.userdata;
+
+import icu.samnyan.aqua.sega.diva.dao.userdata.*;
+import icu.samnyan.aqua.sega.diva.model.common.*;
+import icu.samnyan.aqua.sega.general.dao.CardRepository;
+import icu.samnyan.aqua.sega.general.model.Card;
+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 org.springframework.data.domain.PageRequest;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static icu.samnyan.aqua.util.CardHelper.getCard;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+@DataJpaTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+class DivaRepositoryTest {
+
+ LocalDateTime now = LocalDateTime.now();
+
+ @Autowired
+ private CardRepository cardRepository;
+
+ @Autowired
+ private GameSessionRepository gameSessionRepository;
+ @Autowired
+ private PlayerContestRepository playerContestRepository;
+ @Autowired
+ private PlayerCustomizeRepository playerCustomizeRepository;
+ @Autowired
+ private PlayerInventoryRepository playerInventoryRepository;
+ @Autowired
+ private PlayerModuleRepository playerModuleRepository;
+ @Autowired
+ private PlayerProfileRepository playerProfileRepository;
+ @Autowired
+ private PlayerPvCustomizeRepository playerPvCustomizeRepository;
+ @Autowired
+ private PlayerPvRecordRepository playerPvRecordRepository;
+ @Autowired
+ private PlayerScreenShotRepository playerScreenShotRepository;
+ @Autowired
+ private PlayLogRepository playLogRepository;
+
+ @Test
+ void playerProfile_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ playerProfileRepository.save(getProfile(c));
+
+ var p = playerProfileRepository.findByPdId(c.getExtId().intValue());
+
+ assertThat(p).isPresent().hasValueSatisfying(v -> assertThat(v.getPdId()).isEqualTo(c.getExtId().intValue()));
+ }
+
+ @Test
+ void gameSession_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ gameSessionRepository.save(getSession(p));
+
+ var s = gameSessionRepository.findByPdId(p);
+
+ assertThat(s).isPresent();
+ }
+
+ @Test
+ void playerContest_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerContestRepository.saveAll(List.of(
+ getContest(p, 1),
+ getContest(p, 2)
+ ));
+
+ var co = playerContestRepository.findByPdIdAndContestId(p, 1);
+
+ assertThat(co).isPresent();
+ }
+
+ @Test
+ void playerCustomize_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerCustomizeRepository.saveAll(List.of(
+ getCustomize(p, 1),
+ getCustomize(p, 2),
+ getCustomize(p, 3)
+ ));
+
+ var cL = playerCustomizeRepository.findByPdId(p);
+
+ assertThat(cL).hasSize(3);
+
+ var cPL = playerCustomizeRepository.findByPdId_PdId(p.getPdId(), PageRequest.of(0, 10));
+
+ assertThat(cPL).hasSize(3);
+ }
+
+ @Test
+ void playerInventory_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerInventoryRepository.saveAll(List.of(
+ getInventory(p, "1", "1"),
+ getInventory(p, "2", "1"),
+ getInventory(p, "3", "1")
+ ));
+
+ var io = playerInventoryRepository.findByPdIdAndTypeAndValue(p, "1", "2");
+
+ assertThat(io).isPresent();
+ }
+
+ @Test
+ void playerModule_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerModuleRepository.saveAll(List.of(
+ getModule(p, 1),
+ getModule(p, 2)
+ ));
+
+ var mL = playerModuleRepository.findByPdId(p);
+
+ assertThat(mL).hasSize(2);
+
+ var mPL = playerModuleRepository.findByPdId_PdId(p.getPdId(), PageRequest.of(0, 10));
+
+ assertThat(mPL).hasSize(2);
+ }
+
+ @Test
+ void playerPvCustomize_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerPvCustomizeRepository.saveAll(List.of(
+ getPvCustomize(p, 1),
+ getPvCustomize(p, 2)
+ ));
+
+ var pL = playerPvCustomizeRepository.findByPdIdAndPvId(p, 1);
+
+ assertThat(pL).isPresent();
+ }
+
+ @Test
+ void playerPvRecord_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerPvRecordRepository.saveAll(List.of(
+ getPvRecord(p, 1),
+ getPvRecord(p, 2),
+ getPvRecord(p, 3)
+ ));
+
+ var rL = playerPvRecordRepository.findByPdId(p);
+
+ assertThat(rL).hasSize(3);
+ }
+
+ @Test
+ void playerScreenShot_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playerScreenShotRepository.saveAll(List.of(
+ getScreenShot(p, 1),
+ getScreenShot(p, 2),
+ getScreenShot(p, 3)
+ ));
+
+ var rL = playerScreenShotRepository.findByPdId_PdId(p.getPdId());
+
+ assertThat(rL).hasSize(3);
+ }
+
+ @Test
+ void playLog_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var p = playerProfileRepository.save(getProfile(c));
+ playLogRepository.saveAll(List.of(
+ getPlayLog(p, 1),
+ getPlayLog(p, 2)
+ ));
+
+ var rL = playLogRepository.findByPdId_PdIdOrderByDateTimeDesc(p.getPdId(), PageRequest.of(0, 10));
+
+ assertThat(rL).hasSize(2);
+
+ var rPL = playLogRepository.findByPdId_PdIdOrderByDateTimeDesc(p.getPdId(), PageRequest.of(0, 10));
+
+ assertThat(rPL).hasSize(2);
+ }
+
+ private PlayerProfile getProfile(Card c) {
+ var p = new PlayerProfile();
+ p.setPdId(c.getExtId().intValue());
+ return p;
+ }
+
+ private GameSession getSession(PlayerProfile p) {
+ return new GameSession(-1, 0, p, StartMode.START, now, now, 0, 0, 0, 0, 0, 0, 0, 0);
+ }
+
+ private PlayerContest getContest(PlayerProfile p, Integer contestId) {
+ return new PlayerContest(-1, p, contestId, 1, ContestBorder.SILVER, 10000, 1, now);
+ }
+
+ private PlayerCustomize getCustomize(PlayerProfile p, Integer customizeId) {
+ return new PlayerCustomize(-1, p, customizeId);
+ }
+
+ private PlayerInventory getInventory(PlayerProfile p, String value, String type) {
+ return new PlayerInventory(-1L, p, value, type);
+ }
+
+ private PlayerModule getModule(PlayerProfile p, Integer moduleId) {
+ return new PlayerModule(-1, p, moduleId);
+ }
+
+ private PlayerPvCustomize getPvCustomize(PlayerProfile p, Integer pvId) {
+ var c = new PlayerPvCustomize();
+ c.setPdId(p);
+ c.setPvId(pvId);
+ return c;
+ }
+
+ private PlayerPvRecord getPvRecord(PlayerProfile p, Integer pvId) {
+ var r = new PlayerPvRecord();
+ r.setPdId(p);
+ r.setPvId(pvId);
+ return r;
+ }
+
+ private PlayerScreenShot getScreenShot(PlayerProfile p, Integer pvId) {
+ return new PlayerScreenShot(-1, p, pvId, "img.jpg", "0,0,0", "0,0,0,0,0");
+ }
+
+ private PlayLog getPlayLog(PlayerProfile p, Integer pvId) {
+ return new PlayLog(-1, p, pvId, Difficulty.EXTREME, Edition.EXTRA, 1, 10000, ChallengeKind.COMPLETED, 1, ClearResult.EXCELLENT, 100, 999, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "0,0,0", 0, 0, 0, "0", "0,0,0", 0, now);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/icu/samnyan/aqua/sega/general/dao/CardRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/general/dao/CardRepositoryTest.java
new file mode 100644
index 0000000..de53b64
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/sega/general/dao/CardRepositoryTest.java
@@ -0,0 +1,31 @@
+package icu.samnyan.aqua.sega.general.dao;
+
+import icu.samnyan.aqua.sega.general.model.Card;
+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.time.LocalDateTime;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+@DataJpaTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+class CardRepositoryTest {
+ @Autowired
+ private CardRepository cardRepository;
+
+ @Test
+ void findByExtId_Exists() {
+ cardRepository.save(new Card(1, 114514L, "01145141919810000000", LocalDateTime.now(), LocalDateTime.now()));
+
+ var c = cardRepository.findByExtId(114514L);
+
+ assertThat(c).isPresent();
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java
new file mode 100644
index 0000000..964f7d1
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java
@@ -0,0 +1,419 @@
+package icu.samnyan.aqua.sega.ongeki.dao.userdata;
+
+import icu.samnyan.aqua.sega.general.dao.CardRepository;
+import icu.samnyan.aqua.sega.general.model.Card;
+import icu.samnyan.aqua.sega.ongeki.model.userdata.*;
+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.List;
+
+import static icu.samnyan.aqua.util.CardHelper.getCard;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+@DataJpaTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+class OngekiRepositoryTest {
+
+ @Autowired
+ private CardRepository cardRepository;
+
+ @Autowired
+ private UserActivityRepository userActivityRepository;
+ @Autowired
+ private UserBossRepository userBossRepository;
+ @Autowired
+ private UserCardRepository userCardRepository;
+ @Autowired
+ private UserChapterRepository userChapterRepository;
+ @Autowired
+ private UserCharacterRepository userCharacterRepository;
+ @Autowired
+ private UserDataRepository userDataRepository;
+ @Autowired
+ private UserDeckRepository userDeckRepository;
+ @Autowired
+ private UserEventPointRepository userEventPointRepository;
+ @Autowired
+ private UserGeneralDataRepository userGeneralDataRepository;
+ @Autowired
+ private UserItemRepository userItemRepository;
+ @Autowired
+ private UserLoginBonusRepository userLoginBonusRepository;
+ @Autowired
+ private UserMissionPointRepository userMissionPointRepository;
+ @Autowired
+ private UserMusicDetailRepository userMusicDetailRepository;
+ @Autowired
+ private UserMusicItemRepository userMusicItemRepository;
+ @Autowired
+ private UserOptionRepository userOptionRepository;
+ @Autowired
+ private UserPlaylogRepository userPlaylogRepository;
+ @Autowired
+ private UserScenarioRepository userScenarioRepository;
+ @Autowired
+ private UserStoryRepository userStoryRepository;
+ @Autowired
+ private UserTechCountRepository userTechCountRepository;
+ @Autowired
+ private UserTrainingRoomRepository userTrainingRoomRepository;
+
+ @Test
+ void userData_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ userDataRepository.save(getUser(c));
+
+ var u = userDataRepository.findByCard_ExtId(c.getExtId());
+
+ assertThat(u).isPresent().hasValueSatisfying(i -> assertThat(i.getUserName()).isEqualTo("Hello"));
+ }
+
+ @Test
+ void userActivity_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userActivityRepository.saveAll(List.of(
+ getActivity(u, 1),
+ getActivity(u, 2)
+ ));
+
+ var aL = userActivityRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userBoss_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userBossRepository.saveAll(List.of(
+ getBoss(u, 1),
+ getBoss(u, 2)
+ ));
+
+ var aL = userBossRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userCard_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userCardRepository.saveAll(List.of(
+ getUserCard(u, 1),
+ getUserCard(u, 2)
+ ));
+
+ var aL = userCardRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userChapter_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userChapterRepository.saveAll(List.of(
+ getChapter(u, 1),
+ getChapter(u, 2)
+ ));
+
+ var aL = userChapterRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userCharacter_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userCharacterRepository.saveAll(List.of(
+ getCharacter(u, 1),
+ getCharacter(u, 2)
+ ));
+
+ var aL = userCharacterRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userDeck_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userDeckRepository.saveAll(List.of(
+ getDeck(u, 1),
+ getDeck(u, 2)
+ ));
+
+ var aL = userDeckRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userEventPoint_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userEventPointRepository.saveAll(List.of(
+ getEventPoint(u, 1),
+ getEventPoint(u, 2)
+ ));
+
+ var aL = userEventPointRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userGeneralData_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userGeneralDataRepository.saveAll(List.of(
+ getGeneralData(u, "RATING", "TEST1"),
+ getGeneralData(u, "RECENT_RATING", "TEST2")
+ ));
+
+ var g = userGeneralDataRepository.findByUser_Card_ExtIdAndPropertyKey(c.getExtId(), "RATING");
+
+ assertThat(g).isPresent().hasValueSatisfying(v -> assertThat(v.getPropertyValue()).isEqualTo("TEST1"));
+ }
+
+ @Test
+ void userItem_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userItemRepository.saveAll(List.of(
+ getItem(u, 1),
+ getItem(u, 2)
+ ));
+
+ var aL = userItemRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userLoginBonus_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userLoginBonusRepository.saveAll(List.of(
+ getLoginBonus(u, 1),
+ getLoginBonus(u, 2)
+ ));
+
+ var aL = userLoginBonusRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userMissionPoint_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userMissionPointRepository.saveAll(List.of(
+ getMissionPoint(u, 1),
+ getMissionPoint(u, 2)
+ ));
+
+ var aL = userMissionPointRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userMusicDetail_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userMusicDetailRepository.saveAll(List.of(
+ getMusicDetail(u, 1),
+ getMusicDetail(u, 2)
+ ));
+
+ var aL = userMusicDetailRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userMusicItem_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userMusicItemRepository.saveAll(List.of(
+ getMusicItem(u, 1),
+ getMusicItem(u, 2)
+ ));
+
+ var aL = userMusicItemRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userOption_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userOptionRepository.save(getOption(u));
+
+ var aL = userOptionRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).isPresent();
+ }
+
+ @Test
+ void userPlaylog_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userPlaylogRepository.saveAll(List.of(
+ getPlaylog(u, 1),
+ getPlaylog(u, 2)
+ ));
+
+ var aL = userPlaylogRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userScenario_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userScenarioRepository.saveAll(List.of(
+ getScenario(u, 1),
+ getScenario(u, 2)
+ ));
+
+ var aL = userScenarioRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userStory_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userStoryRepository.saveAll(List.of(
+ getStory(u, 1),
+ getStory(u, 2)
+ ));
+
+ var aL = userStoryRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userTechCount_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userTechCountRepository.saveAll(List.of(
+ getTechCount(u, 1),
+ getTechCount(u, 2)
+ ));
+
+ var aL = userTechCountRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ @Test
+ void userTrainingRoom_SaveLoad() {
+ var c = cardRepository.save(getCard());
+ var u = userDataRepository.save(getUser(c));
+ userTrainingRoomRepository.saveAll(List.of(
+ getTrainingRoom(u, 1),
+ getTrainingRoom(u, 2)
+ ));
+
+ var aL = userTrainingRoomRepository.findByUser_Card_ExtId(c.getExtId());
+
+ assertThat(aL).hasSize(2);
+ }
+
+ private UserData getUser(Card c) {
+ return new UserData(-1, c, "Hello", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "2020", "SDDT", "1.00.00", "1.00.00", "2020", "SDDT", "1.00.00", "1.00.00", "", "2020", 0, "0", 0, "123", 0, "A000000", 0, 0);
+ }
+
+ private UserActivity getActivity(UserData u, Integer activityId) {
+ return new UserActivity(-1, u, 1, activityId, 0, 0, 0, 0, 0);
+ }
+
+ private UserBoss getBoss(UserData u, Integer musicId) {
+ return new UserBoss(-1, u, musicId, 10, false);
+ }
+
+ private UserCard getUserCard(UserData u, Integer cardId) {
+ return new UserCard(-1, u, cardId, 10, 10, 10, 50, 10, 1, 1, false, "2020", "2020", 1, true, "2020");
+ }
+
+ private UserChapter getChapter(UserData u, Integer chapterId) {
+ return new UserChapter(-1, u, chapterId, 10, 1, 1, true, true, 1, 1);
+ }
+
+ private UserCharacter getCharacter(UserData u, Integer characterId) {
+ return new UserCharacter(-1, u, characterId, 10, 1, 1, 1, "2020", false);
+ }
+
+ private UserDeck getDeck(UserData u, Integer deckId) {
+ return new UserDeck(-1, u, deckId, 1, 1, 1);
+ }
+
+ private UserEventPoint getEventPoint(UserData u, Integer eventId) {
+ return new UserEventPoint(-1, u, eventId, 1, false);
+ }
+
+ private UserGeneralData getGeneralData(UserData u, String key, String value) {
+ return new UserGeneralData(-1, u, key, value);
+ }
+
+ private UserItem getItem(UserData u, Integer itemId) {
+ return new UserItem(-1, u, 1, itemId, 1, true);
+ }
+
+ private UserLoginBonus getLoginBonus(UserData u, Integer bonusId) {
+ return new UserLoginBonus(-1, u, bonusId, 1);
+ }
+
+ private UserMissionPoint getMissionPoint(UserData u, Integer eventId) {
+ return new UserMissionPoint(-1, u, eventId, 1);
+ }
+
+ private UserMusicDetail getMusicDetail(UserData u, Integer musicId) {
+ return new UserMusicDetail(-1, u, musicId, 1, 1, 100, 1, 100, 1, 100, 100, 100, true, true, true, false, 1, true);
+ }
+
+ private UserMusicItem getMusicItem(UserData u, Integer musicId) {
+ return new UserMusicItem(-1, u, musicId, 1);
+ }
+
+ private UserOption getOption(UserData u) {
+ return new UserOption(-1, u, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
+ }
+
+ private UserPlaylog getPlaylog(UserData u, Integer musicId) {
+ return new UserPlaylog(-1, u, 0, 0, "", "", "", musicId, 1, 1, 1, "", 1, 1, 1, 1, "", "", "", 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, true, true, true, true, true, 0, 0);
+ }
+
+ private UserScenario getScenario(UserData u, Integer scenarioId) {
+ return new UserScenario(-1, u, scenarioId, 1);
+ }
+
+ private UserStory getStory(UserData u, Integer storyId) {
+ return new UserStory(-1, u, storyId, 0, 0, 0, 0, 0);
+ }
+
+ private UserTechCount getTechCount(UserData u, Integer levelId) {
+ return new UserTechCount(-1, u, levelId, 1, 1);
+ }
+
+ private UserTrainingRoom getTrainingRoom(UserData u, Integer roomId) {
+ return new UserTrainingRoom(-1, u, "", roomId, 1, "");
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/icu/samnyan/aqua/util/CardHelper.java b/src/test/java/icu/samnyan/aqua/util/CardHelper.java
new file mode 100644
index 0000000..d6e7188
--- /dev/null
+++ b/src/test/java/icu/samnyan/aqua/util/CardHelper.java
@@ -0,0 +1,17 @@
+package icu.samnyan.aqua.util;
+
+import icu.samnyan.aqua.sega.general.model.Card;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author sam_nya (privateamusement@protonmail.com)
+ */
+public class CardHelper {
+
+ public static Card getCard() {
+ var now = LocalDateTime.now();
+ return new Card(1L, 114514L, "01145141919810000000", now, now);
+ }
+
+}
diff --git a/src/test/resources/application-testMysql.properties b/src/test/resources/application-testMysql.properties
new file mode 100644
index 0000000..6579bfb
--- /dev/null
+++ b/src/test/resources/application-testMysql.properties
@@ -0,0 +1,16 @@
+# For testing
+## AimeDb server setting
+aimedb.server.enable=true
+aimedb.server.port=22345
+allnet.server.host=localhost
+allnet.server.port=80
+aimedb.server.address=127.0.0.1
+## Http Server Port
+server.port=80
+spring.flyway.locations=classpath:db/migration/mysql
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+spring.datasource.username=aqua_test
+spring.datasource.password=aqua_test
+spring.datasource.url=jdbc:mariadb://localhost:3306/aqua_test?useSSL=false
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB10Dialect
+spring.jpa.hibernate.ddl-auto=validate
diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-testSqlite.properties
similarity index 76%
rename from src/test/resources/application-test.properties
rename to src/test/resources/application-testSqlite.properties
index f30f395..e5d7369 100644
--- a/src/test/resources/application-test.properties
+++ b/src/test/resources/application-testSqlite.properties
@@ -4,9 +4,9 @@ aimedb.server.enable=true
aimedb.server.port=22345
allnet.server.host=localhost
allnet.server.port=80
+aimedb.server.address=127.0.0.1
## Http Server Port
server.port=80
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:data/test.sqlite
-spring.jpa.hibernate.ddl-auto=none
-spring.flyway.locations=classpath:db/migration/sqlite
\ No newline at end of file
+spring.flyway.locations=classpath:db/migration/sqlite
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
new file mode 100644
index 0000000..9c270df
--- /dev/null
+++ b/src/test/resources/application.properties
@@ -0,0 +1 @@
+spring.profiles.active=testMysql
\ No newline at end of file