/* * Copyright 2013-2017 Erudika. https://erudika.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * For issues and patches go to: https://github.com/erudika */ package com.erudika.para.aop; import com.erudika.para.core.ParaObject; import com.erudika.para.core.Sysprop; import com.erudika.para.core.Tag; import com.erudika.para.persistence.DAO; import com.erudika.para.persistence.MockDAO; import com.erudika.para.search.Search; import java.util.ArrayList; import java.util.List; import static com.erudika.para.aop.AOPUtils.*; import com.erudika.para.utils.Utils; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** * * @author Alex Bogdanovski [alex@erudika.com] */ public class AOPUtilsTest { public AOPUtilsTest() { } @Test public void testUtils() throws Exception { Tag tag = new Tag("tag"); Tag tag1 = new Tag("tag1"); Tag tag2 = new Tag("tag2"); Tag tag3 = new Tag("tag3"); List<ParaObject> list1 = new ArrayList<ParaObject>(); list1.add(tag1); list1.add(tag2); list1.add(tag3); List<ParaObject> list2 = new ArrayList<ParaObject>(); list2.add(new Tag("tagzz1")); list2.add(new Tag("tagzz2")); list2.add(new Tag("tagzz3")); List<String> badList = new ArrayList<String>(); badList.add("XXXtagXXX"); assertSame(tag, getArgOfParaObject(new Object[]{tag, "string"})); assertNull(getArgOfParaObject(new Object[]{"string"})); assertEquals(list1, getArgOfListOfType(new Object[]{list1}, ParaObject.class)); assertEquals(list2, getArgOfListOfType(new Object[]{list2}, ParaObject.class)); assertNull(getArgOfListOfType(new Object[]{badList}, ParaObject.class)); assertNull(getFirstArgOfString(new Object[]{list1})); assertNotNull(getFirstArgOfString(new Object[]{new Integer(123), "asd"})); assertEquals("asd", getFirstArgOfString(new Object[]{new Integer(123), "asd"})); DAO dao = new MockDAO(); Search search = getSearch(dao); assertNotNull(dao.create(tag)); assertNotNull(dao.read(tag.getId())); assertNotNull(search.findById(tag.getId())); dao.delete(tag); assertNull(dao.read(tag.getId())); assertNull(search.findById(tag.getId())); dao.createAll(list1); assertNotNull(dao.read(tag1.getId())); assertNotNull(dao.read(tag2.getId())); assertNotNull(dao.read(tag3.getId())); assertNotNull(search.findById(tag1.getId())); assertNotNull(search.findById(tag2.getId())); assertNotNull(search.findById(tag3.getId())); dao.deleteAll(list1); assertNull(dao.read(tag1.getId())); assertNull(dao.read(tag2.getId())); assertNull(dao.read(tag3.getId())); assertNull(search.findById(tag1.getId())); assertNull(search.findById(tag2.getId())); assertNull(search.findById(tag3.getId())); ArrayList<ParaObject> list3 = new ArrayList<ParaObject>(); ArrayList<ParaObject> indexUs = new ArrayList<ParaObject>(); tag.setIndexed(false); tag.setStored(false); list3.add(tag); assertFalse(removeNotStoredNotIndexed(list3, null).isEmpty()); assertTrue(list3.isEmpty()); list3.clear(); tag.setIndexed(true); tag.setStored(false); list3.add(tag); assertFalse(removeNotStoredNotIndexed(list3, indexUs).isEmpty()); assertTrue(list3.isEmpty()); assertFalse(indexUs.isEmpty()); Sysprop s = new Sysprop("custom_123"); s.setType("ok"); checkAndFixType(s); assertEquals("ok", s.getType()); s.setType(null); checkAndFixType(s); assertNotNull(s.getType()); s.setType("___NOT_OK_"); checkAndFixType(s); assertEquals("NOT_OK_", s.getType()); s.setType("NOT/_OK_"); checkAndFixType(s); assertEquals("NOT_OK_", s.getType()); s.setType("NOT/OK/.OK"); checkAndFixType(s); assertEquals("NOTOK.OK", s.getType()); s.setType("____"); checkAndFixType(s); assertEquals(Utils.type(Sysprop.class), s.getType()); } private Search getSearch(final DAO dao) { Search search = mock(Search.class); doAnswer(new Answer<Boolean>() { public Boolean answer(InvocationOnMock invocation) throws Throwable { ParaObject p = (ParaObject) invocation.getArguments()[0]; if (p != null) { dao.create(new Sysprop(p.getId().concat(":INDEXED"))); } return null; } }).when(search).index((ParaObject) any()); doAnswer(new Answer<Boolean>() { public Boolean answer(InvocationOnMock invocation) throws Throwable { ParaObject p = (ParaObject) invocation.getArguments()[0]; if (p != null) { dao.delete(new Sysprop(p.getId().concat(":INDEXED"))); } return null; } }).when(search).unindex((ParaObject) any()); when(search.findById(anyString())).thenAnswer(new Answer<ParaObject>() { public ParaObject answer(InvocationOnMock invocation) throws Throwable { return dao.read((String) invocation.getArguments()[0]); } }); return search; } }