package fr.mcc.ginco.tests.services; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import fr.mcc.ginco.utils.DateUtil; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.*; import fr.mcc.ginco.ark.IIDGeneratorService; import fr.mcc.ginco.beans.Language; import fr.mcc.ginco.beans.Thesaurus; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.beans.ThesaurusTerm; import fr.mcc.ginco.dao.ILanguageDAO; import fr.mcc.ginco.dao.IThesaurusDAO; import fr.mcc.ginco.dao.IThesaurusTermDAO; import fr.mcc.ginco.enums.TermStatusEnum; import fr.mcc.ginco.exceptions.BusinessException; import fr.mcc.ginco.services.ThesaurusTermServiceImpl; public class ThesaurusTermServiceTest { @Mock private IThesaurusTermDAO thesaurusTermDAO; @Mock private IThesaurusDAO thesaurusDAO; @Mock private IIDGeneratorService customGeneratorService; @Mock private ILanguageDAO languageDAO; @InjectMocks private ThesaurusTermServiceImpl thesaurusTermService; @Before public void init() { MockitoAnnotations.initMocks(this); } /** * @return Test getting a Thesaurus Term by its Id */ @Test public final void testGetThesaurusTermById() { ThesaurusTerm fakeThesaurusTerm = new ThesaurusTerm(); fakeThesaurusTerm.setLexicalValue("lexicalValue"); when(thesaurusTermDAO.getById(anyString())).thenReturn(fakeThesaurusTerm); String actualResponse = thesaurusTermService.getThesaurusTermById("fake-id").getLexicalValue(); Assert.assertNotNull(actualResponse); Assert.assertEquals("Error while getting ThesaurusTerm By Id !", "lexicalValue", actualResponse); } @Test(expected = BusinessException.class) public final void testGetThesaurusTermByIdInvalid() { when(thesaurusTermDAO.getById(anyString())).thenReturn(null); thesaurusTermService.getThesaurusTermById("fake-id").getLexicalValue(); } /** * @return Test getting a paginated list of Thesaurus Terms for a Thesaurus */ @Test public final void testGetPaginatedThesaurusSandoxedTermsList() { ThesaurusTerm thesaurusTerm1 = new ThesaurusTerm(); ThesaurusTerm thesaurusTerm2 = new ThesaurusTerm(); List<ThesaurusTerm> terms = new ArrayList<ThesaurusTerm>(); terms.add(thesaurusTerm1); terms.add(thesaurusTerm2); when(thesaurusTermDAO.findPaginatedSandboxedItems(0, 10, "fake-id")).thenReturn(terms); List<ThesaurusTerm> actualResponse = thesaurusTermService.getPaginatedThesaurusSandoxedTermsList(0, 10, "fake-id"); Assert.assertEquals(2, actualResponse.size()); } @Test public final void testGetConceptIdByTerm() { ThesaurusTerm fakeThesaurusTerm = new ThesaurusTerm(); ThesaurusConcept fakeThesaurusConcept = new ThesaurusConcept(); fakeThesaurusConcept.setIdentifier("fakeId"); fakeThesaurusTerm.setConcept(fakeThesaurusConcept); when(thesaurusTermDAO.getTermByLexicalValueThesaurusIdLanguageId(anyString(), anyString(), anyString())).thenReturn(fakeThesaurusTerm); String conceptId = thesaurusTermService.getConceptIdByTerm("fakeLexicalValue", "fakeThesaurusId", "fakeLanguageId"); Assert.assertEquals("fakeId", conceptId); } @Test(expected = BusinessException.class) public final void testGetConceptIdByInvalidTerm() { when(thesaurusTermDAO.getTermByLexicalValueThesaurusIdLanguageId(anyString(), anyString(), anyString())).thenReturn(null); thesaurusTermService.getConceptIdByTerm("fakeLexicalValue", "fakeThesaurusId", "fakeLanguageId"); } @Test(expected = BusinessException.class) public final void testGetConceptIdByTermWithInvalidConcept() { ThesaurusTerm fakeThesaurusTerm = new ThesaurusTerm(); when(fakeThesaurusTerm.getConcept()).thenReturn(null); thesaurusTermService.getConceptIdByTerm("fakeLexicalValue", "fakeThesaurusId", "fakeLanguageId"); } @Test public final void testimportSandBoxTerms() { String thesID = "fakeId"; Thesaurus thes = new Thesaurus(); thes.setIdentifier(thesID); when(thesaurusDAO.getById(thesID)).thenReturn(thes); when(customGeneratorService.generate(ThesaurusTerm.class)).thenReturn("fakeId"); when(thesaurusTermDAO.update((ThesaurusTerm) Matchers.anyObject())).then(AdditionalAnswers.returnsFirstArg()); Language lang1 = new Language(); Language lang2 = new Language(); Map<String, Language> termsToImport = new HashMap<String, Language>(); termsToImport.put("term1", lang1); termsToImport.put("Terme accentué2", lang1); termsToImport.put("Terme <b>XSS</b>", lang2); List<ThesaurusTerm> terms = thesaurusTermService.importSandBoxTerms(termsToImport, thesID, TermStatusEnum.VALIDATED.getStatus()); Assert.assertEquals(3, terms.size()); Map<String, Language> termsToImport1 = new HashMap<String, Language>(); termsToImport1.put("Terme accentué2", lang1); List<ThesaurusTerm> terms1 = thesaurusTermService.importSandBoxTerms(termsToImport1, thesID, TermStatusEnum.VALIDATED.getStatus()); Assert.assertEquals(1, terms1.size()); Assert.assertEquals("Terme accentué2", terms1.get(0).getLexicalValue()); Assert.assertEquals(lang1, terms1.get(0).getLanguage()); Map<String, Language> termsToImport2 = new HashMap<String, Language>(); termsToImport2.put("Terme <b>XSS</b>", lang2); List<ThesaurusTerm> terms2 = thesaurusTermService.importSandBoxTerms(termsToImport2, thesID, TermStatusEnum.VALIDATED.getStatus()); Assert.assertEquals(1, terms2.size()); Assert.assertEquals("Terme <b>XSS</b>", terms2.get(0).getLexicalValue()); Assert.assertEquals(lang2, terms2.get(0).getLanguage()); } @Test public final void testIsTermAlreadyUsedInConcept_Used() { ThesaurusTerm fakeThesaurusTerm = getFakeThesaurusTermWithNonMandatoryEmptyFields("fakeTerm1"); fakeThesaurusTerm.setConcept(getFakeThesaurusConceptWithNonMandatoryEmptyFields("fakeConcept")); when(thesaurusTermDAO.getTermByLexicalValueThesaurusIdLanguageId(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(fakeThesaurusTerm); Assert.assertTrue(thesaurusTermService.isTermAlreadyUsedInConcept(fakeThesaurusTerm)); } @Test public final void testIsTermAlreadyUsedInConcept_NotUsed() { ThesaurusTerm fakeThesaurusTerm = getFakeThesaurusTermWithNonMandatoryEmptyFields("fakeTerm1"); when(thesaurusTermDAO.getTermByLexicalValueThesaurusIdLanguageId(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(fakeThesaurusTerm); thesaurusTermService.isTermAlreadyUsedInConcept(fakeThesaurusTerm); Assert.assertFalse(thesaurusTermService.isTermAlreadyUsedInConcept(fakeThesaurusTerm)); } private ThesaurusTerm getFakeThesaurusTermWithNonMandatoryEmptyFields(String id) { ThesaurusTerm fakeThesaurusTerm = new ThesaurusTerm(); fakeThesaurusTerm.setIdentifier(id); fakeThesaurusTerm.setThesaurus(new Thesaurus()); fakeThesaurusTerm.setLanguage(new Language()); fakeThesaurusTerm.setLexicalValue("lexicale value"); return fakeThesaurusTerm; } private ThesaurusConcept getFakeThesaurusConceptWithNonMandatoryEmptyFields(String id) { ThesaurusConcept fakeThesaurusConcept = new ThesaurusConcept(); fakeThesaurusConcept.setIdentifier(""); fakeThesaurusConcept.setCreated(DateUtil.nowDate()); fakeThesaurusConcept.setModified(DateUtil.nowDate()); return fakeThesaurusConcept; } }