/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xwiki.rendering.macro.useravatar;
import java.lang.reflect.Type;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.runner.RunWith;
import org.xwiki.bridge.DocumentAccessBridge;
import org.xwiki.bridge.SkinAccessBridge;
import org.xwiki.component.descriptor.ComponentDescriptor;
import org.xwiki.component.descriptor.DefaultComponentDescriptor;
import org.xwiki.component.manager.ComponentManager;
import org.xwiki.component.util.ReflectionUtils;
import org.xwiki.model.EntityType;
import org.xwiki.model.reference.AttachmentReference;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.DocumentReferenceResolver;
import org.xwiki.model.reference.EntityReference;
import org.xwiki.model.reference.EntityReferenceSerializer;
import org.xwiki.model.reference.EntityReferenceValueProvider;
import org.xwiki.rendering.test.integration.RenderingTestSuite;
/**
* Run all tests found in {@code *.test} files located in the classpath. These {@code *.test} files must follow the
* conventions described in {@link org.xwiki.rendering.test.integration.TestDataParser}.
*
* @version $Id: 103401d2b6ac70b402dbb528addaf98b3f190b06 $
* @since 3.0RC1
*/
@RunWith(RenderingTestSuite.class)
public class IntegrationTests
{
@RenderingTestSuite.Initialized
public void initialize(ComponentManager componentManager) throws Exception
{
Mockery mockery = new JUnit4Mockery();
// Skin Access Bridge Mock
final SkinAccessBridge mockSkinAccessBridge =
registerMockComponent(componentManager, mockery, SkinAccessBridge.class);
mockery.checking(new Expectations() {{
allowing(mockSkinAccessBridge).getSkinFile("icons/xwiki/noavatar.png");
will(returnValue("/xwiki/resources/icons/xwiki/noavatar.png"));
}});
// Document Access Bridge Mock
final DocumentReference adminUserReference = new DocumentReference("wiki", "XWiki", "Admin");
final DocumentReference userWithoutAvatarReference =
new DocumentReference("wiki", "XWiki", "ExistingUserWithoutAvatar");
final DocumentReference userNotExistingReference = new DocumentReference("wiki", "XWiki", "UserNotExisting");
final DocumentReference userWithNonExistingAvatarFileReference =
new DocumentReference("wiki", "XWiki", "UserWithNonExistingAvatarFile");
final DocumentReference userWithExceptionRetrievingAvatarFileReference =
new DocumentReference("wiki", "XWiki", "UserWithExceptionRetrievingAvatarFile");
final DocumentReference userClassReference = new DocumentReference("wiki", "XWiki", "XWikiUsers");
final DocumentAccessBridge mockDocumentAccessBridge =
registerMockComponent(componentManager, mockery, DocumentAccessBridge.class);
mockery.checking(new Expectations() {{
allowing(mockDocumentAccessBridge).exists(adminUserReference); will(returnValue(true));
allowing(mockDocumentAccessBridge).exists(userWithoutAvatarReference); will(returnValue(true));
allowing(mockDocumentAccessBridge).exists(with(any(String.class))); will(returnValue(false));
allowing(mockDocumentAccessBridge).exists(userNotExistingReference); will(returnValue(false));
allowing(mockDocumentAccessBridge).exists(userWithNonExistingAvatarFileReference); will(returnValue(true));
allowing(mockDocumentAccessBridge).exists(userWithExceptionRetrievingAvatarFileReference); will(returnValue(true));
allowing(mockDocumentAccessBridge).getProperty(adminUserReference, userClassReference, "avatar");
will(returnValue("mockAvatar.png"));
allowing(mockDocumentAccessBridge).getProperty(userWithoutAvatarReference, userClassReference,
"avatar"); will(returnValue(null));
allowing(mockDocumentAccessBridge).getProperty(userWithNonExistingAvatarFileReference,
userClassReference, "avatar"); will(returnValue("mockAvatar.png"));
allowing(mockDocumentAccessBridge).getProperty(userWithExceptionRetrievingAvatarFileReference,
userClassReference, "avatar"); will(returnValue("mockAvatar.png"));
allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
adminUserReference)); will(returnValue("1.1"));
allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
userWithNonExistingAvatarFileReference)); will(returnValue(null));
allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
userWithExceptionRetrievingAvatarFileReference)); will(throwException(new Exception("Sum Ting Wong")));
}});
// Document Resolver Mock
final DocumentReferenceResolver<String> mockDocumentReferenceResolver =
registerMockComponent(componentManager, mockery, DocumentReferenceResolver.TYPE_STRING, "current");
mockery.checking(new Expectations() {{
allowing(mockDocumentReferenceResolver).resolve("XWiki.Admin",
new EntityReference("XWiki", EntityType.SPACE));
will(returnValue(adminUserReference));
allowing(mockDocumentReferenceResolver).resolve("XWiki.ExistingUserWithoutAvatar",
new EntityReference("XWiki", EntityType.SPACE));
will(returnValue(userWithoutAvatarReference));
allowing(mockDocumentReferenceResolver).resolve("XWiki.UserNotExisting",
new EntityReference("XWiki", EntityType.SPACE));
will(returnValue(userNotExistingReference));
allowing(mockDocumentReferenceResolver).resolve("XWiki.UserWithNonExistingAvatarFile",
new EntityReference("XWiki", EntityType.SPACE));
will(returnValue(userWithNonExistingAvatarFileReference));
allowing(mockDocumentReferenceResolver).resolve("XWiki.UserWithExceptionRetrievingAvatarFile",
new EntityReference("XWiki", EntityType.SPACE));
will(returnValue(userWithExceptionRetrievingAvatarFileReference));
}});
// Entity Reference Serializer Mock
final EntityReferenceSerializer<String> mockEntityReferenceSerializer =
registerMockComponent(componentManager, mockery, EntityReferenceSerializer.TYPE_STRING, "compactwiki");
mockery.checking(new Expectations() {{
allowing(mockEntityReferenceSerializer).serialize(
new AttachmentReference("mockAvatar.png", adminUserReference));
will(returnValue("XWiki.Admin@mockAvatar.png"));
allowing(mockEntityReferenceSerializer).serialize(userNotExistingReference);
will(returnValue("XWiki.UserNotExisting"));
allowing(mockEntityReferenceSerializer).serialize(
new AttachmentReference("mockAvatar.png", userWithNonExistingAvatarFileReference));
will(returnValue("XWiki.UserWithNonExistingAvatarFile@mockAvatar.png"));
allowing(mockEntityReferenceSerializer).serialize(
new AttachmentReference("mockAvatar.png", userWithExceptionRetrievingAvatarFileReference));
will(returnValue("XWiki.UserWithExceptionRetrievingAvatarFile@mockAvatar.png"));
allowing(mockEntityReferenceSerializer).serialize(userWithExceptionRetrievingAvatarFileReference);
will(returnValue("XWiki.UserWithExceptionRetrievingAvatarFile"));
}});
// Entity Reference Serializer Mock
final EntityReferenceValueProvider mockEntityReferenceValueProvider =
registerMockComponent(componentManager, mockery, EntityReferenceValueProvider.class, "current");
mockery.checking(new Expectations() {{
allowing(mockEntityReferenceValueProvider).getDefaultValue(EntityType.WIKI); will(returnValue("wiki"));
}});
}
private static <T> T registerMockComponent(ComponentManager componentManager, Mockery mockery,
Type role, String hint) throws Exception
{
DefaultComponentDescriptor<T> descriptor = createComponentDescriptor(role);
descriptor.setRoleHint(hint);
return registerMockComponent(componentManager, mockery, descriptor);
}
private static <T> T registerMockComponent(ComponentManager componentManager, Mockery mockery,
Type role) throws Exception
{
return registerMockComponent(componentManager, mockery, IntegrationTests.<T> createComponentDescriptor(role));
}
private static <T> T registerMockComponent(ComponentManager componentManager, Mockery mockery,
ComponentDescriptor<T> descriptor) throws Exception
{
T mock = mockery.mock((Class<T>)ReflectionUtils.getTypeClass(descriptor.getRoleType()));
componentManager.registerComponent(descriptor, mock);
return mock;
}
private static <T> DefaultComponentDescriptor<T> createComponentDescriptor(Type role)
{
DefaultComponentDescriptor<T> descriptor = new DefaultComponentDescriptor<T>();
descriptor.setRoleType(role);
return descriptor;
}
}