/*
* Copyright (c) 2012 Socialize Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.socialize.test.blackbox;
import com.socialize.android.ioc.AndroidIOC;
import com.socialize.api.DefaultSocializeRequestFactory;
import com.socialize.api.DefaultSocializeResponseFactory;
import com.socialize.api.DefaultSocializeSessionFactory;
import com.socialize.api.PreferenceSessionPersister;
import com.socialize.api.action.activity.SocializeActivitySystem;
import com.socialize.api.action.comment.SocializeCommentSystem;
import com.socialize.api.action.entity.SocializeEntitySystem;
import com.socialize.api.action.like.SocializeLikeSystem;
import com.socialize.api.action.share.SocializeShareSystem;
import com.socialize.api.action.user.SocializeUserSystem;
import com.socialize.api.action.view.SocializeViewSystem;
import com.socialize.config.SocializeConfig;
import com.socialize.entity.CommentFactory;
import com.socialize.entity.UserFactory;
import com.socialize.ioc.SocializeIOC;
import com.socialize.log.SocializeLogger;
import com.socialize.net.DefaultHttpClientFactory;
import com.socialize.oauth.CommonsHttpOAuthConsumerFactory;
import com.socialize.oauth.DefaultOauthRequestSigner;
import com.socialize.oauth.signpost.signature.AuthorizationHeaderSigningStrategy;
import com.socialize.provider.DefaultSocializeProvider;
import com.socialize.test.SocializeActivityTest;
import com.socialize.test.util.TestUtils;
import com.socialize.util.*;
/**
* Integration tests to verify that the IOC config for socialize is correct.
*
* @author Jason Polites
*
*/
public class SocializeIOCTest extends SocializeActivityTest {
public void testSocializeBeans() throws Exception {
// TODO: Add more tests to verify the structure, not just the beans
SocializeIOC ioc = new SocializeIOC();
ResourceLocator locator = new ResourceLocator();
locator.setLogger(new SocializeLogger());
locator.setClassLoaderProvider(new ClassLoaderProvider());
ioc.init(TestUtils.getActivity(this), locator);
// Now make sure all our beans are there
checkBeanType(ioc, "deviceUtils", DeviceUtils.class);
checkBeanType(ioc, "resourceLocator", ResourceLocator.class);
checkBeanType(ioc, "ioUtils", IOUtils.class);
checkBeanType(ioc, "jsonParser", JSONParser.class);
checkBeanType(ioc, "config", SocializeConfig.class);
checkBeanType(ioc, "logger", SocializeLogger.class);
checkBeanType(ioc, "userFactory", UserFactory.class);
checkBeanType(ioc, "clientFactory", DefaultHttpClientFactory.class);
checkBeanType(ioc, "sessionFactory", DefaultSocializeSessionFactory.class);
checkBeanType(ioc, "oauthConsumerFactory", CommonsHttpOAuthConsumerFactory.class);
checkBeanType(ioc, "oauthSigningStrategy", AuthorizationHeaderSigningStrategy.class);
checkBeanType(ioc, "oauthSigner", DefaultOauthRequestSigner.class);
checkBeanType(ioc, "commentFactory", CommentFactory.class);
checkBeanType(ioc, "commentRequestFactory", DefaultSocializeRequestFactory.class);
checkBeanType(ioc, "commentProvider", DefaultSocializeProvider.class);
checkBeanType(ioc, "commentSystem", SocializeCommentSystem.class);
checkBeanType(ioc, "shareSystem", SocializeShareSystem.class);
checkBeanType(ioc, "likeSystem", SocializeLikeSystem.class);
checkBeanType(ioc, "viewSystem", SocializeViewSystem.class);
checkBeanType(ioc, "userSystem", SocializeUserSystem.class);
checkBeanType(ioc, "entitySystem", SocializeEntitySystem.class);
checkBeanType(ioc, "activitySystem", SocializeActivitySystem.class);
checkBeanType(ioc, "commentSystem", SocializeCommentSystem.class);
checkBeanType(ioc, "responseFactory", DefaultSocializeResponseFactory.class);
checkBeanType(ioc, "sessionPersister",PreferenceSessionPersister.class);
// Check each bean
assertConfig((SocializeConfig) ioc.getBean("config"));
// Check specific beans
checkCommentProvider(ioc);
ioc.destroy();
}
private void assertConfig(SocializeConfig config) {
assertNotNull(config.getProperties());
}
private void checkBeanType(AndroidIOC ioc, String name, Class<?> clazz) {
Object bean = ioc.getBean(name);
assertNotNull(bean);
assertTrue(clazz.isAssignableFrom(bean.getClass()));
}
private void checkCommentProvider(SocializeIOC ioc) {
Object bean = ioc.getBean("commentProvider");
checkDefaultSocializeProvider(bean);
}
private void checkDefaultSocializeProvider(Object bean) {
assertNotNull(bean);
assertTrue((bean instanceof DefaultSocializeProvider));
DefaultSocializeProvider<?> provider = (DefaultSocializeProvider<?> ) bean;
assertNotNull(provider.getSessionPersister());
}
}