Merge branch 'release/release-1.6.2'
This commit is contained in:
commit
0bfb372eff
8
pom.xml
8
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>org.sadtech.autoresponder</groupId>
|
<groupId>org.sadtech.autoresponder</groupId>
|
||||||
<artifactId>autoresponder</artifactId>
|
<artifactId>autoresponder</artifactId>
|
||||||
<version>1.6.1-RELEASE</version>
|
<version>1.6.2-RELEASE</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
@ -32,6 +32,12 @@
|
|||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>${slf4j.ver}</version>
|
<version>${slf4j.ver}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@ -40,12 +40,16 @@ public class Autoresponder {
|
|||||||
this.defaultUnit = defaultUnit;
|
this.defaultUnit = defaultUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Unit getDefaultUnit() {
|
||||||
|
return defaultUnit;
|
||||||
|
}
|
||||||
|
|
||||||
public Unit answer(Integer personId, String message) {
|
public Unit answer(Integer personId, String message) {
|
||||||
UnitPointer unitPointer = checkAndAddPerson(personId);
|
UnitPointer unitPointer = checkAndAddPerson(personId);
|
||||||
Unit unit;
|
Unit unit;
|
||||||
try {
|
try {
|
||||||
if (unitPointer.getUnit() == null || unitPointer.getUnit().getNextUnits() == null) {
|
if (unitPointer.getUnit() == null || unitPointer.getUnit().getNextUnits() == null) {
|
||||||
unit = nextUnit(startUnits, message); // выбирает unit из startUnits, если пользователь обращается впервые
|
unit = nextUnit(startUnits, message);
|
||||||
} else {
|
} else {
|
||||||
unit = nextUnit(unitPointer.getUnit().getNextUnits(), message);
|
unit = nextUnit(unitPointer.getUnit().getNextUnits(), message);
|
||||||
}
|
}
|
||||||
@ -58,13 +62,12 @@ public class Autoresponder {
|
|||||||
|
|
||||||
private Unit nextUnit(Set<Unit> nextUnits, String message) {
|
private Unit nextUnit(Set<Unit> nextUnits, String message) {
|
||||||
Optional<Unit> unit = nextUnits.stream()
|
Optional<Unit> unit = nextUnits.stream()
|
||||||
.filter(nextUnit -> nextUnit.getPattern() != null)
|
.filter(nextUnit -> nextUnit.getPattern() != null && patternReg(nextUnit, message))
|
||||||
.filter(nextUnit -> patternReg(nextUnit, message))
|
|
||||||
.max(UNIT_PRIORITY_COMPARATOR);
|
.max(UNIT_PRIORITY_COMPARATOR);
|
||||||
|
|
||||||
if (!unit.isPresent()) {
|
if (!unit.isPresent()) {
|
||||||
unit = nextUnits.stream()
|
unit = nextUnits.stream()
|
||||||
.filter(nextUnit -> textPercentageMatch(nextUnit, Parser.parse(message)) >= nextUnit.getMatchThreshold())
|
.filter(nextUnit -> percentageMatch(nextUnit, Parser.parse(message)) >= nextUnit.getMatchThreshold())
|
||||||
.max(UNIT_PRIORITY_COMPARATOR);
|
.max(UNIT_PRIORITY_COMPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +96,7 @@ public class Autoresponder {
|
|||||||
return m.find();
|
return m.find();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Double textPercentageMatch(Unit unit, Set<String> words) {
|
private Double percentageMatch(Unit unit, Set<String> words) {
|
||||||
if (unit.getKeyWords() != null) {
|
if (unit.getKeyWords() != null) {
|
||||||
Set<String> temp = new HashSet<>(unit.getKeyWords());
|
Set<String> temp = new HashSet<>(unit.getKeyWords());
|
||||||
temp.retainAll(words);
|
temp.retainAll(words);
|
||||||
|
@ -2,17 +2,17 @@ package org.sadtech.autoresponder.repository;
|
|||||||
|
|
||||||
import org.sadtech.autoresponder.entity.UnitPointer;
|
import org.sadtech.autoresponder.entity.UnitPointer;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Collection;
|
||||||
|
|
||||||
public interface UnitPointerRepository {
|
public interface UnitPointerRepository {
|
||||||
|
|
||||||
Integer add(UnitPointer unitPointer);
|
void add(UnitPointer unitPointer);
|
||||||
|
|
||||||
void edit(UnitPointer unitPointer);
|
void edit(UnitPointer unitPointer);
|
||||||
|
|
||||||
void remove(Integer entityId);
|
void remove(Integer entityId);
|
||||||
|
|
||||||
void addAll(Map<Integer, UnitPointer> unitPointerMap);
|
void addAll(Collection<UnitPointer> unitPointerMap);
|
||||||
|
|
||||||
UnitPointer findByEntityId(Integer entityId);
|
UnitPointer findByEntityId(Integer entityId);
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package org.sadtech.autoresponder.repository;
|
|||||||
|
|
||||||
import org.sadtech.autoresponder.entity.UnitPointer;
|
import org.sadtech.autoresponder.entity.UnitPointer;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -10,9 +11,8 @@ public class UnitPointerRepositoryMap implements UnitPointerRepository {
|
|||||||
private Map<Integer, UnitPointer> unitPointerMap = new HashMap<>();
|
private Map<Integer, UnitPointer> unitPointerMap = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer add(UnitPointer unitPointer) {
|
public void add(UnitPointer unitPointer) {
|
||||||
unitPointerMap.put(unitPointer.getEntityId(), unitPointer);
|
unitPointerMap.put(unitPointer.getEntityId(), unitPointer);
|
||||||
return unitPointer.getEntityId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,8 +26,8 @@ public class UnitPointerRepositoryMap implements UnitPointerRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addAll(Map<Integer, UnitPointer> unitPointerMap) {
|
public void addAll(Collection<UnitPointer> unitPointers) {
|
||||||
this.unitPointerMap.putAll(unitPointerMap);
|
unitPointers.parallelStream().forEach(unitPointer -> unitPointerMap.put(unitPointer.getEntityId(), unitPointer));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
133
src/test/java/org/sadtech/autoresponder/AutoresponderTest.java
Normal file
133
src/test/java/org/sadtech/autoresponder/AutoresponderTest.java
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
package org.sadtech.autoresponder;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.sadtech.autoresponder.entity.Unit;
|
||||||
|
import org.sadtech.autoresponder.exception.NotFoundUnitException;
|
||||||
|
import org.sadtech.autoresponder.repository.UnitPointerRepositoryMap;
|
||||||
|
import org.sadtech.autoresponder.service.UnitPointerServiceImpl;
|
||||||
|
import org.sadtech.autoresponder.test.TestUnit;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class AutoresponderTest {
|
||||||
|
|
||||||
|
private Autoresponder autoresponder;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
TestUnit dela = new TestUnit();
|
||||||
|
dela.setKeyWord("дела", "делишки");
|
||||||
|
dela.setMessage("хорошо");
|
||||||
|
|
||||||
|
TestUnit delaTop = new TestUnit();
|
||||||
|
delaTop.setPriority(100);
|
||||||
|
delaTop.setKeyWord("делишки");
|
||||||
|
delaTop.setMessage("отлично");
|
||||||
|
|
||||||
|
TestUnit hello = new TestUnit();
|
||||||
|
hello.setMessage("тест");
|
||||||
|
hello.setKeyWord("привет");
|
||||||
|
hello.setNextUnit(dela);
|
||||||
|
hello.setNextUnit(delaTop);
|
||||||
|
|
||||||
|
TestUnit number = new TestUnit();
|
||||||
|
number.setKeyWord("89101234567");
|
||||||
|
number.setMessage("ответ");
|
||||||
|
|
||||||
|
TestUnit regExp = new TestUnit();
|
||||||
|
regExp.setPattern(Pattern.compile("^((8|\\+7)[\\- ]?)?(\\(?\\d{3}\\)?[\\- ]?)?[\\d\\- ]{7,10}$"));
|
||||||
|
regExp.setMessage("регулярка");
|
||||||
|
dela.setNextUnit(regExp);
|
||||||
|
dela.setNextUnit(number);
|
||||||
|
|
||||||
|
TestUnit unreal = new TestUnit();
|
||||||
|
unreal.setKeyWord("витамин", "мультифрукт", "арбуз", "параметр");
|
||||||
|
unreal.setMessage("победа");
|
||||||
|
unreal.setMatchThreshold(100);
|
||||||
|
|
||||||
|
Set<Unit> testUnits = new HashSet<>();
|
||||||
|
testUnits.add(hello);
|
||||||
|
testUnits.add(regExp);
|
||||||
|
testUnits.add(unreal);
|
||||||
|
|
||||||
|
UnitPointerServiceImpl unitPointerService = new UnitPointerServiceImpl(new UnitPointerRepositoryMap());
|
||||||
|
autoresponder = new Autoresponder(unitPointerService, testUnits);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void simpleAnswer() {
|
||||||
|
String message = ((TestUnit) autoresponder.answer(1, "привет это тестирвоание функциональности")).getMessage();
|
||||||
|
Assert.assertEquals("тест", message);
|
||||||
|
String message1 = ((TestUnit) autoresponder.answer(2, "привет, еще одно тестирование")).getMessage();
|
||||||
|
Assert.assertEquals("тест", message1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void defaultAnswer() {
|
||||||
|
TestUnit defaultUnit = new TestUnit();
|
||||||
|
defaultUnit.setMessage("не знаю");
|
||||||
|
autoresponder.setDefaultUnit(defaultUnit);
|
||||||
|
|
||||||
|
Assert.assertEquals(((TestUnit) autoresponder.answer(2, "пока")).getMessage(), "не знаю");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = NotFoundUnitException.class)
|
||||||
|
public void notDefaultAnswer() {
|
||||||
|
autoresponder.answer(2, "пока");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void regExpAnswer() {
|
||||||
|
String message = ((TestUnit) autoresponder.answer(1, "79101234567")).getMessage();
|
||||||
|
Assert.assertEquals(message, "регулярка");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void priorityAnswer() {
|
||||||
|
autoresponder.answer(1, "привет");
|
||||||
|
autoresponder.answer(2, "привет");
|
||||||
|
String message = ((TestUnit) autoresponder.answer(1, "как твои делишки")).getMessage();
|
||||||
|
Assert.assertEquals("отлично", message);
|
||||||
|
String message1 = ((TestUnit) autoresponder.answer(2, "твои дела все еще хорошо?")).getMessage();
|
||||||
|
Assert.assertEquals("хорошо", message1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void showRegExpVsKeyWords() {
|
||||||
|
autoresponder.answer(1, "привет");
|
||||||
|
autoresponder.answer(1, "дела");
|
||||||
|
Assert.assertEquals("регулярка", ((TestUnit) autoresponder.answer(1, "89101234567")).getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = NotFoundUnitException.class)
|
||||||
|
public void matchThreshold() {
|
||||||
|
autoresponder.answer(1, "витамин я сьем, и арбуз получу");
|
||||||
|
String message = "параметр себе задам: покушать витамин и арбуз, а вместе все это мультифрукт";
|
||||||
|
String answer = ((TestUnit) autoresponder.answer(1, message)).getMessage();
|
||||||
|
Assert.assertEquals("победа", answer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void generalAnswer() {
|
||||||
|
TestUnit defaultUnit = new TestUnit();
|
||||||
|
defaultUnit.setMessage("не знаю");
|
||||||
|
autoresponder.setDefaultUnit(defaultUnit);
|
||||||
|
String answer = ((TestUnit) autoresponder.answer(1, "привет это тестирование функциональности")).getMessage();
|
||||||
|
Assert.assertEquals("тест", answer);
|
||||||
|
Assert.assertEquals("хорошо", ((TestUnit) autoresponder.answer(1, "как твои дела")).getMessage());
|
||||||
|
String answer2 = ((TestUnit) autoresponder.answer(2, "привет это тестирование функциональности")).getMessage();
|
||||||
|
Assert.assertEquals("тест", answer2);
|
||||||
|
Assert.assertEquals("не знаю", ((TestUnit) autoresponder.answer(1, "нет")).getMessage());
|
||||||
|
String message = "параметр себе задам: покушать витамин и арбуз, а вместе все это мультифрукт";
|
||||||
|
Assert.assertEquals("победа", ((TestUnit) autoresponder.answer(3, message)).getMessage());
|
||||||
|
Assert.assertEquals("регулярка", ((TestUnit) autoresponder.answer(1, "8912345678")).getMessage());
|
||||||
|
String answer3 = ((TestUnit) autoresponder.answer(1, "привет это тестирование функциональности")).getMessage();
|
||||||
|
Assert.assertEquals("тест", answer3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
32
src/test/java/org/sadtech/autoresponder/test/TestUnit.java
Normal file
32
src/test/java/org/sadtech/autoresponder/test/TestUnit.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package org.sadtech.autoresponder.test;
|
||||||
|
|
||||||
|
import org.sadtech.autoresponder.entity.Unit;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class TestUnit extends Unit {
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof TestUnit)) return false;
|
||||||
|
if (!super.equals(o)) return false;
|
||||||
|
TestUnit testUnit = (TestUnit) o;
|
||||||
|
return Objects.equals(message, testUnit.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(super.hashCode(), message);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user