/******************************************************************************* * Copyright 2011 The Regents of the University of California * * 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. ******************************************************************************/ package org.ohmage.activity.test; import android.test.ActivityInstrumentationTestCase2; import android.test.mock.MockContentResolver; import android.test.suitebuilder.annotation.Smoke; import com.jayway.android.robotium.solo.Solo; import org.ohmage.OhmageApplication; import org.ohmage.activity.CampaignAddActivity; import org.ohmage.activity.CampaignInfoActivity; import org.ohmage.activity.DashboardActivity; import org.ohmage.db.DbContract; import org.ohmage.db.Models.Campaign; import org.ohmage.db.test.CampaignContentProvider; /** * <p>This class contains tests for the {@link CampaignAddActivity}</p> * * @author cketcham * */ public class CampaignAddActivityTest extends ActivityInstrumentationTestCase2<CampaignAddActivity> { private Solo solo; private CampaignContentProvider provider; public CampaignAddActivityTest() { super(CampaignAddActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); getInstrumentation().waitForIdleSync(); MockContentResolver fake = new MockContentResolver(); provider = new CampaignContentProvider(OhmageApplication.getContext(), DbContract.CONTENT_AUTHORITY); provider.addToContentResolver(fake); OhmageApplication.setFakeContentResolver(fake); solo = new Solo(getInstrumentation(), getActivity()); } @Override protected void tearDown() throws Exception{ try { solo.finalize(); } catch (Throwable e) { e.printStackTrace(); } getActivity().finish(); super.tearDown(); } public void testPreconditions() { solo.assertCurrentActivity("expected response list", CampaignAddActivity.class); } @Smoke public void testHomeButton() { solo.clickOnImageButton(0); solo.waitForActivity("DashboardActivity"); solo.assertCurrentActivity("Expected Dashboard", DashboardActivity.class); solo.goBack(); } public void testCampaignsWithCorrectStateAreDisplayed() { setDefaultCampaigns(); // Any campaigns which are remote or downloading are shown assertTrue(provider.getLastSelection().contains("campaign_status = " + Campaign.STATUS_REMOTE)); assertTrue(provider.getLastSelection().contains("OR")); assertTrue(provider.getLastSelection().contains("campaign_status = " + Campaign.STATUS_DOWNLOADING)); } public void testListItemInfoIsCorrect() { setDefaultCampaigns(); assertTrue(solo.searchText(provider.getCampaigns()[0].mName, true)); assertTrue(solo.searchText(provider.getCampaigns()[0].mUrn, true)); } public void testClickListItem() { setDefaultCampaigns(); solo.clickOnText(provider.getCampaigns()[0].mName); solo.assertCurrentActivity("Expected Campaign Info", CampaignInfoActivity.class); assertTrue(solo.getCurrentActivity().getIntent().getData().getPath().endsWith(provider.getCampaigns()[0].mUrn)); solo.goBack(); } public void testEmptyList() { // set no campaigns provider.setCampaigns(null); assertTrue(solo.searchText("No campaigns available at this time\\.", true)); } private void setDefaultCampaigns() { Campaign[] campaigns = new Campaign[4]; for(int i=0; i< campaigns.length; i++) { campaigns[i] = getCampaign(i); } provider.setCampaigns(campaigns); } private Campaign getCampaign(int index) { Campaign c = new Campaign(); c.mName = "Campaign #" + index; c.mUrn = "urn:campaign:" + index; c.mStatus = Campaign.STATUS_REMOTE; return c; } }