Написание логики и покрытие тестами

* В Api внедрил проверку существования юзера и его добавление
* В Unit добавленно новое поле для формирвоания меню
* Исправления методов доступа
* Настроена логика формирования меню
* Добавлен новый метод проверки существования Person
* Продолжаю покрытие тестами Api
This commit is contained in:
Mark Struchkov 2019-01-14 14:09:03 +03:00
parent f48f069129
commit 386b2265c6
11 changed files with 115 additions and 23 deletions

View File

@ -17,15 +17,19 @@ public class Autoresponder {
private PersonService personService; private PersonService personService;
public String answer(@NotNull Integer idPerson, @NotNull String message) { public String answer(@NotNull Integer idPerson, @NotNull String message) {
Person person = personService.getPersonById(idPerson); Person person = addPerson(idPerson);
Unit unit = person.getUnit(); Unit unit;
unit = unitService.nextUnit(unit, message); if (person.getUnit() == null) {
unit = unitService.nextUnit(unitService.menuUnit(), message);
} else {
unit = unitService.nextUnit(person.getUnit(), message);
}
person.setUnit(unit); person.setUnit(unit);
return unit.getAnswer(); return unit.getAnswer();
} }
public String answer(@NotNull Integer idPerson, @NotNull String message, @NotNull List<String> words) { public String answer(@NotNull Integer idPerson, @NotNull String message, @NotNull List<String> words) {
Person person = personService.getPersonById(idPerson); Person person = addPerson(idPerson);
Unit unit = unitService.nextUnit(person.getUnit(), message); Unit unit = unitService.nextUnit(person.getUnit(), message);
InsertWords insertWords = new InsertWords(); InsertWords insertWords = new InsertWords();
insertWords.setInText(unit.getAnswer()); insertWords.setInText(unit.getAnswer());
@ -33,4 +37,16 @@ public class Autoresponder {
return insertWords.getOutText(); return insertWords.getOutText();
} }
private Person addPerson(Integer idPerson) {
Person person;
if (personService.checkPerson(idPerson)) {
person = personService.getPersonById(idPerson);
} else {
person = new Person();
person.setId(idPerson);
personService.addPerson(person);
}
return person;
}
} }

View File

@ -14,5 +14,6 @@ public class Unit {
private Integer priority; private Integer priority;
private Set<String> keyWords; private Set<String> keyWords;
private Integer matchThreshold; private Integer matchThreshold;
private Boolean level = false;
} }

View File

