mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-09-11 21:45:26 -04:00
Reduced amount of test setup required to write a new integration test by introducing a new IntegrationTest superclass that encapsulates common steps
This commit is contained in:
+4
-32
@@ -1,47 +1,19 @@
|
||||
package com.projectswg.holocore.resources.support.global.zone.creation
|
||||
|
||||
import com.projectswg.holocore.headless.HeadlessSWGClient
|
||||
import com.projectswg.holocore.headless.MemoryUserDatabase
|
||||
import com.projectswg.holocore.resources.support.objects.swg.SWGObject
|
||||
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatDeathblowService
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatExperienceService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.ExperiencePointService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.assertAll
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class CharacterCreationTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
class CharacterCreationTest : IntegrationTest() {
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(SkillService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
registerService(CombatDeathblowService())
|
||||
registerService(ExperiencePointService())
|
||||
registerService(CombatExperienceService())
|
||||
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
fun setUpUser() {
|
||||
addUser("username", "password")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -26,55 +26,12 @@
|
||||
***********************************************************************************/
|
||||
package com.projectswg.holocore.services.gameplay.player
|
||||
|
||||
import com.projectswg.common.data.location.Location
|
||||
import com.projectswg.holocore.headless.*
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.ServerData
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.npc.NpcStaticSpawnLoader
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.NPCCreator
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.SimpleSpawnInfo
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.Spawner
|
||||
import com.projectswg.holocore.resources.support.objects.ObjectCreator
|
||||
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureDifficulty
|
||||
import com.projectswg.holocore.resources.support.objects.swg.custom.AIObject
|
||||
import com.projectswg.holocore.services.gameplay.player.character.TippingService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.support.global.chat.ChatMailService
|
||||
import com.projectswg.holocore.services.support.global.chat.ChatSystemService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.services.support.global.zone.sui.SuiService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class TipCreditsTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(SkillService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
registerService(ChatSystemService())
|
||||
registerService(ChatMailService())
|
||||
registerService(SuiService())
|
||||
registerService(TippingService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
class TipCreditsTest : IntegrationTest() {
|
||||
|
||||
@Test
|
||||
fun negativeAmount() {
|
||||
@@ -101,7 +58,7 @@ class TipCreditsTest : TestRunnerSimulatedWorld() {
|
||||
@Test
|
||||
fun npc() {
|
||||
val zonedInCharacter1 = createZonedInCharacter("Playerone", "Charone")
|
||||
val womprat = spawnNPCs("creature_womprat", zonedInCharacter1.player.creatureObject.location, 1).first()
|
||||
val womprat = spawnNPC("creature_womprat", zonedInCharacter1.player.creatureObject.location)
|
||||
|
||||
assertThrows(TipException::class.java) {
|
||||
zonedInCharacter1.tipCash(womprat, 1)
|
||||
@@ -181,35 +138,10 @@ class TipCreditsTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private fun createZonedInCharacter(username: String, characterName: String): ZonedInCharacter {
|
||||
val password = "password"
|
||||
memoryUserDatabase.addUser(username, password)
|
||||
addUser(username, password)
|
||||
return HeadlessSWGClient.createZonedInCharacter(username, password, characterName)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@BeforeAll
|
||||
fun setUpAll() {
|
||||
ServerData.terrains // Eagerly load, so even the very first command is fast in the 'swimming' state check
|
||||
}
|
||||
}
|
||||
|
||||
private fun spawnNPCs(npcId: String, location: Location, amount: Int): Collection<AIObject> {
|
||||
val egg = ObjectCreator.createObjectFromTemplate("object/tangible/ground_spawning/shared_patrol_spawner.iff")
|
||||
egg.moveToContainer(null, location)
|
||||
|
||||
val spawnInfo = SimpleSpawnInfo.builder()
|
||||
.withNpcId(npcId)
|
||||
.withDifficulty(CreatureDifficulty.NORMAL)
|
||||
.withMinLevel(1)
|
||||
.withMaxLevel(1)
|
||||
.withLocation(location)
|
||||
.withAmount(amount)
|
||||
.withSpawnerFlag(NpcStaticSpawnLoader.SpawnerFlag.ATTACKABLE)
|
||||
.build()
|
||||
|
||||
return NPCCreator.createAllNPCs(Spawner(spawnInfo, egg))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private data class CreditsSnapshot(private val character: ZonedInCharacter) {
|
||||
|
||||
+3
-24
@@ -27,40 +27,19 @@
|
||||
package com.projectswg.holocore.services.gameplay.player.experience
|
||||
|
||||
import com.projectswg.holocore.headless.HeadlessSWGClient
|
||||
import com.projectswg.holocore.headless.MemoryUserDatabase
|
||||
import com.projectswg.holocore.headless.adminGrantSkill
|
||||
import com.projectswg.holocore.headless.surrenderSkill
|
||||
import com.projectswg.holocore.resources.support.global.player.AccessLevel
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class SkillTreeTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
class SkillTreeTest : IntegrationTest() {
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
memoryUserDatabase.addUser("username", "password", accessLevel = AccessLevel.DEV)
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(SkillService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
addUser("username", "password", accessLevel = AccessLevel.DEV)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -27,39 +27,11 @@
|
||||
package com.projectswg.holocore.services.gameplay.player.group
|
||||
|
||||
import com.projectswg.holocore.headless.*
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(SkillService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
|
||||
registerService(GroupService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
class GroupTest : IntegrationTest() {
|
||||
|
||||
@Test
|
||||
fun formGroup() {
|
||||
@@ -81,8 +53,10 @@ class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
zonedInCharacter1.makeGroupLeader(zonedInCharacter2)
|
||||
|
||||
assertFalse(zonedInCharacter1.isGroupLeader())
|
||||
assertTrue(zonedInCharacter2.isGroupLeader())
|
||||
assertAll(
|
||||
{ assertFalse(zonedInCharacter1.isGroupLeader()) },
|
||||
{ assertTrue(zonedInCharacter2.isGroupLeader()) },
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -94,8 +68,10 @@ class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
zonedInCharacter2.makeGroupLeader(zonedInCharacter2)
|
||||
|
||||
assertFalse(zonedInCharacter2.isGroupLeader())
|
||||
assertTrue(zonedInCharacter1.isGroupLeader())
|
||||
assertAll(
|
||||
{ assertFalse(zonedInCharacter2.isGroupLeader()) },
|
||||
{ assertTrue(zonedInCharacter1.isGroupLeader()) },
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -111,9 +87,11 @@ class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
zonedInCharacter2.leaveCurrentGroup()
|
||||
|
||||
assertTrue(zonedInCharacter1.isInGroupWith(zonedInCharacter3))
|
||||
assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2))
|
||||
assertFalse(zonedInCharacter3.isInGroupWith(zonedInCharacter2))
|
||||
assertAll(
|
||||
{ assertTrue(zonedInCharacter1.isInGroupWith(zonedInCharacter3)) },
|
||||
{ assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2)) },
|
||||
{ assertFalse(zonedInCharacter3.isInGroupWith(zonedInCharacter2)) },
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -129,9 +107,11 @@ class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
zonedInCharacter1.kickFromGroup(zonedInCharacter2)
|
||||
|
||||
assertTrue(zonedInCharacter1.isInGroupWith(zonedInCharacter3))
|
||||
assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2))
|
||||
assertFalse(zonedInCharacter3.isInGroupWith(zonedInCharacter2))
|
||||
assertAll(
|
||||
{ assertTrue(zonedInCharacter1.isInGroupWith(zonedInCharacter3)) },
|
||||
{ assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2)) },
|
||||
{ assertFalse(zonedInCharacter3.isInGroupWith(zonedInCharacter2)) },
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -147,14 +127,16 @@ class GroupTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
zonedInCharacter1.leaveCurrentGroup()
|
||||
|
||||
assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2))
|
||||
assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter3))
|
||||
assertTrue(zonedInCharacter2.isGroupLeader() || zonedInCharacter3.isGroupLeader(), "one of the remaining members should be the new leader")
|
||||
assertAll(
|
||||
{ assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter2)) },
|
||||
{ assertFalse(zonedInCharacter1.isInGroupWith(zonedInCharacter3)) },
|
||||
{ assertTrue(zonedInCharacter2.isGroupLeader() || zonedInCharacter3.isGroupLeader(), "one of the remaining members should be the new leader") },
|
||||
)
|
||||
}
|
||||
|
||||
private fun createZonedInCharacter(username: String, characterName: String): ZonedInCharacter {
|
||||
val password = "password"
|
||||
memoryUserDatabase.addUser(username, password)
|
||||
addUser(username, password)
|
||||
return HeadlessSWGClient.createZonedInCharacter(username, password, characterName)
|
||||
}
|
||||
|
||||
|
||||
@@ -26,34 +26,18 @@
|
||||
***********************************************************************************/
|
||||
package com.projectswg.holocore.services.support
|
||||
|
||||
import com.projectswg.holocore.headless.*
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import com.projectswg.holocore.headless.HeadlessSWGClient
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
|
||||
class CharacterManagementTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(CharacterCreationService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
class CharacterManagementTest : IntegrationTest() {
|
||||
|
||||
@Test
|
||||
fun deleteCharacter() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("username")
|
||||
val characterSelectionScreen = headlessSWGClient.login("password")
|
||||
val characterId = characterSelectionScreen.createCharacter("firstcharacter")
|
||||
@@ -65,7 +49,7 @@ class CharacterManagementTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun characterCreationRateLimit() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("username")
|
||||
val characterSelectionScreen = headlessSWGClient.login("password")
|
||||
characterSelectionScreen.createCharacter("firstcharacter")
|
||||
|
||||
@@ -27,58 +27,21 @@
|
||||
package com.projectswg.holocore.services.support
|
||||
|
||||
import com.projectswg.common.data.encodables.tangible.Posture
|
||||
import com.projectswg.common.data.location.Location
|
||||
import com.projectswg.holocore.headless.*
|
||||
import com.projectswg.holocore.headless.HeadlessSWGClient
|
||||
import com.projectswg.holocore.headless.adminKill
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.npc.NpcStaticSpawnLoader
|
||||
import com.projectswg.holocore.resources.support.global.player.AccessLevel
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.NPCCreator
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.SimpleSpawnInfo
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.Spawner
|
||||
import com.projectswg.holocore.resources.support.objects.ObjectCreator
|
||||
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureDifficulty
|
||||
import com.projectswg.holocore.resources.support.objects.swg.custom.AIObject
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatDeathblowService
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatExperienceService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.ExperiencePointService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class KillAdminCommandTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(SkillService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
registerService(CombatDeathblowService())
|
||||
registerService(ExperiencePointService())
|
||||
registerService(CombatExperienceService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
class KillAdminCommandTest : IntegrationTest() {
|
||||
|
||||
@Test
|
||||
fun killNpc() {
|
||||
memoryUserDatabase.addUser("username", "password", AccessLevel.DEV)
|
||||
addUser("username", "password", AccessLevel.DEV)
|
||||
val character = HeadlessSWGClient.createZonedInCharacter("username", "password", "adminchar")
|
||||
val npc = spawnNPCs("creature_bantha", character.player.creatureObject.location, 1, NpcStaticSpawnLoader.SpawnerFlag.ATTACKABLE).first()
|
||||
val npc = spawnNPC("creature_bantha", character.player.creatureObject.location, NpcStaticSpawnLoader.SpawnerFlag.ATTACKABLE)
|
||||
|
||||
character.adminKill(npc)
|
||||
|
||||
@@ -87,9 +50,9 @@ class KillAdminCommandTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun killInvulnerableNpc() {
|
||||
memoryUserDatabase.addUser("username", "password", AccessLevel.DEV)
|
||||
addUser("username", "password", AccessLevel.DEV)
|
||||
val character = HeadlessSWGClient.createZonedInCharacter("username", "password", "adminchar")
|
||||
val npc = spawnNPCs("creature_bantha", character.player.creatureObject.location, 1, NpcStaticSpawnLoader.SpawnerFlag.INVULNERABLE).first()
|
||||
val npc = spawnNPC("creature_bantha", character.player.creatureObject.location, NpcStaticSpawnLoader.SpawnerFlag.INVULNERABLE)
|
||||
|
||||
character.adminKill(npc)
|
||||
|
||||
@@ -101,7 +64,7 @@ class KillAdminCommandTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun killSelf() {
|
||||
memoryUserDatabase.addUser("username", "password", AccessLevel.DEV)
|
||||
addUser("username", "password", AccessLevel.DEV)
|
||||
val character = HeadlessSWGClient.createZonedInCharacter("username", "password", "adminchar")
|
||||
|
||||
character.adminKill(character.player.creatureObject)
|
||||
@@ -109,21 +72,4 @@ class KillAdminCommandTest : TestRunnerSimulatedWorld() {
|
||||
assertNotEquals(Posture.DEAD, character.player.creatureObject)
|
||||
}
|
||||
|
||||
private fun spawnNPCs(npcId: String, location: Location, amount: Int, spawnerFlag: NpcStaticSpawnLoader.SpawnerFlag): Collection<AIObject> {
|
||||
val egg = ObjectCreator.createObjectFromTemplate("object/tangible/ground_spawning/shared_patrol_spawner.iff")
|
||||
egg.moveToContainer(null, location)
|
||||
|
||||
val spawnInfo = SimpleSpawnInfo.builder()
|
||||
.withNpcId(npcId)
|
||||
.withDifficulty(CreatureDifficulty.NORMAL)
|
||||
.withMinLevel(1)
|
||||
.withMaxLevel(1)
|
||||
.withLocation(location)
|
||||
.withAmount(amount)
|
||||
.withSpawnerFlag(spawnerFlag)
|
||||
.build()
|
||||
|
||||
return NPCCreator.createAllNPCs(Spawner(spawnInfo, egg))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,32 +26,20 @@
|
||||
***********************************************************************************/
|
||||
package com.projectswg.holocore.services.support
|
||||
|
||||
import com.projectswg.holocore.headless.*
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.test.runners.TestRunnerSimulatedWorld
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import com.projectswg.holocore.headless.AccountBannedException
|
||||
import com.projectswg.holocore.headless.HeadlessSWGClient
|
||||
import com.projectswg.holocore.headless.WrongClientVersionException
|
||||
import com.projectswg.holocore.headless.WrongCredentialsException
|
||||
import com.projectswg.holocore.test.runners.IntegrationTest
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
|
||||
class LoginTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun tearDown() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
class LoginTest : IntegrationTest() {
|
||||
|
||||
@Test
|
||||
fun validCredentials() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("username")
|
||||
|
||||
val characterSelectionScreen = headlessSWGClient.login("password")
|
||||
@@ -61,7 +49,7 @@ class LoginTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun validCredentialsButBanned() {
|
||||
memoryUserDatabase.addUser("username", "password", banned = true)
|
||||
addUser("username", "password", banned = true)
|
||||
val headlessSWGClient = HeadlessSWGClient("username")
|
||||
|
||||
assertThrows<AccountBannedException> { headlessSWGClient.login("password") }
|
||||
@@ -69,7 +57,7 @@ class LoginTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun wrongUsername() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("wrongusername")
|
||||
|
||||
assertThrows<WrongCredentialsException> { headlessSWGClient.login("password") }
|
||||
@@ -77,7 +65,7 @@ class LoginTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun wrongPassword() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("username")
|
||||
|
||||
assertThrows<WrongCredentialsException> { headlessSWGClient.login("wrongpassword") }
|
||||
@@ -85,7 +73,7 @@ class LoginTest : TestRunnerSimulatedWorld() {
|
||||
|
||||
@Test
|
||||
fun wrongVersion() {
|
||||
memoryUserDatabase.addUser("username", "password")
|
||||
addUser("username", "password")
|
||||
val headlessSWGClient = HeadlessSWGClient("username", "20030404-14:00")
|
||||
|
||||
assertThrows<WrongClientVersionException> { headlessSWGClient.login("password") }
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2023 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of Holocore. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* Holocore is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* Holocore is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with Holocore. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.holocore.test.runners
|
||||
|
||||
import com.projectswg.common.data.location.Location
|
||||
import com.projectswg.holocore.headless.MemoryUserDatabase
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.ServerData
|
||||
import com.projectswg.holocore.resources.support.data.server_info.loader.npc.NpcStaticSpawnLoader
|
||||
import com.projectswg.holocore.resources.support.global.player.AccessLevel
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.NPCCreator
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.SimpleSpawnInfo
|
||||
import com.projectswg.holocore.resources.support.npc.spawn.Spawner
|
||||
import com.projectswg.holocore.resources.support.objects.ObjectCreator
|
||||
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureDifficulty
|
||||
import com.projectswg.holocore.resources.support.objects.swg.custom.AIObject
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatDeathblowService
|
||||
import com.projectswg.holocore.services.gameplay.combat.CombatExperienceService
|
||||
import com.projectswg.holocore.services.gameplay.player.character.TippingService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.ExperiencePointService
|
||||
import com.projectswg.holocore.services.gameplay.player.experience.skills.SkillService
|
||||
import com.projectswg.holocore.services.gameplay.player.group.GroupService
|
||||
import com.projectswg.holocore.services.support.global.chat.ChatMailService
|
||||
import com.projectswg.holocore.services.support.global.chat.ChatSystemService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandExecutionService
|
||||
import com.projectswg.holocore.services.support.global.commands.CommandQueueService
|
||||
import com.projectswg.holocore.services.support.global.zone.CharacterLookupService
|
||||
import com.projectswg.holocore.services.support.global.zone.LoginService
|
||||
import com.projectswg.holocore.services.support.global.zone.ZoneService
|
||||
import com.projectswg.holocore.services.support.global.zone.creation.CharacterCreationService
|
||||
import com.projectswg.holocore.services.support.global.zone.sui.SuiService
|
||||
import com.projectswg.holocore.services.support.objects.SimulatedObjectStorage
|
||||
import com.projectswg.holocore.services.support.objects.awareness.AwarenessService
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
|
||||
/**
|
||||
* Integration test runner that sets up all the services required for a full integration test.
|
||||
* This includes all the services required for a character to be able to log in and perform actions.
|
||||
*
|
||||
* Integrations tests should be using [com.projectswg.holocore.headless.HeadlessSWGClient] to perform actions.
|
||||
*/
|
||||
abstract class IntegrationTest : TestRunnerSynchronousIntents() {
|
||||
|
||||
private val memoryUserDatabase = MemoryUserDatabase()
|
||||
|
||||
@BeforeEach
|
||||
fun setUpServices() {
|
||||
registerService(CharacterLookupService())
|
||||
registerService(SimulatedObjectStorage())
|
||||
registerService(AwarenessService())
|
||||
registerService(LoginService(memoryUserDatabase))
|
||||
registerService(ZoneService())
|
||||
registerService(CommandQueueService(5))
|
||||
registerService(CommandExecutionService())
|
||||
registerService(CharacterCreationService())
|
||||
registerService(ExperiencePointService())
|
||||
registerService(CombatExperienceService())
|
||||
registerService(CombatDeathblowService())
|
||||
registerService(SkillService())
|
||||
registerService(ChatSystemService())
|
||||
registerService(ChatMailService())
|
||||
registerService(SuiService())
|
||||
registerService(TippingService())
|
||||
registerService(GroupService())
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun wipeUserDatabase() {
|
||||
memoryUserDatabase.clear()
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@BeforeAll
|
||||
fun setUpAll() {
|
||||
ServerData.terrains // Eagerly load, so even the very first command is fast in the 'swimming' state check
|
||||
}
|
||||
}
|
||||
|
||||
fun addUser(username: String, password: String, accessLevel: AccessLevel = AccessLevel.PLAYER, banned: Boolean = false) {
|
||||
memoryUserDatabase.addUser(username, password, accessLevel, banned)
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawns a single NPC at the given location.
|
||||
*
|
||||
* @param npcId the ID of the NPC to spawn - e.g. "creature_bantha"
|
||||
* @param location the location to spawn the NPCs at
|
||||
* @param spawnerFlag the spawner flag to use - defaults to [NpcStaticSpawnLoader.SpawnerFlag.ATTACKABLE]
|
||||
*/
|
||||
fun spawnNPC(npcId: String, location: Location, spawnerFlag: NpcStaticSpawnLoader.SpawnerFlag = NpcStaticSpawnLoader.SpawnerFlag.ATTACKABLE): AIObject {
|
||||
val egg = ObjectCreator.createObjectFromTemplate("object/tangible/ground_spawning/shared_patrol_spawner.iff")
|
||||
egg.moveToContainer(null, location)
|
||||
|
||||
val spawnInfo = SimpleSpawnInfo.builder()
|
||||
.withNpcId(npcId)
|
||||
.withDifficulty(CreatureDifficulty.NORMAL)
|
||||
.withMinLevel(1)
|
||||
.withMaxLevel(1)
|
||||
.withLocation(location)
|
||||
.withAmount(1)
|
||||
.withSpawnerFlag(spawnerFlag)
|
||||
.build()
|
||||
|
||||
return NPCCreator.createAllNPCs(Spawner(spawnInfo, egg)).first()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user