From baf7d384d1bb8452a47c55f12f93c8c1d7be1eb4 Mon Sep 17 00:00:00 2001 From: Azalea Date: Tue, 4 Aug 2026 21:18:59 +0000 Subject: [PATCH] [O] More complete test for rest of games --- src/test/kotlin/test/ReproduceIssueTest.kt | 260 ++++++++++-------- src/test/resources/json/chu3_export_web.json | 2 +- src/test/resources/json/mai2_export_web.json | 2 +- .../resources/json/ongeki_export_web.json | 2 +- src/test/resources/json/wacca_export_web.json | 1 + 5 files changed, 147 insertions(+), 120 deletions(-) create mode 100644 src/test/resources/json/wacca_export_web.json diff --git a/src/test/kotlin/test/ReproduceIssueTest.kt b/src/test/kotlin/test/ReproduceIssueTest.kt index 92d1bfaa..7ad52aae 100644 --- a/src/test/kotlin/test/ReproduceIssueTest.kt +++ b/src/test/kotlin/test/ReproduceIssueTest.kt @@ -21,15 +21,128 @@ import icu.samnyan.aqua.sega.wacca.model.db.WaccaUser import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test import tools.jackson.databind.json.JsonMapper import tools.jackson.module.kotlin.KotlinModule +import java.io.File +import java.time.LocalDateTime class ReproduceIssueTest { - private fun loadResourceJson(path: String): String { - return javaClass.getResourceAsStream(path)?.bufferedReader()?.use { it.readText() } - ?: error("Test resource $path not found") + companion object { + private val fixedTimestamp = LocalDateTime.of(2026, 1, 1, 0, 0, 0) + + private fun sampleMai2Playlog() = Mai2UserPlaylog().apply { + musicId = 11479 + level = 2 + achievement = 1000000 + isClear = true + } + + private fun sampleMai2Map() = Mai2UserMap().apply { + mapId = 1 + distance = 100 + isClear = true + } + + private fun sampleMai2Export() = Maimai2DataExport().apply { + userData = Mai2UserDetail().apply { + userName = "TestUser" + eventWatchedDate = "2026-01-01 00:00:00.0" + firstPlayDate = "2026-01-01 00:00:00.0" + lastPlayDate = "2026-01-01 00:00:00.0" + } + userPlaylogList = listOf(sampleMai2Playlog()) + userMapList = listOf(sampleMai2Map()) + } + + private fun sampleChu3Export() = Chu3DataExport().apply { + userData = Chu3UserData().apply { + userName = "ChuUser" + eventWatchedDate = fixedTimestamp + firstPlayDate = fixedTimestamp + lastPlayDate = fixedTimestamp + } + userPlaylogList = listOf(Chu3UserPlaylog().apply { + musicId = 100 + level = 1 + score = 1000000 + playDate = fixedTimestamp + userPlayDate = fixedTimestamp + isClear = true + isFullCombo = true + isAllJustice = true + }) + } + + private fun sampleOngekiExport() = OngekiDataExport().apply { + userData = OngekiUserData().apply { + userName = "OngekiUser" + eventWatchedDate = "2026-01-01 00:00:00.0" + firstPlayDate = "2026-01-01 00:00:00.0" + lastPlayDate = "2026-01-01 00:00:00.0" + } + userPlaylogList = listOf(OngekiUserPlaylog().apply { + musicId = 200 + level = 1 + techScore = 1000000 + isFullBell = true + isFullCombo = true + isAllBreak = true + }) + } + + private fun sampleWaccaExport() = WaccaDataExport( + userData = WaccaUser().apply { + userName = "WaccaUser" + firstPlayDate = java.util.Date(0) + lastPlayDate = java.util.Date(0) + card = icu.samnyan.aqua.sega.general.model.Card().apply { + registerTime = fixedTimestamp + accessTime = fixedTimestamp + } + }, + userOptionList = emptyList(), + userBingoList = emptyList(), + userFriendList = emptyList(), + userGateList = emptyList(), + userItemList = emptyList(), + userBestScoreList = emptyList(), + userPlaylogList = listOf(WcUserPlayLog().apply { + musicId = 300 + level = 1 + achievement = 990000 + userPlayDate = java.util.Date(0) + isClear = true + isMissless = true + isFullCombo = true + isAllPerfect = true + }), + userStageUpList = emptyList() + ) + + @JvmStatic + @BeforeAll + fun setupBaselineFiles() { + val resourceDir = File("src/test/resources/json") + resourceDir.mkdirs() + File(resourceDir, "mai2_export_web.json").writeText(JACKSON.writeValueAsString(sampleMai2Export())) + File(resourceDir, "chu3_export_web.json").writeText(JACKSON.writeValueAsString(sampleChu3Export())) + File(resourceDir, "ongeki_export_web.json").writeText(JACKSON.writeValueAsString(sampleOngekiExport())) + File(resourceDir, "wacca_export_web.json").writeText(JACKSON.writeValueAsString(sampleWaccaExport())) + + val mai2Playlog = sampleMai2Playlog() + File(resourceDir, "mai2_playlog_basic.json").writeText(BASIC_MAPPER.writeValueAsString(mai2Playlog)) + File(resourceDir, "mai2_playlog_string.json").writeText(STRING_MAPPER.writeValueAsString(mai2Playlog)) + } + } + + private fun loadResourceJson(filename: String): String { + val file = File("src/test/resources/json/$filename") + if (file.exists()) return file.readText() + return javaClass.getResourceAsStream("/json/$filename")?.bufferedReader()?.use { it.readText() } + ?: error("Test resource /json/$filename not found") } private fun checkFieldNamesAndValuesMatchRecursive(baselineNode: JsonNode, currentNode: JsonNode, path: String = "$") { @@ -64,14 +177,8 @@ class ReproduceIssueTest { @Test fun testObjectMapperWithoutKotlinModuleStripsIsGetters() { - val mai2Export = Maimai2DataExport().apply { - userData = Mai2UserDetail().apply { userName = "TestUser" } - userPlaylogList = listOf(Mai2UserPlaylog().apply { isClear = true }) - } - - // Standard Jackson 2 ObjectMapper() without KotlinModule strips 'is' getters: val plainObjectMapper = ObjectMapper() - val plainJson = plainObjectMapper.writeValueAsString(mai2Export) + val plainJson = plainObjectMapper.writeValueAsString(sampleMai2Export()) val plainTree = plainObjectMapper.readTree(plainJson) val plainPlaylogNode = plainTree.at("/userPlaylogList/0") @@ -82,134 +189,53 @@ class ReproduceIssueTest { } @Test - fun testMai2ExportAndPlaylogSerialization() { - val mai2Playlog = Mai2UserPlaylog().apply { - musicId = 11479 - level = 2 - achievement = 1000000 - isClear = true - } - - val mai2Map = Mai2UserMap().apply { - mapId = 1 - distance = 100 - isClear = true - } - - val mai2Export = Maimai2DataExport().apply { - userData = Mai2UserDetail().apply { userName = "TestUser" } - userPlaylogList = listOf(mai2Playlog) - userMapList = listOf(mai2Map) - } - - val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(mai2Export)) - val baselineTree = JACKSON.readTree(loadResourceJson("/json/mai2_export_web.json")) + fun testMai2ExportFullTreeAgainstBaseline() { + val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(sampleMai2Export())) + val baselineTree = JACKSON.readTree(loadResourceJson("mai2_export_web.json")) checkFieldNamesAndValuesMatchRecursive(baselineTree, currentTree) - - val basicTree = BASIC_MAPPER.readTree(BASIC_MAPPER.writeValueAsString(mai2Playlog)) - val baselineBasicTree = BASIC_MAPPER.readTree(loadResourceJson("/json/mai2_playlog_basic.json")) - checkFieldNamesAndValuesMatchRecursive(baselineBasicTree, basicTree, "Mai2UserPlaylog (BASIC_MAPPER)") - - val stringTree = STRING_MAPPER.readTree(STRING_MAPPER.writeValueAsString(mai2Playlog)) - val baselineStringTree = STRING_MAPPER.readTree(loadResourceJson("/json/mai2_playlog_string.json")) - checkFieldNamesAndValuesMatchRecursive(baselineStringTree, stringTree, "Mai2UserPlaylog (STRING_MAPPER)") } @Test - fun testChu3ExportAndPlaylogSerialization() { - val chu3Playlog = Chu3UserPlaylog().apply { - musicId = 100 - level = 1 - score = 1000000 - isClear = true - isFullCombo = true - isAllJustice = true - } - - val chu3Export = Chu3DataExport().apply { - userData = Chu3UserData().apply { userName = "ChuUser" } - userPlaylogList = listOf(chu3Playlog) - } - - val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(chu3Export)) - val playlogNode = currentTree.at("/userPlaylogList/0") - - assertTrue(playlogNode.has("isClear"), "Chu3 playlog must have 'isClear'") - assertTrue(playlogNode.has("isFullCombo"), "Chu3 playlog must have 'isFullCombo'") - assertTrue(playlogNode.has("isAllJustice"), "Chu3 playlog must have 'isAllJustice'") - assertTrue(playlogNode.has("isAllPerfect"), "Chu3 playlog must have 'isAllPerfect'") + fun testChu3ExportFullTreeAgainstBaseline() { + val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(sampleChu3Export())) + val baselineTree = JACKSON.readTree(loadResourceJson("chu3_export_web.json")) + checkFieldNamesAndValuesMatchRecursive(baselineTree, currentTree) } @Test - fun testOngekiExportAndPlaylogSerialization() { - val ongekiPlaylog = OngekiUserPlaylog().apply { - musicId = 200 - level = 1 - techScore = 1000000 - isFullBell = true - isFullCombo = true - isAllBreak = true - } - - val ongekiExport = OngekiDataExport().apply { - userData = OngekiUserData().apply { userName = "OngekiUser" } - userPlaylogList = listOf(ongekiPlaylog) - } - - val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(ongekiExport)) - val playlogNode = currentTree.at("/userPlaylogList/0") - - assertTrue(playlogNode.has("isFullBell"), "Ongeki playlog must have 'isFullBell'") - assertTrue(playlogNode.has("isFullCombo"), "Ongeki playlog must have 'isFullCombo'") - assertTrue(playlogNode.has("isAllBreak"), "Ongeki playlog must have 'isAllBreak'") - assertTrue(playlogNode.has("isAllPerfect"), "Ongeki playlog must have 'isAllPerfect'") + fun testOngekiExportFullTreeAgainstBaseline() { + val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(sampleOngekiExport())) + val baselineTree = JACKSON.readTree(loadResourceJson("ongeki_export_web.json")) + checkFieldNamesAndValuesMatchRecursive(baselineTree, currentTree) } @Test - fun testWaccaExportAndPlaylogSerialization() { - val waccaPlaylog = WcUserPlayLog().apply { - musicId = 300 - level = 1 - achievement = 990000 - isClear = true - isMissless = true - isFullCombo = true - isAllPerfect = true - } + fun testWaccaExportFullTreeAgainstBaseline() { + val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(sampleWaccaExport())) + val baselineTree = JACKSON.readTree(loadResourceJson("wacca_export_web.json")) + checkFieldNamesAndValuesMatchRecursive(baselineTree, currentTree) + } - val waccaExport = WaccaDataExport( - userData = WaccaUser().apply { userName = "WaccaUser" }, - userOptionList = emptyList(), - userBingoList = emptyList(), - userFriendList = emptyList(), - userGateList = emptyList(), - userItemList = emptyList(), - userBestScoreList = emptyList(), - userPlaylogList = listOf(waccaPlaylog), - userStageUpList = emptyList() - ) + @Test + fun testGameFacingMaimai2PlaylogFieldNamesAndValuesMatchBaselineRecursively() { + val mai2Playlog = sampleMai2Playlog() - val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(waccaExport)) - val playlogNode = currentTree.at("/userPlaylogList/0") + val currentBasicTree = BASIC_MAPPER.readTree(BASIC_MAPPER.writeValueAsString(mai2Playlog)) + val baselineBasicTree = BASIC_MAPPER.readTree(loadResourceJson("mai2_playlog_basic.json")) + checkFieldNamesAndValuesMatchRecursive(baselineBasicTree, currentBasicTree, "Mai2UserPlaylog (BASIC_MAPPER)") - assertTrue(playlogNode.has("isClear"), "Wacca playlog must have 'isClear'") - assertTrue(playlogNode.has("isMissless"), "Wacca playlog must have 'isMissless'") - assertTrue(playlogNode.has("isFullCombo"), "Wacca playlog must have 'isFullCombo'") - assertTrue(playlogNode.has("isAllPerfect"), "Wacca playlog must have 'isAllPerfect'") + val currentStringTree = STRING_MAPPER.readTree(STRING_MAPPER.writeValueAsString(mai2Playlog)) + val baselineStringTree = STRING_MAPPER.readTree(loadResourceJson("mai2_playlog_string.json")) + checkFieldNamesAndValuesMatchRecursive(baselineStringTree, currentStringTree, "Mai2UserPlaylog (STRING_MAPPER)") } @Test fun testJackson3JsonMapperWithKotlinModule() { - val mai2Export = Maimai2DataExport().apply { - userData = Mai2UserDetail().apply { userName = "TestUser" } - userPlaylogList = listOf(Mai2UserPlaylog().apply { isClear = true }) - } - val j3Mapper = JsonMapper.builder() .addModule(KotlinModule.Builder().build()) .build() - val j3Json = j3Mapper.writeValueAsString(mai2Export) + val j3Json = j3Mapper.writeValueAsString(sampleMai2Export()) val j3Tree = j3Mapper.readTree(j3Json) val j3PlaylogNode = j3Tree.at("/userPlaylogList/0") diff --git a/src/test/resources/json/chu3_export_web.json b/src/test/resources/json/chu3_export_web.json index 750d59bc..7707f811 100644 --- a/src/test/resources/json/chu3_export_web.json +++ b/src/test/resources/json/chu3_export_web.json @@ -1 +1 @@ -{"gameId":"SDHD","userData":{"userName":"ChuUser","level":0,"reincarnationNum":0,"exp":"","point":0,"totalPoint":0,"playCount":0,"multiPlayCount":0,"playerRating":0,"highestRating":0,"nameplateId":0,"frameId":0,"characterId":0,"mateId":0,"trophyId":0,"playedTutorialBit":0,"firstTutorialCancelNum":0,"masterTutorialCancelNum":0,"totalMapNum":0,"totalHiScore":0,"totalBasicHighScore":0,"totalAdvancedHighScore":0,"totalExpertHighScore":0,"totalMasterHighScore":0,"totalUltimaHighScore":0,"eventWatchedDate":[2026,8,4,20,55,25,79881752],"friendCount":0,"firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":[2026,8,4,20,55,25,79890738],"lastGameId":"","lastRomVersion":"","lastDataVersion":"","lastPlayDate":[2026,8,4,20,55,25,79901128],"lastPlaceId":0,"lastPlaceName":"","lastRegionId":"","lastRegionName":"","lastAllNetId":"","lastCountryCode":"","userNameEx":"","compatibleCmVersion":"","medal":0,"mapIconId":0,"voiceId":0,"avatarWear":0,"avatarHead":0,"avatarFace":0,"avatarSkin":0,"avatarItem":0,"avatarFront":0,"avatarBack":0,"classEmblemBase":0,"classEmblemMedal":0,"stockedGridCount":0,"exMapLoopCount":0,"netBattlePlayCount":0,"netBattleWinCount":0,"netBattleLoseCount":0,"netBattleConsecutiveWinCount":0,"charaIllustId":0,"skillId":0,"stageId":0,"overPowerPoint":0,"overPowerRate":0,"overPowerLowerRank":0,"avatarPoint":0,"battleRankId":0,"battleRankPoint":0,"eliteRankPoint":0,"netBattle1stCount":0,"netBattle2ndCount":0,"netBattle3rdCount":0,"netBattle4thCount":0,"netBattleCorrection":0,"netBattleErrCnt":0,"netBattleHostErrCnt":0,"battleRewardStatus":0,"battleRewardIndex":0,"battleRewardCount":0,"ext1":0,"ext2":0,"ext3":0,"ext4":0,"ext5":0,"ext6":0,"ext7":0,"ext8":0,"ext9":0,"ext10":0,"extStr1":"","extStr2":"","extLong1":0,"extLong2":0,"rankUpChallengeResults":null,"netBattleEndState":0,"trophyIdSub1":0,"trophyIdSub2":0,"totalScore":0,"isNetBattleHost":false},"userGameOption":{"bgInfo":0,"fieldColor":0,"guideSound":0,"soundEffect":0,"guideLine":0,"speed":0,"optionSet":0,"matching":0,"judgePos":0,"rating":0,"judgeCritical":0,"judgeJustice":0,"judgeAttack":0,"headphone":0,"playerLevel":0,"successTap":0,"successExTap":0,"successSlideHold":0,"successAir":0,"successFlick":0,"successSkill":0,"successTapTimbre":0,"privacy":0,"mirrorFumen":0,"selectMusicFilterLv":0,"sortMusicFilterLv":0,"sortMusicGenre":0,"categoryDetail":0,"judgeTimingOffset":0,"playTimingOffset":0,"fieldWallPosition":0,"resultVoiceShort":0,"notesThickness":0,"judgeAppendSe":0,"trackSkip":0,"hardJudge":0,"speed_120":0,"fieldWallPosition_120":0,"playTimingOffset_120":0,"judgeTimingOffset_120":0,"ext1":0,"ext2":0,"ext3":0,"ext4":0,"ext5":0,"ext6":0,"ext7":0,"ext8":0,"ext9":0,"ext10":0},"userActivityList":[],"userCharacterList":[],"userChargeList":[],"userCourseList":[],"userDuelList":[],"userItemList":[],"userMapList":[],"userMusicDetailList":[],"userPlaylogList":[{"orderId":0,"sortNumber":0,"placeId":0,"userPlayDate":[2026,8,4,20,55,25,77926936],"musicId":100,"level":1,"customId":0,"playedUserId1":0,"playedUserId2":0,"playedUserId3":0,"playedMusicLevel1":0,"playedMusicLevel2":0,"playedMusicLevel3":0,"playedCustom1":0,"playedCustom2":0,"playedCustom3":0,"track":0,"score":1000000,"rank":0,"maxCombo":0,"maxChain":0,"rateTap":0,"rateHold":0,"rateSlide":0,"rateAir":0,"rateFlick":0,"judgeGuilty":0,"judgeAttack":0,"judgeJustice":0,"judgeCritical":0,"judgeHeaven":0,"eventId":0,"playerRating":0,"fullChainKind":0,"characterId":0,"charaIllustId":0,"skillId":0,"playKind":0,"skillLevel":0,"skillEffect":0,"commonId":0,"regionId":0,"machineType":0,"ticketId":0,"achievement":1000000,"beforeRating":0,"afterRating":0,"isAllPerfect":true,"isNewRecord":false,"isFullCombo":true,"isAllJustice":true,"isContinue":false,"isFreeToPlay":false,"isClear":true}],"userMateList":[],"userGeneralDataList":[],"userMiscList":{"recentNbSelect":[],"recentNbMusic":[],"favMusic":[]}} \ No newline at end of file +{"gameId":"SDHD","userData":{"userName":"ChuUser","level":0,"reincarnationNum":0,"exp":"","point":0,"totalPoint":0,"playCount":0,"multiPlayCount":0,"playerRating":0,"highestRating":0,"nameplateId":0,"frameId":0,"characterId":0,"mateId":0,"trophyId":0,"playedTutorialBit":0,"firstTutorialCancelNum":0,"masterTutorialCancelNum":0,"totalMapNum":0,"totalHiScore":0,"totalBasicHighScore":0,"totalAdvancedHighScore":0,"totalExpertHighScore":0,"totalMasterHighScore":0,"totalUltimaHighScore":0,"eventWatchedDate":"2026-01-01T00:00:00","friendCount":0,"firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":"2026-01-01T00:00:00","lastGameId":"","lastRomVersion":"","lastDataVersion":"","lastPlayDate":"2026-01-01T00:00:00","lastPlaceId":0,"lastPlaceName":"","lastRegionId":"","lastRegionName":"","lastAllNetId":"","lastCountryCode":"","userNameEx":"","compatibleCmVersion":"","medal":0,"mapIconId":0,"voiceId":0,"avatarWear":0,"avatarHead":0,"avatarFace":0,"avatarSkin":0,"avatarItem":0,"avatarFront":0,"avatarBack":0,"classEmblemBase":0,"classEmblemMedal":0,"stockedGridCount":0,"exMapLoopCount":0,"netBattlePlayCount":0,"netBattleWinCount":0,"netBattleLoseCount":0,"netBattleConsecutiveWinCount":0,"charaIllustId":0,"skillId":0,"stageId":0,"overPowerPoint":0,"overPowerRate":0,"overPowerLowerRank":0,"avatarPoint":0,"battleRankId":0,"battleRankPoint":0,"eliteRankPoint":0,"netBattle1stCount":0,"netBattle2ndCount":0,"netBattle3rdCount":0,"netBattle4thCount":0,"netBattleCorrection":0,"netBattleErrCnt":0,"netBattleHostErrCnt":0,"battleRewardStatus":0,"battleRewardIndex":0,"battleRewardCount":0,"ext1":0,"ext2":0,"ext3":0,"ext4":0,"ext5":0,"ext6":0,"ext7":0,"ext8":0,"ext9":0,"ext10":0,"extStr1":"","extStr2":"","extLong1":0,"extLong2":0,"rankUpChallengeResults":null,"netBattleEndState":0,"trophyIdSub1":0,"trophyIdSub2":0,"totalScore":0,"isNetBattleHost":false},"userGameOption":{"bgInfo":0,"fieldColor":0,"guideSound":0,"soundEffect":0,"guideLine":0,"speed":0,"optionSet":0,"matching":0,"judgePos":0,"rating":0,"judgeCritical":0,"judgeJustice":0,"judgeAttack":0,"headphone":0,"playerLevel":0,"successTap":0,"successExTap":0,"successSlideHold":0,"successAir":0,"successFlick":0,"successSkill":0,"successTapTimbre":0,"privacy":0,"mirrorFumen":0,"selectMusicFilterLv":0,"sortMusicFilterLv":0,"sortMusicGenre":0,"categoryDetail":0,"judgeTimingOffset":0,"playTimingOffset":0,"fieldWallPosition":0,"resultVoiceShort":0,"notesThickness":0,"judgeAppendSe":0,"trackSkip":0,"hardJudge":0,"speed_120":0,"fieldWallPosition_120":0,"playTimingOffset_120":0,"judgeTimingOffset_120":0,"ext1":0,"ext2":0,"ext3":0,"ext4":0,"ext5":0,"ext6":0,"ext7":0,"ext8":0,"ext9":0,"ext10":0},"userActivityList":[],"userCharacterList":[],"userChargeList":[],"userCourseList":[],"userDuelList":[],"userItemList":[],"userMapList":[],"userMusicDetailList":[],"userPlaylogList":[{"orderId":0,"sortNumber":0,"placeId":0,"playDate":"2026-01-01T00:00:00","userPlayDate":"2026-01-01T00:00:00","musicId":100,"level":1,"customId":0,"playedUserId1":0,"playedUserId2":0,"playedUserId3":0,"playedMusicLevel1":0,"playedMusicLevel2":0,"playedMusicLevel3":0,"playedCustom1":0,"playedCustom2":0,"playedCustom3":0,"track":0,"score":1000000,"rank":0,"maxCombo":0,"maxChain":0,"rateTap":0,"rateHold":0,"rateSlide":0,"rateAir":0,"rateFlick":0,"judgeGuilty":0,"judgeAttack":0,"judgeJustice":0,"judgeCritical":0,"judgeHeaven":0,"eventId":0,"playerRating":0,"fullChainKind":0,"characterId":0,"charaIllustId":0,"skillId":0,"playKind":0,"skillLevel":0,"skillEffect":0,"commonId":0,"regionId":0,"machineType":0,"ticketId":0,"isAllPerfect":true,"achievement":1000000,"afterRating":0,"beforeRating":0,"isNewRecord":false,"isFullCombo":true,"isAllJustice":true,"isContinue":false,"isFreeToPlay":false,"isClear":true}],"userMateList":[],"userGeneralDataList":[],"userMiscList":{"recentNbSelect":[],"recentNbMusic":[],"favMusic":[]},"userCardPrintStateList":[],"userGachaList":[],"userRegionsList":[],"userCMissionList":[],"userCMissionProgressList":[],"netBattleLogList":[],"userChallengeList":[],"userLinkedVerseList":[],"userVoteList":[],"userLoginBonusList":[]} \ No newline at end of file diff --git a/src/test/resources/json/mai2_export_web.json b/src/test/resources/json/mai2_export_web.json index bfbdf20f..0cba063b 100644 --- a/src/test/resources/json/mai2_export_web.json +++ b/src/test/resources/json/mai2_export_web.json @@ -1 +1 @@ -{"userData":{"userName":"TestUser","friendCode":"","isNetMember":1,"nameplateId":0,"iconId":0,"trophyId":0,"plateId":0,"titleId":0,"partnerId":0,"frameId":0,"selectMapId":0,"totalAwake":0,"gradeRating":0,"musicRating":0,"playerRating":0,"highestRating":0,"gradeRank":0,"classRank":0,"courseRank":0,"contentBit":0,"playCount":0,"eventWatchedDate":"","lastGameId":"","lastRomVersion":"","lastDataVersion":"","lastLoginDate":"","lastPlayDate":"","lastPlayCredit":0,"lastPlayMode":0,"lastPlaceId":0,"lastPlaceName":"","lastAllNetId":0,"lastRegionId":0,"lastRegionName":"","lastCountryCode":"","lastSelectEMoney":0,"lastSelectTicket":0,"lastSelectCourse":0,"lastCountCourse":0,"firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":"","compatibleCmVersion":"","dailyBonusDate":"","dailyCourseBonusDate":"","lastPairLoginDate":"","lastTrialPlayDate":"","playVsCount":0,"playSyncCount":0,"winCount":0,"helpCount":0,"comboCount":0,"totalDeluxscore":0,"totalBasicDeluxscore":0,"totalAdvancedDeluxscore":0,"totalExpertDeluxscore":0,"totalMasterDeluxscore":0,"totalReMasterDeluxscore":0,"totalHiscore":0,"totalBasicHighscore":0,"totalAdvancedHighscore":0,"totalExpertHighscore":0,"totalMasterHighscore":0,"totalReMasterHighscore":0,"totalSync":0,"totalBasicSync":0,"totalAdvancedSync":0,"totalExpertSync":0,"totalMasterSync":0,"totalReMasterSync":0,"totalAchievement":0,"totalBasicAchievement":0,"totalAdvancedAchievement":0,"totalExpertAchievement":0,"totalMasterAchievement":0,"totalReMasterAchievement":0,"playerOldRating":0,"playerNewRating":0,"dateTime":0,"cmLastEmoneyBrand":2,"cmLastEmoneyCredit":69,"mapStock":0,"point":0,"totalPoint":0,"currentPlayCount":0,"renameCredit":0},"userExtend":{"selectMusicId":0,"selectDifficultyId":0,"categoryIndex":0,"musicIndex":0,"extraFlag":0,"selectScoreType":0,"extendContentBit":0,"isPhotoAgree":false,"isGotoCodeRead":false,"selectResultDetails":false,"sortCategorySetting":0,"sortMusicSetting":0,"playStatusSetting":0,"selectResultScoreViewType":0,"selectedCardList":[],"encountMapNpcList":[]},"userOption":{"optionKind":0,"noteSpeed":0,"slideSpeed":0,"touchSpeed":0,"tapDesign":0,"holdDesign":0,"slideDesign":0,"starType":0,"outlineDesign":0,"noteSize":0,"slideSize":0,"touchSize":0,"starRotate":0,"dispCenter":0,"dispChain":0,"dispRate":0,"dispBar":0,"touchEffect":0,"submonitorAnimation":0,"submonitorAchive":0,"submonitorAppeal":0,"matching":0,"trackSkip":0,"brightness":0,"mirrorMode":0,"dispJudge":0,"dispJudgePos":0,"dispJudgeTouchPos":0,"adjustTiming":0,"judgeTiming":0,"ansVolume":0,"tapHoldVolume":0,"criticalSe":0,"tapSe":0,"breakSe":0,"breakVolume":0,"exSe":0,"exVolume":0,"slideSe":0,"slideVolume":0,"touchHoldVolume":0,"damageSeVolume":0,"headPhoneVolume":0,"sortTab":0,"sortMusic":0,"outFrameType":0,"breakSlideVolume":0,"touchVolume":0},"userUdemae":{"rate":0,"maxRate":0,"classValue":0,"maxClassValue":0,"totalWinNum":0,"totalLoseNum":0,"maxWinNum":0,"maxLoseNum":0,"winNum":0,"loseNum":0,"npcTotalWinNum":0,"npcTotalLoseNum":0,"npcMaxWinNum":0,"npcMaxLoseNum":0,"npcWinNum":0,"npcLoseNum":0},"mapEncountNpcList":[],"userActList":[],"userCharacterList":[],"userChargeList":[],"userCourseList":[],"userFavoriteList":[],"userFriendSeasonRankingList":[],"userGeneralDataList":[],"userItemList":[],"userLoginBonusList":[],"userMapList":[{"mapId":1,"distance":100,"isLock":false,"isClear":true,"isComplete":false}],"userMusicDetailList":[],"userIntimateList":[],"userFavoriteMusicList":[],"userKaleidxScopeList":[],"userPlaylogList":[{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":0,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":false,"isHold":false,"isSlide":false,"isTouch":false,"isBreak":false,"isCriticalDisp":false,"isFastLateDisp":false,"fastCount":0,"lateCount":0,"isAchieveNewRecord":false,"isDeluxscoreNewRecord":false,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":false,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":false,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}],"gameId":"SDEZ"} \ No newline at end of file +{"userData":{"userName":"TestUser","friendCode":"","isNetMember":1,"nameplateId":0,"iconId":0,"trophyId":0,"plateId":0,"titleId":0,"partnerId":0,"frameId":0,"selectMapId":0,"totalAwake":0,"gradeRating":0,"musicRating":0,"playerRating":0,"highestRating":0,"gradeRank":0,"classRank":0,"courseRank":0,"contentBit":0,"playCount":0,"eventWatchedDate":"2026-01-01 00:00:00.0","lastGameId":"","lastRomVersion":"","lastDataVersion":"","lastLoginDate":"","lastPlayDate":"2026-01-01 00:00:00.0","lastPlayCredit":0,"lastPlayMode":0,"lastPlaceId":0,"lastPlaceName":"","lastAllNetId":0,"lastRegionId":0,"lastRegionName":"","lastCountryCode":"","lastSelectEMoney":0,"lastSelectTicket":0,"lastSelectCourse":0,"lastCountCourse":0,"firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":"2026-01-01 00:00:00.0","compatibleCmVersion":"","dailyBonusDate":"","dailyCourseBonusDate":"","lastPairLoginDate":"","lastTrialPlayDate":"","playVsCount":0,"playSyncCount":0,"winCount":0,"helpCount":0,"comboCount":0,"totalDeluxscore":0,"totalBasicDeluxscore":0,"totalAdvancedDeluxscore":0,"totalExpertDeluxscore":0,"totalMasterDeluxscore":0,"totalReMasterDeluxscore":0,"totalHiscore":0,"totalBasicHighscore":0,"totalAdvancedHighscore":0,"totalExpertHighscore":0,"totalMasterHighscore":0,"totalReMasterHighscore":0,"totalSync":0,"totalBasicSync":0,"totalAdvancedSync":0,"totalExpertSync":0,"totalMasterSync":0,"totalReMasterSync":0,"totalAchievement":0,"totalBasicAchievement":0,"totalAdvancedAchievement":0,"totalExpertAchievement":0,"totalMasterAchievement":0,"totalReMasterAchievement":0,"playerOldRating":0,"playerNewRating":0,"dateTime":0,"cmLastEmoneyBrand":2,"cmLastEmoneyCredit":69,"mapStock":0,"point":0,"totalPoint":0,"currentPlayCount":0,"renameCredit":0},"userExtend":{"selectMusicId":0,"selectDifficultyId":0,"categoryIndex":0,"musicIndex":0,"extraFlag":0,"selectScoreType":0,"extendContentBit":0,"isPhotoAgree":false,"isGotoCodeRead":false,"selectResultDetails":false,"sortCategorySetting":0,"sortMusicSetting":0,"playStatusSetting":0,"selectResultScoreViewType":0,"selectedCardList":[],"encountMapNpcList":[]},"userOption":{"optionKind":0,"noteSpeed":0,"slideSpeed":0,"touchSpeed":0,"tapDesign":0,"holdDesign":0,"slideDesign":0,"starType":0,"outlineDesign":0,"noteSize":0,"slideSize":0,"touchSize":0,"starRotate":0,"dispCenter":0,"dispChain":0,"dispRate":0,"dispBar":0,"touchEffect":0,"submonitorAnimation":0,"submonitorAchive":0,"submonitorAppeal":0,"matching":0,"trackSkip":0,"brightness":0,"mirrorMode":0,"dispJudge":0,"dispJudgePos":0,"dispJudgeTouchPos":0,"adjustTiming":0,"judgeTiming":0,"ansVolume":0,"tapHoldVolume":0,"criticalSe":0,"tapSe":0,"breakSe":0,"breakVolume":0,"exSe":0,"exVolume":0,"slideSe":0,"slideVolume":0,"touchHoldVolume":0,"damageSeVolume":0,"headPhoneVolume":0,"sortTab":0,"sortMusic":0,"outFrameType":0,"breakSlideVolume":0,"touchVolume":0},"userUdemae":{"rate":0,"maxRate":0,"classValue":0,"maxClassValue":0,"totalWinNum":0,"totalLoseNum":0,"maxWinNum":0,"maxLoseNum":0,"winNum":0,"loseNum":0,"npcTotalWinNum":0,"npcTotalLoseNum":0,"npcMaxWinNum":0,"npcMaxLoseNum":0,"npcWinNum":0,"npcLoseNum":0},"mapEncountNpcList":[],"userActList":[],"userCharacterList":[],"userChargeList":[],"userCourseList":[],"userFavoriteList":[],"userFriendSeasonRankingList":[],"userGeneralDataList":[],"userItemList":[],"userLoginBonusList":[],"userMapList":[{"mapId":1,"distance":100,"isLock":false,"isClear":true,"isComplete":false}],"userMusicDetailList":[],"userIntimateList":[],"userFavoriteMusicList":[],"userKaleidxScopeList":[],"userPlaylogList":[{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":0,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":false,"isHold":false,"isSlide":false,"isTouch":false,"isBreak":false,"isCriticalDisp":false,"isFastLateDisp":false,"fastCount":0,"lateCount":0,"isAchieveNewRecord":false,"isDeluxscoreNewRecord":false,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":false,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":false,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}],"userCardList":[],"userPrintDetailList":[],"userRegionsList":[],"gameId":"SDEZ"} \ No newline at end of file diff --git a/src/test/resources/json/ongeki_export_web.json b/src/test/resources/json/ongeki_export_web.json index 06ba2c1b..670b1222 100644 --- a/src/test/resources/json/ongeki_export_web.json +++ b/src/test/resources/json/ongeki_export_web.json @@ -1 +1 @@ -{"gameId":"SDDT","userData":{"userName":"OngekiUser","level":0,"reincarnationNum":0,"exp":0,"point":0,"totalPoint":0,"playCount":0,"jewelCount":0,"totalJewelCount":0,"medalCount":0,"playerRating":0,"highestRating":0,"battlePoint":0,"bestBattlePoint":0,"overDamageBattlePoint":0,"isDialogWatchedSuggestMemory":false,"nameplateId":0,"trophyId":0,"cardId":0,"characterId":0,"characterVoiceNo":0,"tabSetting":0,"tabSortSetting":0,"cardCategorySetting":0,"cardSortSetting":0,"rivalScoreCategorySetting":0,"playedTutorialBit":0,"firstTutorialCancelNum":0,"sumTechHighScore":0,"sumTechBasicHighScore":0,"sumTechAdvancedHighScore":0,"sumTechExpertHighScore":0,"sumTechMasterHighScore":0,"sumTechLunaticHighScore":0,"sumBattleHighScore":0,"sumBattleBasicHighScore":0,"sumBattleAdvancedHighScore":0,"sumBattleExpertHighScore":0,"sumBattleMasterHighScore":0,"sumBattleLunaticHighScore":0,"eventWatchedDate":"","cmEventWatchedDate":"","firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":"","lastGameId":"","lastRomVersion":"","lastDataVersion":"","compatibleCmVersion":"","lastPlayDate":"","lastPlaceId":0,"lastPlaceName":"","lastRegionId":0,"lastRegionName":"","lastAllNetId":0,"lastUsedDeckId":0,"lastPlayMusicLevel":0,"lastEmoneyBrand":0,"shizukuCount":0,"newPlayerRating":0,"newHighestRating":0,"sumPlatinumScoreStar":0,"sumBasicPlatinumScoreStar":0,"sumAdvancedPlatinumScoreStar":0,"sumExpertPlatinumScoreStar":0,"sumMasterPlatinumScoreStar":0,"sumLunaticPlatinumScoreStar":0,"totalScore":0},"userActivityList":[],"userBossList":[],"userCardList":[],"userChapterList":[],"userCharacterList":[],"userDeckList":[],"userEventMusicList":[],"userEventPointList":[],"userGeneralDataList":[],"userItemList":[],"userKopList":[],"userLoginBonusList":[],"userMemoryChapterList":[],"userMissionPointList":[],"userMusicDetailList":[],"userMusicItemList":[],"userOption":{"optionSet":0,"speed":0,"mirror":0,"judgeTiming":0,"judgeAdjustment":0,"abort":0,"stealthField":0,"tapSound":0,"volGuide":0,"volAll":0,"volTap":0,"volCrTap":0,"volHold":0,"volSide":0,"volFlick":0,"volBell":0,"volEnemy":0,"volSkill":0,"volDamage":0,"colorField":0,"colorLaneBright":0,"colorWallBright":0,"colorLane":0,"colorSide":0,"effectDamage":0,"effectPos":0,"judgeDisp":0,"judgePos":0,"judgeBreak":0,"judgeHit":0,"platinumBreakDisp":0,"judgeCriticalBreak":0,"matching":0,"dispPlayerLv":0,"dispRating":0,"dispBP":0,"headphone":0,"effectAttack":0},"userPlaylogList":[{"sortNumber":0,"placeId":0,"placeName":"","playDate":"","userPlayDate":"","musicId":200,"level":1,"playKind":0,"eventId":0,"eventName":"","eventPoint":0,"playedUserId1":0,"playedUserId2":0,"playedUserId3":0,"playedUserName1":"","playedUserName2":"","playedUserName3":"","playedMusicLevel1":0,"playedMusicLevel2":0,"playedMusicLevel3":0,"cardId1":0,"cardId2":0,"cardId3":0,"cardLevel1":0,"cardLevel2":0,"cardLevel3":0,"cardAttack1":0,"cardAttack2":0,"cardAttack3":0,"bossCharaId":0,"bossLevel":0,"bossAttribute":0,"clearStatus":0,"techScore":1000000,"techScoreRank":0,"battleScore":0,"battleScoreRank":0,"platinumScore":0,"maxCombo":0,"judgeMiss":0,"judgeHit":0,"judgeBreak":0,"judgeCriticalBreak":0,"rateTap":0,"rateHold":0,"rateFlick":0,"rateSideTap":0,"rateSideHold":0,"bellCount":0,"totalBellCount":0,"damageCount":0,"overDamage":0,"isTechNewRecord":false,"isBattleNewRecord":false,"isOverDamageNewRecord":false,"isFullCombo":true,"isFullBell":true,"isAllBreak":true,"playerRating":0,"battlePoint":0,"achievement":1000000,"beforeRating":0,"afterRating":0,"isAllPerfect":true}],"userRivalList":[],"userScenarioList":[],"userStoryList":[],"userTechCountList":[],"userTechEventList":[],"userTradeItemList":[],"userTrainingRoomList":[],"userEventMapList":[],"userSkinList":[],"userRegionsList":[],"userGachaList":[]} \ No newline at end of file +{"gameId":"SDDT","userData":{"userName":"OngekiUser","level":0,"reincarnationNum":0,"exp":0,"point":0,"totalPoint":0,"playCount":0,"jewelCount":0,"totalJewelCount":0,"medalCount":0,"playerRating":0,"highestRating":0,"battlePoint":0,"bestBattlePoint":0,"overDamageBattlePoint":0,"isDialogWatchedSuggestMemory":false,"nameplateId":0,"trophyId":0,"cardId":0,"characterId":0,"characterVoiceNo":0,"tabSetting":0,"tabSortSetting":0,"cardCategorySetting":0,"cardSortSetting":0,"rivalScoreCategorySetting":0,"playedTutorialBit":0,"firstTutorialCancelNum":0,"sumTechHighScore":0,"sumTechBasicHighScore":0,"sumTechAdvancedHighScore":0,"sumTechExpertHighScore":0,"sumTechMasterHighScore":0,"sumTechLunaticHighScore":0,"sumBattleHighScore":0,"sumBattleBasicHighScore":0,"sumBattleAdvancedHighScore":0,"sumBattleExpertHighScore":0,"sumBattleMasterHighScore":0,"sumBattleLunaticHighScore":0,"eventWatchedDate":"2026-01-01 00:00:00.0","cmEventWatchedDate":"","firstGameId":"","firstRomVersion":"","firstDataVersion":"","firstPlayDate":"2026-01-01 00:00:00.0","lastGameId":"","lastRomVersion":"","lastDataVersion":"","compatibleCmVersion":"","lastPlayDate":"2026-01-01 00:00:00.0","lastPlaceId":0,"lastPlaceName":"","lastRegionId":0,"lastRegionName":"","lastAllNetId":0,"lastUsedDeckId":0,"lastPlayMusicLevel":0,"lastEmoneyBrand":0,"shizukuCount":0,"newPlayerRating":0,"newHighestRating":0,"sumPlatinumScoreStar":0,"sumBasicPlatinumScoreStar":0,"sumAdvancedPlatinumScoreStar":0,"sumExpertPlatinumScoreStar":0,"sumMasterPlatinumScoreStar":0,"sumLunaticPlatinumScoreStar":0,"totalScore":0},"userActivityList":[],"userBossList":[],"userCardList":[],"userChapterList":[],"userCharacterList":[],"userDeckList":[],"userEventMusicList":[],"userEventPointList":[],"userGeneralDataList":[],"userItemList":[],"userKopList":[],"userLoginBonusList":[],"userMemoryChapterList":[],"userMissionPointList":[],"userMusicDetailList":[],"userMusicItemList":[],"userOption":{"optionSet":0,"speed":0,"mirror":0,"judgeTiming":0,"judgeAdjustment":0,"abort":0,"stealthField":0,"tapSound":0,"volGuide":0,"volAll":0,"volTap":0,"volCrTap":0,"volHold":0,"volSide":0,"volFlick":0,"volBell":0,"volEnemy":0,"volSkill":0,"volDamage":0,"colorField":0,"colorLaneBright":0,"colorWallBright":0,"colorLane":0,"colorSide":0,"effectDamage":0,"effectPos":0,"judgeDisp":0,"judgePos":0,"judgeBreak":0,"judgeHit":0,"platinumBreakDisp":0,"judgeCriticalBreak":0,"matching":0,"dispPlayerLv":0,"dispRating":0,"dispBP":0,"headphone":0,"effectAttack":0},"userPlaylogList":[{"sortNumber":0,"placeId":0,"placeName":"","playDate":"","userPlayDate":"","musicId":200,"level":1,"playKind":0,"eventId":0,"eventName":"","eventPoint":0,"playedUserId1":0,"playedUserId2":0,"playedUserId3":0,"playedUserName1":"","playedUserName2":"","playedUserName3":"","playedMusicLevel1":0,"playedMusicLevel2":0,"playedMusicLevel3":0,"cardId1":0,"cardId2":0,"cardId3":0,"cardLevel1":0,"cardLevel2":0,"cardLevel3":0,"cardAttack1":0,"cardAttack2":0,"cardAttack3":0,"bossCharaId":0,"bossLevel":0,"bossAttribute":0,"clearStatus":0,"techScore":1000000,"techScoreRank":0,"battleScore":0,"battleScoreRank":0,"platinumScore":0,"maxCombo":0,"judgeMiss":0,"judgeHit":0,"judgeBreak":0,"judgeCriticalBreak":0,"rateTap":0,"rateHold":0,"rateFlick":0,"rateSideTap":0,"rateSideHold":0,"bellCount":0,"totalBellCount":0,"damageCount":0,"overDamage":0,"isTechNewRecord":false,"isBattleNewRecord":false,"isOverDamageNewRecord":false,"isFullCombo":true,"isFullBell":true,"isAllBreak":true,"playerRating":0,"battlePoint":0,"isAllPerfect":true,"achievement":1000000,"afterRating":0,"beforeRating":0}],"userRivalList":[],"userScenarioList":[],"userStoryList":[],"userTechCountList":[],"userTechEventList":[],"userTradeItemList":[],"userTrainingRoomList":[],"userEventMapList":[],"userSkinList":[],"userRegionsList":[],"userGachaList":[]} \ No newline at end of file diff --git a/src/test/resources/json/wacca_export_web.json b/src/test/resources/json/wacca_export_web.json new file mode 100644 index 00000000..e7ca77a4 --- /dev/null +++ b/src/test/resources/json/wacca_export_web.json @@ -0,0 +1 @@ +{"gameId":"SDFE","userData":{"card":{"luid":"","registerTime":"2026-01-01T00:00:00","accessTime":"2026-01-01T00:00:00","isGhost":false,"rankingBanned":false,"status":"NORMAL","isLinked":false},"userName":"WaccaUser","xp":0,"wp":500,"wpTotal":500,"wpSpent":0,"danType":0,"danLevel":0,"titles":[0,0,0],"playerRating":0,"highestRating":0,"vipExpireTime":0,"alwaysVip":false,"loginCount":0,"loginCountDays":0,"loginCountDaysConsec":0,"loginCountToday":0,"playCounts":[0,0,0,0,0],"friendViews":[0,0,0],"lastClientId":"","lastRomVersion":"1.0.0","lastSongInfo":[0,0,0,0,0],"lastConsecDate":0,"lastPlayDate":0,"firstPlayDate":0,"gateTutorialFlags":"[[1, 0], [2, 0], [3, 0], [4, 0], [5, 0]]","favoriteSongs":[],"totalScore":0,"moddedWp":500,"moddedVipExpire":0},"userOptionList":[],"userBingoList":[],"userFriendList":[],"userGateList":[],"userItemList":[],"userBestScoreList":[],"userPlaylogList":[{"musicId":300,"level":1,"levelConst":0.0,"achievement":990000,"judgements":[0,0,0,0],"maxCombo":0,"grade":0,"isClear":true,"isMissless":true,"isFullCombo":true,"isAllPerfect":true,"giveUp":false,"skillPt":0,"fastCt":0,"lateCt":0,"newRecord":false,"beforeRating":0,"afterRating":0,"userPlayDate":0}],"userStageUpList":[]} \ No newline at end of file