@ -3,6 +3,7 @@ package org.sadtech.autoresponder.repository;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import java.util.Collection; import java.util.Collection;
import java.util.List;
public interface UnitRepository { public interface UnitRepository {
@ -13,4 +14,6 @@ public interface UnitRepository {
void addUnits(Collection<Unit> units); void addUnits(Collection<Unit> units);
void removeUnit(Unit idUnit); void removeUnit(Unit idUnit);
List<Unit> menuUnits();
} }

View File

@ -7,7 +7,7 @@ import java.util.*;
public class PersonRepositoryImpl implements PersonRepository { public class PersonRepositoryImpl implements PersonRepository {
Map<Integer, Person> people = new HashMap<>(); private Map<Integer, Person> people = new HashMap<>();
@Override @Override
public void addPerson(Person person) { public void addPerson(Person person) {

View File

@ -3,9 +3,7 @@ package org.sadtech.autoresponder.repository.impl;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import org.sadtech.autoresponder.repository.UnitRepository; import org.sadtech.autoresponder.repository.UnitRepository;
import java.util.Collection; import java.util.*;
import java.util.HashMap;
import java.util.Map;
public class UnitRepositoryImpl implements UnitRepository { public class UnitRepositoryImpl implements UnitRepository {
@ -30,4 +28,15 @@ public class UnitRepositoryImpl implements UnitRepository {
public void removeUnit(Unit idUnit) { public void removeUnit(Unit idUnit) {
units.remove(idUnit.getIdUnit()); units.remove(idUnit.getIdUnit());
} }
@Override
public List<Unit> menuUnits() {
ArrayList<Unit> unitsMenu = new ArrayList<>();
for (Integer integer : units.keySet()) {
if (units.get(integer).getLevel()) {
unitsMenu.add(units.get(integer));
}
}
return unitsMenu;
}
} }

View File

@ -6,5 +6,6 @@ public interface PersonService {
Person getPersonById(Integer integer); Person getPersonById(Integer integer);
void addPerson(Person person); void addPerson(Person person);
boolean checkPerson(Integer idPerson);
} }

View File

@ -1,14 +1,12 @@
package org.sadtech.autoresponder.service; package org.sadtech.autoresponder.service;
import lombok.NonNull;
import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import java.util.List;
public interface UnitService { public interface UnitService {
Unit nextUnit(Unit unit, String message); Unit nextUnit(Unit unit, String message);
Unit getUnitById(Integer idUnit); Unit getUnitById(Integer idUnit);
Unit menuUnit();
} }

View File

@ -19,4 +19,9 @@ public class PersonServiceImpl implements PersonService {
public void addPerson(Person person) { public void addPerson(Person person) {
personRepository.addPerson(person); personRepository.addPerson(person);
} }
@Override
public boolean checkPerson(Integer idPerson) {
return personRepository.getPersonById(idPerson) != null;
}
} }

View File

@ -3,16 +3,13 @@ package org.sadtech.autoresponder.service.impl;
import com.sun.istack.internal.NotNull; import com.sun.istack.internal.NotNull;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.entity.Unit; import org.sadtech.autoresponder.entity.Unit;
import org.sadtech.autoresponder.repository.UnitRepository; import org.sadtech.autoresponder.repository.UnitRepository;
import org.sadtech.autoresponder.service.UnitService; import org.sadtech.autoresponder.service.UnitService;
import org.sadtech.autoresponder.submodule.parser.Parser; import org.sadtech.autoresponder.submodule.parser.Parser;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List;
@Log4j @Log4j
@AllArgsConstructor @AllArgsConstructor
@ -20,7 +17,7 @@ public class UnitServiceImpl implements UnitService {
private UnitRepository unitRepository; private UnitRepository unitRepository;
public Unit nextUnit(@NotNull Unit unit, @NotNull String message) { public Unit nextUnit(Unit unit, @NotNull String message) {
ArrayList<Unit> nextUnits = (ArrayList<Unit>) unit.getNextUnits(); ArrayList<Unit> nextUnits = (ArrayList<Unit>) unit.getNextUnits();
if (nextUnits.size() > 0) { if (nextUnits.size() > 0) {
Parser parser = new Parser(); Parser parser = new Parser();
@ -29,7 +26,7 @@ public class UnitServiceImpl implements UnitService {
Unit unitReturn = new Unit(); Unit unitReturn = new Unit();
unitReturn.setPriority(0); unitReturn.setPriority(0);
for (Unit nextUnit : nextUnits) { for (Unit nextUnit : nextUnits) {
if (!Collections.disjoint(nextUnit.getKeyWords(), parser.getWords()) && (nextUnit.getPriority()>unitReturn.getPriority())) { if (!Collections.disjoint(nextUnit.getKeyWords(), parser.getWords()) && (nextUnit.getPriority() > unitReturn.getPriority())) {
unitReturn = nextUnit; unitReturn = nextUnit;
} }
} }
@ -37,6 +34,7 @@ public class UnitServiceImpl implements UnitService {
} else { } else {
return null; return null;
} }
} }
@Override @Override
@ -44,6 +42,13 @@ public class UnitServiceImpl implements UnitService {
return unitRepository.getUnitById(idUnit); return unitRepository.getUnitById(idUnit);
} }
@Override
public Unit menuUnit() {
Unit menuUnit = new Unit();
menuUnit.setNextUnits(unitRepository.menuUnits());
return menuUnit;
}
} }

View File

@ -19,7 +19,7 @@ public class InsertWords {
Matcher m = pattern.matcher(inText); // Инициализация Matcher Matcher m = pattern.matcher(inText); // Инициализация Matcher
StringBuffer result = new StringBuffer(); // Буфер для конечного значения StringBuffer result = new StringBuffer(); // Буфер для конечного значения
while (m.find()) { // Проверка на совпадение while (m.find()) { // Проверка на совпадение
if (words.get(Integer.parseInt(m.group(1))) != null) { if (Integer.parseInt(m.group(1)) < words.size()) {
m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
} else { } else {
m.appendReplacement(result, m.group(0)); m.appendReplacement(result, m.group(0));

View File

@ -21,7 +21,7 @@ public class AutoresponderTest {
private Person person = new Person(); private Person person = new Person();
private Unit unit = new Unit(); private Unit unit = new Unit();
private Unit unit2 = new Unit(); private Unit unit2 = new Unit();
private HashSet<String> words = new HashSet<>(); private Unit unit3 = new Unit();
private ArrayList<Unit> units = new ArrayList<>(); private ArrayList<Unit> units = new ArrayList<>();
private UnitRepositoryImpl unitRepository = new UnitRepositoryImpl(); private UnitRepositoryImpl unitRepository = new UnitRepositoryImpl();
private PersonRepositoryImpl personRepository = new PersonRepositoryImpl(); private PersonRepositoryImpl personRepository = new PersonRepositoryImpl();
@ -33,21 +33,36 @@ public class AutoresponderTest {
@Before @Before
public void before() { public void before() {
HashSet<String> words = new HashSet<>();
HashSet<String> words2 = new HashSet<>();
words.add("тест"); words.add("тест");
words2.add("тест");
words2.add("привет");
unit.setIdUnit(1); unit.setIdUnit(1);
unit.setLevel(true);
unit.setPriority(50);
unit.setKeyWords(words);
unit.setAnswer("Здравствуйте, вы написали в нашу компанию!");
unit.setMatchThreshold(100); unit.setMatchThreshold(100);
units.add(unit2); units.add(unit2);
units.add(unit3);
unit.setNextUnits(units); unit.setNextUnits(units);
unit2.setIdUnit(2); unit2.setIdUnit(2);
unit2.setAnswer("Ответ с {0} параметрами!"); unit2.setAnswer("Ответ с {0} параметрами!");
unit2.setPriority(100); unit2.setPriority(60);
unit2.setKeyWords(words); unit2.setKeyWords(words);
unit2.setMatchThreshold(100); unit2.setMatchThreshold(100);
unit3.setIdUnit(3);
unit3.setAnswer("Второй Ответ с {0} параметрами!");
unit3.setPriority(50);
unit3.setKeyWords(words2);
unit3.setMatchThreshold(100);
person.setUnit(unit); person.setUnit(unit);
person.setId(1); person.setId(1);
@ -57,20 +72,59 @@ public class AutoresponderTest {
} }
@Test @Test
public void answer() { public void usualAnswer() {
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!"); Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
} }
@Test @Test
public void answer1() { public void answerOneParameter() {
ArrayList<String> words = new ArrayList<>(); ArrayList<String> words = new ArrayList<>();
words.add("одним"); words.add("одним");
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания", words), "Ответ с одним параметрами!"); Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания", words), "Ответ с одним параметрами!");
} }
@Test @Test
public void answer2() { public void NoAnswer() {
String test = autoresponder.answer(person.getId(), "Привет это срабатывания"); String test = autoresponder.answer(person.getId(), "Привет это срабатывания");
Assert.assertNull(test); Assert.assertNull(test);
} }
@Test
public void answerTwoParameter() {
ArrayList<String> words = new ArrayList<>();
words.add("одним");
words.add("двумя");
unit2.setAnswer("Ответ с {0} и {1}");
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания", words), "Ответ с одним и двумя");
}
@Test
public void incorrectSettingsWords() {
ArrayList<String> words = new ArrayList<>();
words.add("одним");
words.add("двумя");
unit2.setAnswer("Ответ с {1} и {3}");
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания", words), "Ответ с двумя и {3}");
}
@Test
public void answerRepeatSingleParameter() {
ArrayList<String> words = new ArrayList<>();
words.add("одним");
words.add("двумя");
unit2.setAnswer("Ответ с {1} и {1}");
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания", words), "Ответ с двумя и двумя");
}
@Test
public void answerByPriority() {
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
}
@Test
public void answerNoPerson() {
Assert.assertEquals(autoresponder.answer(100, "Привет это тест срабатывания"), "Здравствуйте, вы написали в нашу компанию!");
Assert.assertEquals(autoresponder.answer(100, "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
}
} }