Merge pull request #341 from madsboddum/335

Desired outcome of active_quest can now be flipped and task check is …
This commit is contained in:
Josh Larson
2021-03-15 12:42:01 -04:00
committed by GitHub
5 changed files with 195 additions and 9 deletions

View File

@@ -35,11 +35,13 @@ import java.util.Collection;
public class ActiveQuestRequirement implements Requirement {
private final String questName;
private final int task;
private final boolean active;
private final Integer task;
public ActiveQuestRequirement(String questName, int task) {
public ActiveQuestRequirement(String questName, boolean active, Integer task) {
this.questName = questName;
this.task = task;
this.active = active;
}
@Override
@@ -47,15 +49,32 @@ public class ActiveQuestRequirement implements Requirement {
PlayerObject playerObject = player.getPlayerObject();
if (!playerObject.isQuestInJournal(questName)) {
return false;
return !active;
}
if (playerObject.isQuestComplete(questName)) {
return false;
return !active;
}
Collection<Integer> questActiveTasks = playerObject.getQuestActiveTasks(questName);
return questActiveTasks.contains(task);
if (task != null) {
Collection<Integer> questActiveTasks = playerObject.getQuestActiveTasks(questName);
boolean taskActive = questActiveTasks.contains(task);
return taskActive == active;
}
return active;
}
public String getQuestName() {
return questName;
}
public Integer getTask() {
return task;
}
public boolean isActive() {
return active;
}
}

View File

@@ -36,8 +36,18 @@ public class ActiveQuestRequirementParser implements RequirementParser<ActiveQue
@Override
public ActiveQuestRequirement parse(Map<String, Object> args) {
String questName = (String) args.get("quest");
int task = (int) args.get("task");
boolean active = (Boolean) args.get("active");
Long task = (Long) args.get("task");
return new ActiveQuestRequirement(questName, task);
return new ActiveQuestRequirement(questName, active, getTaskValue(task));
}
private Integer getTaskValue(Long task) {
if (task == null) {
// The parameter is optional
return null;
}
return task.intValue();
}
}

View File

@@ -0,0 +1,100 @@
package com.projectswg.holocore.resources.gameplay.conversation.requirements;
import com.projectswg.holocore.resources.support.global.player.Player;
import com.projectswg.holocore.resources.support.objects.swg.player.PlayerObject;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ActiveQuestRequirementTest {
private Player player;
private PlayerObject playerObject;
private String questName;
@Before
public void setup() {
player = mock(Player.class);
playerObject = mock(PlayerObject.class);
questName = "testquest";
when(player.getPlayerObject()).thenReturn(playerObject);
}
@Test
public void questMissingInJournal() {
Integer task = null;
boolean active = true;
ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task);
when(playerObject.isQuestInJournal(questName)).thenReturn(false);
boolean result = requirement.test(player);
assertFalse(result);
}
@Test
public void questComplete() {
Integer task = null;
boolean active = true;
ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task);
when(playerObject.isQuestInJournal(questName)).thenReturn(true);
when(playerObject.isQuestComplete(questName)).thenReturn(true);
boolean result = requirement.test(player);
assertFalse(result);
}
@Test
public void taskActive() {
Integer task = 1;
boolean active = true;
ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task);
when(playerObject.isQuestInJournal(questName)).thenReturn(true);
when(playerObject.isQuestComplete(questName)).thenReturn(false);
when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task));
boolean result = requirement.test(player);
assertTrue(result);
}
@Test
public void taskActiveFlipped() {
Integer task = 1;
boolean active = false;
ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task);
when(playerObject.isQuestInJournal(questName)).thenReturn(true);
when(playerObject.isQuestComplete(questName)).thenReturn(false);
when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task));
boolean result = requirement.test(player);
assertFalse(result);
}
@Test
public void skipOptionalTaskCheck() {
Integer task = null;
boolean active = true;
ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task);
when(playerObject.isQuestInJournal(questName)).thenReturn(true);
when(playerObject.isQuestComplete(questName)).thenReturn(false);
when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task));
boolean result = requirement.test(player);
assertTrue(result);
}
}

View File

@@ -0,0 +1,56 @@
package com.projectswg.holocore.resources.support.data.server_info.loader.conversation.requirements;
import com.projectswg.holocore.resources.gameplay.conversation.requirements.ActiveQuestRequirement;
import org.junit.Before;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.*;
public class ActiveQuestRequirementParserTest {
private ActiveQuestRequirementParser parser;
@Before
public void setup() {
parser = new ActiveQuestRequirementParser();
}
@Test
public void testAllParametersSet() {
String expectedQuestName = "testquest";
Integer expectedTask = 1234;
boolean expectedActive = true;
Map<String, Object> args = Map.of(
"quest", expectedQuestName,
"task", Long.valueOf(expectedTask),
"active", expectedActive
);
ActiveQuestRequirement requirement = parser.parse(args);
assertEquals(expectedQuestName, requirement.getQuestName());
assertEquals(expectedTask, requirement.getTask());
assertEquals(expectedActive, requirement.isActive());
}
@Test
public void testTaskOptional() {
String expectedQuestName = "testquest";
Integer expectedTask = null;
boolean expectedActive = true;
Map<String, Object> args = Map.of(
"quest", expectedQuestName,
"active", expectedActive
);
ActiveQuestRequirement requirement = parser.parse(args);
assertEquals(expectedQuestName, requirement.getQuestName());
assertEquals(expectedTask, requirement.getTask());
assertEquals(expectedActive, requirement.isActive());
}
}