/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package de.unioninvestment.eai.portal.portlet.crud.domain.portal;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.when;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import com.liferay.portal.kernel.bean.BeanLocator;
import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
import com.liferay.portal.model.Company;
import com.liferay.portal.model.User;
import com.liferay.portal.security.permission.PermissionChecker;
import com.liferay.portal.security.permission.PermissionCheckerFactory;
import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.service.CompanyLocalService;
import com.liferay.portal.service.LayoutLocalService;
import com.liferay.portal.service.PermissionLocalService;
import com.liferay.portal.service.ResourceLocalService;
import com.liferay.portal.service.RoleLocalService;
import com.liferay.portal.service.UserLocalService;
/**
* Hilfsklasse für Liferay Mocking. In Liferay 6.1.1 werden die Services
* (i.d.R.) über einen BeanLocator ermittelt. Die Utility-Klassen cachen jedoch
* die Service-Instanzen, so dass die Mocks immer wieder verwendet werden
* müssen.
*
* TODO in Rule konvertieren
*
* @author carsten.mjartan
*/
public class LiferayTestHelper {
private static LiferayTestHelper helper;
@Mock
private Company companyMock;
@Mock
private CompanyLocalService companyLocalServiceMock;
@Mock
private UserLocalService userLocalServiceMock;
@Mock
private RoleLocalService roleLocalService;
@Mock
private ResourceLocalService resourceLocalService;
@Mock
private PermissionLocalService permissionLocalService;
@Mock
private PermissionCheckerFactory permissionCheckerFactoryMock;
@Mock
private PermissionChecker permissionCheckerMock;
@Mock
private LayoutLocalService layoutLocalServiceMock;
@Mock
private BeanLocator beanLocatorMock;
/**
* @return liefert die Klasse als Singleton
*/
public static LiferayTestHelper get() {
if (helper == null) {
helper = new LiferayTestHelper();
}
return helper;
}
/**
* Einmalige Instanzierung der Mocks, Registrierung und Initialisierung
*/
private LiferayTestHelper() {
MockitoAnnotations.initMocks(this);
when(beanLocatorMock.locate(CompanyLocalService.class.getName()))
.thenReturn(companyLocalServiceMock);
// when(beanLocatorMock.locate(PermissionCheckerFactory.class.getName()))
// .thenReturn(permissionCheckerFactoryMock);
// old style needed here:
new PermissionCheckerFactoryUtil()
.setPermissionCheckerFactory(permissionCheckerFactoryMock);
when(beanLocatorMock.locate(UserLocalService.class.getName()))
.thenReturn(userLocalServiceMock);
when(beanLocatorMock.locate(RoleLocalService.class.getName()))
.thenReturn(roleLocalService);
when(beanLocatorMock.locate(ResourceLocalService.class.getName()))
.thenReturn(resourceLocalService);
when(beanLocatorMock.locate(PermissionLocalService.class.getName()))
.thenReturn(permissionLocalService);
when(beanLocatorMock.locate(LayoutLocalService.class.getName()))
.thenReturn(layoutLocalServiceMock);
PortalBeanLocatorUtil.setBeanLocator(beanLocatorMock);
initializeMocks();
}
/**
* Default-Verhalten der Mocks
*/
private void initializeMocks() {
try {
when(permissionCheckerFactoryMock.create(any(User.class)))
.thenReturn(permissionCheckerMock);
} catch (Exception e) {
// should never happen
throw new RuntimeException(e);
}
}
/**
* Zurücksetzen der Mocks. Sollte vor jedem Unit-Testfall aufgerufen werden.
*/
public void resetMocks() {
reset(companyLocalServiceMock, permissionCheckerFactoryMock,
userLocalServiceMock, roleLocalService, resourceLocalService,
permissionLocalService, permissionCheckerMock);
initializeMocks();
}
public Company getCompanyMock() {
return companyMock;
}
public CompanyLocalService getCompanyLocalServiceMock() {
return companyLocalServiceMock;
}
public UserLocalService getUserLocalServiceMock() {
return userLocalServiceMock;
}
public RoleLocalService getRoleLocalService() {
return roleLocalService;
}
public ResourceLocalService getResourceLocalService() {
return resourceLocalService;
}
public PermissionLocalService getPermissionLocalService() {
return permissionLocalService;
}
public PermissionCheckerFactory getPermissionCheckerFactoryMock() {
return permissionCheckerFactoryMock;
}
public PermissionChecker getPermissionCheckerMock() {
return permissionCheckerMock;
}
public BeanLocator getBeanLocatorMock() {
return beanLocatorMock;
}
public LayoutLocalService getLayoutLocalServiceMock() {
return layoutLocalServiceMock;
}
}