From 678e927bf60cf8ff4c74f4622b70af22f4dea1f1 Mon Sep 17 00:00:00 2001 From: Ekvi Date: Tue, 14 Oct 2014 15:37:29 +0300 Subject: [PATCH 1/5] fixed ContentsController --- .../java/org/ayfaar/app/controllers/ContentsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/ayfaar/app/controllers/ContentsController.java b/src/main/java/org/ayfaar/app/controllers/ContentsController.java index e5705980..e9d32fcf 100644 --- a/src/main/java/org/ayfaar/app/controllers/ContentsController.java +++ b/src/main/java/org/ayfaar/app/controllers/ContentsController.java @@ -18,7 +18,7 @@ public class ContentsController { @RequestMapping("{name}") @ResponseBody - public List getContents(@PathVariable String categoryName) { + public List getContents(@PathVariable("name") String categoryName) { return contentsHelper.createContents(categoryName); } } From 7f49a54a4b65534ffc03a2a721d685fc887d6546 Mon Sep 17 00:00:00 2001 From: Ekvi Date: Wed, 15 Oct 2014 00:08:25 +0300 Subject: [PATCH 2/5] added method for renaming terms --- .../app/controllers/TermController.java | 26 +++++-- .../TermControllerIntegrationTest.java | 68 +++++++++++++++++++ 2 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/test/java/issues/issue66/TermControllerIntegrationTest.java diff --git a/src/main/java/org/ayfaar/app/controllers/TermController.java b/src/main/java/org/ayfaar/app/controllers/TermController.java index fbaace01..3297f18d 100644 --- a/src/main/java/org/ayfaar/app/controllers/TermController.java +++ b/src/main/java/org/ayfaar/app/controllers/TermController.java @@ -4,12 +4,10 @@ import org.ayfaar.app.dao.CommonDao; import org.ayfaar.app.dao.LinkDao; import org.ayfaar.app.dao.TermDao; +import org.ayfaar.app.dao.TermMorphDao; import org.ayfaar.app.model.*; import org.ayfaar.app.spring.Model; -import org.ayfaar.app.utils.AliasesMap; -import org.ayfaar.app.utils.Morpher; -import org.ayfaar.app.utils.TermUtils; -import org.ayfaar.app.utils.ValueObjectUtils; +import org.ayfaar.app.utils.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -31,6 +29,7 @@ public class TermController { @Autowired CommonDao commonDao; @Autowired TermDao termDao; + @Autowired TermMorphDao termMorphDao; @Autowired LinkDao linkDao; @Autowired AliasesMap aliasesMap; @Autowired @@ -278,4 +277,23 @@ public void remove(@PathVariable String name) { public void reloadAliasesMap() { aliasesMap.reload(); } + + public void renameTerm(String oldName, String newName) { + Term oldTerm = termDao.getByName(oldName); + Term newTerm = new Term(newName, oldTerm.getDescription(), oldTerm.getShortDescription()); + newTerm.setUri(UriGenerator.generate(Term.class, newName)); + add(newTerm); + + List links = linkDao.getAllLinks(oldTerm.getUri()); + for(Link link : links) { + if(link.getUid1().getUri().equals(oldTerm.getUri())) { + link.setUid1(newTerm); + } + else if(link.getUid2().getUri().equals(oldTerm.getUri())) { + link.setUid2(newTerm); + } + linkDao.save(link); + } + remove(oldName); + } } diff --git a/src/test/java/issues/issue66/TermControllerIntegrationTest.java b/src/test/java/issues/issue66/TermControllerIntegrationTest.java new file mode 100644 index 00000000..3c84d28f --- /dev/null +++ b/src/test/java/issues/issue66/TermControllerIntegrationTest.java @@ -0,0 +1,68 @@ +package issues.issue66; + +import org.ayfaar.app.IntegrationTest; +import org.ayfaar.app.controllers.TermController; +import org.ayfaar.app.dao.LinkDao; +import org.ayfaar.app.dao.TermDao; +import org.ayfaar.app.model.Link; +import org.ayfaar.app.model.Term; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static org.junit.Assert.*; + + +public class TermControllerIntegrationTest extends IntegrationTest { + @Autowired private TermController termController; + @Autowired private TermDao termDao; + @Autowired private LinkDao linkDao; + + @Test + public void testRenameTerm1() { + String oldName = "ВСЕ-Воля-ВСЕ-Разума"; + String newName = "test new name"; + termController.renameTerm(oldName, newName); + + Term term = termDao.getByName(newName); + List links = linkDao.getAllLinks(term.getUri()); + + assertEquals("ии:термин:Разум", links.get(0).getUid1().getUri()); + assertEquals("ии:термин:test new name", links.get(0).getUid2().getUri()); + assertEquals("ии:термин:test new name", links.get(1).getUid1().getUri()); + assertEquals("ии:пункт:2.0170", links.get(1).getUid2().getUri()); + assertEquals("ии:термин:test new name", links.get(2).getUid1().getUri()); + assertEquals("ии:термин:КРА-АГГА-АГГА", links.get(2).getUid2().getUri()); + assertEquals("ии:термин:test new name", links.get(3).getUid1().getUri()); + assertEquals("ии:пункт:2.0148", links.get(3).getUid2().getUri()); + } + + @Test + public void testRenameTerm2() { + String oldName = "Временная Сущность"; + String newName = "Новая Сущность"; + termController.renameTerm(oldName, newName); + + Term term = termDao.getByName(newName); + List links = linkDao.getAllLinks(term.getUri()); + + assertEquals("ии:термин:Время", links.get(0).getUid1().getUri()); + assertEquals("ии:термин:Новая Сущность", links.get(0).getUid2().getUri()); + assertEquals("ии:термин:Вселенская Временная Сущность", links.get(1).getUid1().getUri()); + assertEquals("ии:термин:Новая Сущность", links.get(1).getUid2().getUri()); + assertEquals("ии:термин:Новая Сущность", links.get(2).getUid1().getUri()); + assertEquals("ии:пункт:1.1036", links.get(2).getUid2().getUri()); + } + + /** + * тест запускать после выполнения testRenameTerm1 и testRenameTerm2 + */ + @Test + public void testIfOldTermRemovedAndNewTermAdded() { + assertNull(termDao.getByName("ВСЕ-Воля-ВСЕ-Разума")); + assertEquals("Test new name", termDao.getByName("test new name").getName()); + assertNull(termDao.getByName("Временная Сущность")); + assertEquals("Новая Сущность", termDao.getByName("Новая Сущность").getName()); + } +} From 1b6632a819d8fbdbdd611432ff192d0c2dbb0f99 Mon Sep 17 00:00:00 2001 From: Ekvi Date: Wed, 15 Oct 2014 13:19:16 +0300 Subject: [PATCH 3/5] update method renameTerm --- TermControllerIntegrationTest.java | 63 +++++++++++++++++++ .../app/controllers/TermController.java | 14 +++-- .../TermControllerIntegrationTest.java | 43 ++++++------- 3 files changed, 91 insertions(+), 29 deletions(-) create mode 100644 TermControllerIntegrationTest.java diff --git a/TermControllerIntegrationTest.java b/TermControllerIntegrationTest.java new file mode 100644 index 00000000..3a1966d5 --- /dev/null +++ b/TermControllerIntegrationTest.java @@ -0,0 +1,63 @@ +package issues.issue66; + +import org.ayfaar.app.IntegrationTest; +import org.ayfaar.app.controllers.TermController; +import org.ayfaar.app.dao.LinkDao; +import org.ayfaar.app.dao.TermDao; +import org.ayfaar.app.model.Item; +import org.ayfaar.app.model.Link; +import org.ayfaar.app.model.Term; +import org.ayfaar.app.utils.UriGenerator; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static org.junit.Assert.*; + + +public class TermControllerIntegrationTest extends IntegrationTest { + @Autowired private TermController termController; + @Autowired private TermDao termDao; + @Autowired private LinkDao linkDao; + + @Test + public void testRenameTerm1() { + String oldName = "ВСЕ-Воля-ВСЕ-Разума"; + String newName = "test new name"; + termController.renameTerm(oldName, newName); + + Term term = termDao.getByName(newName); + List links = linkDao.getAllLinks(term.getUri()); + UriGenerator.generate(Term.class, "Разум"); + assertEquals(UriGenerator.generate(Term.class, "Разум"), links.get(0).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(0).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(1).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "2.0170"), links.get(1).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(2).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "КРА-АГГА-АГГА"), links.get(2).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(3).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "2.0148"), links.get(3).getUid2().getUri()); + assertNull(termDao.getByName("ВСЕ-Воля-ВСЕ-Разума")); + assertEquals("Test new name", termDao.getByName("test new name").getName()); + } + + @Test + public void testRenameTerm2() { + String oldName = "Временная Сущность"; + String newName = "Новая Сущность"; + termController.renameTerm(oldName, newName); + + Term term = termDao.getByName(newName); + List links = linkDao.getAllLinks(term.getUri()); + + assertEquals(UriGenerator.generate(Term.class, "Время"), links.get(0).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(0).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Вселенская Временная Сущность"), links.get(1).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(1).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(2).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "1.1036"), links.get(2).getUid2().getUri()); + assertNull(termDao.getByName("Временная Сущность")); + assertEquals("Новая Сущность", termDao.getByName("Новая Сущность").getName()); + } +} diff --git a/src/main/java/org/ayfaar/app/controllers/TermController.java b/src/main/java/org/ayfaar/app/controllers/TermController.java index 3297f18d..6458b7b5 100644 --- a/src/main/java/org/ayfaar/app/controllers/TermController.java +++ b/src/main/java/org/ayfaar/app/controllers/TermController.java @@ -278,11 +278,15 @@ public void reloadAliasesMap() { aliasesMap.reload(); } - public void renameTerm(String oldName, String newName) { - Term oldTerm = termDao.getByName(oldName); - Term newTerm = new Term(newName, oldTerm.getDescription(), oldTerm.getShortDescription()); - newTerm.setUri(UriGenerator.generate(Term.class, newName)); - add(newTerm); + + @RequestMapping(value = "rename") + @ResponseBody + public void renameTerm(@RequestParam("oldTerm") String oldName, @RequestParam("newTerm") String newName) { + Term oldTerm = aliasesMap.getTerm(oldName); + add(newName, oldTerm.getShortDescription(), oldTerm.getDescription()); + + reloadAliasesMap(); + Term newTerm = aliasesMap.getTerm(newName); List links = linkDao.getAllLinks(oldTerm.getUri()); for(Link link : links) { diff --git a/src/test/java/issues/issue66/TermControllerIntegrationTest.java b/src/test/java/issues/issue66/TermControllerIntegrationTest.java index 3c84d28f..3a1966d5 100644 --- a/src/test/java/issues/issue66/TermControllerIntegrationTest.java +++ b/src/test/java/issues/issue66/TermControllerIntegrationTest.java @@ -4,8 +4,10 @@ import org.ayfaar.app.controllers.TermController; import org.ayfaar.app.dao.LinkDao; import org.ayfaar.app.dao.TermDao; +import org.ayfaar.app.model.Item; import org.ayfaar.app.model.Link; import org.ayfaar.app.model.Term; +import org.ayfaar.app.utils.UriGenerator; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -27,15 +29,17 @@ public void testRenameTerm1() { Term term = termDao.getByName(newName); List links = linkDao.getAllLinks(term.getUri()); - - assertEquals("ии:термин:Разум", links.get(0).getUid1().getUri()); - assertEquals("ии:термин:test new name", links.get(0).getUid2().getUri()); - assertEquals("ии:термин:test new name", links.get(1).getUid1().getUri()); - assertEquals("ии:пункт:2.0170", links.get(1).getUid2().getUri()); - assertEquals("ии:термин:test new name", links.get(2).getUid1().getUri()); - assertEquals("ии:термин:КРА-АГГА-АГГА", links.get(2).getUid2().getUri()); - assertEquals("ии:термин:test new name", links.get(3).getUid1().getUri()); - assertEquals("ии:пункт:2.0148", links.get(3).getUid2().getUri()); + UriGenerator.generate(Term.class, "Разум"); + assertEquals(UriGenerator.generate(Term.class, "Разум"), links.get(0).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(0).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(1).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "2.0170"), links.get(1).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(2).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "КРА-АГГА-АГГА"), links.get(2).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(3).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "2.0148"), links.get(3).getUid2().getUri()); + assertNull(termDao.getByName("ВСЕ-Воля-ВСЕ-Разума")); + assertEquals("Test new name", termDao.getByName("test new name").getName()); } @Test @@ -47,21 +51,12 @@ public void testRenameTerm2() { Term term = termDao.getByName(newName); List links = linkDao.getAllLinks(term.getUri()); - assertEquals("ии:термин:Время", links.get(0).getUid1().getUri()); - assertEquals("ии:термин:Новая Сущность", links.get(0).getUid2().getUri()); - assertEquals("ии:термин:Вселенская Временная Сущность", links.get(1).getUid1().getUri()); - assertEquals("ии:термин:Новая Сущность", links.get(1).getUid2().getUri()); - assertEquals("ии:термин:Новая Сущность", links.get(2).getUid1().getUri()); - assertEquals("ии:пункт:1.1036", links.get(2).getUid2().getUri()); - } - - /** - * тест запускать после выполнения testRenameTerm1 и testRenameTerm2 - */ - @Test - public void testIfOldTermRemovedAndNewTermAdded() { - assertNull(termDao.getByName("ВСЕ-Воля-ВСЕ-Разума")); - assertEquals("Test new name", termDao.getByName("test new name").getName()); + assertEquals(UriGenerator.generate(Term.class, "Время"), links.get(0).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(0).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Вселенская Временная Сущность"), links.get(1).getUid1().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(1).getUid2().getUri()); + assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(2).getUid1().getUri()); + assertEquals(UriGenerator.generate(Item.class, "1.1036"), links.get(2).getUid2().getUri()); assertNull(termDao.getByName("Временная Сущность")); assertEquals("Новая Сущность", termDao.getByName("Новая Сущность").getName()); } From ef3f9e3a744307f12a19e8113aa3b395d3d4a697 Mon Sep 17 00:00:00 2001 From: Ekvi Date: Wed, 15 Oct 2014 15:46:10 +0300 Subject: [PATCH 4/5] added transactions for test --- TermControllerIntegrationTest.java | 63 ------------------- .../TermControllerIntegrationTest.java | 11 +++- 2 files changed, 8 insertions(+), 66 deletions(-) delete mode 100644 TermControllerIntegrationTest.java diff --git a/TermControllerIntegrationTest.java b/TermControllerIntegrationTest.java deleted file mode 100644 index 3a1966d5..00000000 --- a/TermControllerIntegrationTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package issues.issue66; - -import org.ayfaar.app.IntegrationTest; -import org.ayfaar.app.controllers.TermController; -import org.ayfaar.app.dao.LinkDao; -import org.ayfaar.app.dao.TermDao; -import org.ayfaar.app.model.Item; -import org.ayfaar.app.model.Link; -import org.ayfaar.app.model.Term; -import org.ayfaar.app.utils.UriGenerator; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -import static org.junit.Assert.*; - - -public class TermControllerIntegrationTest extends IntegrationTest { - @Autowired private TermController termController; - @Autowired private TermDao termDao; - @Autowired private LinkDao linkDao; - - @Test - public void testRenameTerm1() { - String oldName = "ВСЕ-Воля-ВСЕ-Разума"; - String newName = "test new name"; - termController.renameTerm(oldName, newName); - - Term term = termDao.getByName(newName); - List links = linkDao.getAllLinks(term.getUri()); - UriGenerator.generate(Term.class, "Разум"); - assertEquals(UriGenerator.generate(Term.class, "Разум"), links.get(0).getUid1().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(0).getUid2().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(1).getUid1().getUri()); - assertEquals(UriGenerator.generate(Item.class, "2.0170"), links.get(1).getUid2().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(2).getUid1().getUri()); - assertEquals(UriGenerator.generate(Term.class, "КРА-АГГА-АГГА"), links.get(2).getUid2().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(3).getUid1().getUri()); - assertEquals(UriGenerator.generate(Item.class, "2.0148"), links.get(3).getUid2().getUri()); - assertNull(termDao.getByName("ВСЕ-Воля-ВСЕ-Разума")); - assertEquals("Test new name", termDao.getByName("test new name").getName()); - } - - @Test - public void testRenameTerm2() { - String oldName = "Временная Сущность"; - String newName = "Новая Сущность"; - termController.renameTerm(oldName, newName); - - Term term = termDao.getByName(newName); - List links = linkDao.getAllLinks(term.getUri()); - - assertEquals(UriGenerator.generate(Term.class, "Время"), links.get(0).getUid1().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(0).getUid2().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Вселенская Временная Сущность"), links.get(1).getUid1().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(1).getUid2().getUri()); - assertEquals(UriGenerator.generate(Term.class, "Новая Сущность"), links.get(2).getUid1().getUri()); - assertEquals(UriGenerator.generate(Item.class, "1.1036"), links.get(2).getUid2().getUri()); - assertNull(termDao.getByName("Временная Сущность")); - assertEquals("Новая Сущность", termDao.getByName("Новая Сущность").getName()); - } -} diff --git a/src/test/java/issues/issue66/TermControllerIntegrationTest.java b/src/test/java/issues/issue66/TermControllerIntegrationTest.java index 3a1966d5..11f28a28 100644 --- a/src/test/java/issues/issue66/TermControllerIntegrationTest.java +++ b/src/test/java/issues/issue66/TermControllerIntegrationTest.java @@ -7,9 +7,11 @@ import org.ayfaar.app.model.Item; import org.ayfaar.app.model.Link; import org.ayfaar.app.model.Term; +import org.ayfaar.app.utils.AliasesMap; import org.ayfaar.app.utils.UriGenerator; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -20,16 +22,18 @@ public class TermControllerIntegrationTest extends IntegrationTest { @Autowired private TermController termController; @Autowired private TermDao termDao; @Autowired private LinkDao linkDao; + @Autowired private AliasesMap aliasesMap; @Test + @Transactional public void testRenameTerm1() { String oldName = "ВСЕ-Воля-ВСЕ-Разума"; String newName = "test new name"; termController.renameTerm(oldName, newName); - Term term = termDao.getByName(newName); + Term term = aliasesMap.getTerm(newName); List links = linkDao.getAllLinks(term.getUri()); - UriGenerator.generate(Term.class, "Разум"); + assertEquals(UriGenerator.generate(Term.class, "Разум"), links.get(0).getUid1().getUri()); assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(0).getUid2().getUri()); assertEquals(UriGenerator.generate(Term.class, "Test new name"), links.get(1).getUid1().getUri()); @@ -43,12 +47,13 @@ public void testRenameTerm1() { } @Test + @Transactional public void testRenameTerm2() { String oldName = "Временная Сущность"; String newName = "Новая Сущность"; termController.renameTerm(oldName, newName); - Term term = termDao.getByName(newName); + Term term = aliasesMap.getTerm(newName); List links = linkDao.getAllLinks(term.getUri()); assertEquals(UriGenerator.generate(Term.class, "Время"), links.get(0).getUid1().getUri()); From b4c8bf67e8ee7a4ff07a924017e16a71c8c2cf90 Mon Sep 17 00:00:00 2001 From: Ekvi Date: Mon, 20 Oct 2014 18:45:13 +0300 Subject: [PATCH 5/5] cteated unit test for renameTerm method --- .../app/controllers/TermController.java | 3 +- .../issue66/TermControllerUnitTest.java | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 src/test/java/issues/issue66/TermControllerUnitTest.java diff --git a/src/main/java/org/ayfaar/app/controllers/TermController.java b/src/main/java/org/ayfaar/app/controllers/TermController.java index 6458b7b5..3aa907a0 100644 --- a/src/main/java/org/ayfaar/app/controllers/TermController.java +++ b/src/main/java/org/ayfaar/app/controllers/TermController.java @@ -285,8 +285,7 @@ public void renameTerm(@RequestParam("oldTerm") String oldName, @RequestParam("n Term oldTerm = aliasesMap.getTerm(oldName); add(newName, oldTerm.getShortDescription(), oldTerm.getDescription()); - reloadAliasesMap(); - Term newTerm = aliasesMap.getTerm(newName); + Term newTerm = termDao.getByName(newName); List links = linkDao.getAllLinks(oldTerm.getUri()); for(Link link : links) { diff --git a/src/test/java/issues/issue66/TermControllerUnitTest.java b/src/test/java/issues/issue66/TermControllerUnitTest.java new file mode 100644 index 00000000..f3963dcc --- /dev/null +++ b/src/test/java/issues/issue66/TermControllerUnitTest.java @@ -0,0 +1,73 @@ +package issues.issue66; + +import org.ayfaar.app.controllers.TermController; +import org.ayfaar.app.dao.LinkDao; +import org.ayfaar.app.dao.TermDao; +import org.ayfaar.app.model.Item; +import org.ayfaar.app.model.Link; +import org.ayfaar.app.model.Term; +import org.ayfaar.app.utils.AliasesMap; +import org.ayfaar.app.utils.UriGenerator; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import java.util.List; + +import static java.util.Arrays.asList; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class TermControllerUnitTest { + @InjectMocks @Spy TermController termController; + @Mock TermDao termDao; + @Mock AliasesMap aliasesMap; + @Mock LinkDao linkDao; + + private List links; + + @Before + public void init() { + Term term1 = new Term("Разум"); + term1.setUri(UriGenerator.generate(term1)); + Term term2 = new Term("New name"); + term2.setUri(UriGenerator.generate(term2)); + Term term3 = new Term("КРА-АГГА-АГГА"); + term3.setUri(UriGenerator.generate(term3)); + Item item1= new Item("2.0170"); + item1.setUri(UriGenerator.generate(item1)); + Item item2 = new Item("2.0148"); + item2.setUri(UriGenerator.generate(item2)); + + links = asList(new Link(term1, term2), new Link(term2, item1), + new Link(term2, term3), new Link(term2, item2)); + } + + @Test + public void testRenameTerm() { + String oldName = "ВСЕ-Воля-ВСЕ-Разума"; + String newName = "New name"; + Term oldTerm = new Term(oldName); + Term newTerm = new Term(newName); + + + when(aliasesMap.getTerm(oldName)).thenReturn(oldTerm); + when(termDao.getByName(newName)).thenReturn(newTerm); + when(linkDao.getAllLinks(oldTerm.getUri())).thenReturn(links); + doNothing().when(termController).remove(anyString()); + when(linkDao.save((Link)anyObject())).thenReturn(new Link()); + + termController.renameTerm(oldName, newName); + + verify(termController, times(1)).add(anyString(), anyString(), anyString()); + verify(termController, times(1)).remove(oldName); + verify(aliasesMap, times(1)).getTerm(oldName); + verify(termDao, times(2)).getByName(anyString()); + verify(linkDao, times(1)).getAllLinks(anyString()); + verify(linkDao, times(1)).save(links.get(0)); + } +}