128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler/*
228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Copyright (C) 2009 The Android Open Source Project
328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler *
428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Licensed under the Apache License, Version 2.0 (the "License");
528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * you may not use this file except in compliance with the License.
628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * You may obtain a copy of the License at
728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler *
828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler *      http://www.apache.org/licenses/LICENSE-2.0
928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler *
1028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Unless required by applicable law or agreed to in writing, software
1128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * distributed under the License is distributed on an "AS IS" BASIS,
1228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * See the License for the specific language governing permissions and
1428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * limitations under the License.
1528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */
1628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
1728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerpackage com.android.email.activity.setup;
1828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
19040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedyimport android.content.Context;
2028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.content.Intent;
2128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.test.ActivityInstrumentationTestCase2;
2228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.test.suitebuilder.annotation.MediumTest;
23946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadlerimport android.view.View;
24946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadlerimport android.widget.CheckBox;
2528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.widget.Spinner;
2628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadlerimport android.widget.SpinnerAdapter;
2728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
280b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.email.R;
290b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.emailcommon.provider.Account;
300b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blankimport com.android.emailcommon.provider.HostAuth;
310b8e04c84def3a06ef45126b48efc485fa0a7628Marc Blank
32040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedyimport java.net.URISyntaxException;
33040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
3428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler/**
3528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler * Tests of basic UI logic in the AccountSetupOptions screen.
36e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * You can run this entire test case with:
37e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *   runtest -c com.android.email.activity.setup.AccountSetupOptionsTests email
3828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler */
3928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler@MediumTest
40040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedypublic class AccountSetupOptionsTests
4128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        extends ActivityInstrumentationTestCase2<AccountSetupOptions> {
4228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
4328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    private AccountSetupOptions mActivity;
4428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    private Spinner mCheckFrequencyView;
45946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    private CheckBox mBackgroundAttachmentsView;
46040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
4728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    public AccountSetupOptionsTests() {
4883457b0235b8a13e2d885d5b7550784ad470bb9cMakoto Onuki        super(AccountSetupOptions.class);
4928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
5028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
5128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
5228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Test that POP accounts aren't displayed with a push option
5328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
54040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testPushOptionPOP()
55040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
5628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        Intent i = getTestIntent("Name", "pop3://user:password@server.com");
5728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        this.setActivityIntent(i);
58040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
5928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        getActivityAndFields();
60040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
61f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
6228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        assertFalse(hasPush);
6328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
64040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
6528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
6628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Test that IMAP accounts aren't displayed with a push option
6728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
68040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testPushOptionIMAP()
69040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
7028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        Intent i = getTestIntent("Name", "imap://user:password@server.com");
7128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        this.setActivityIntent(i);
72040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
7328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        getActivityAndFields();
74040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
75f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
7628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        assertFalse(hasPush);
7728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
78040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
7928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
8028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Test that EAS accounts are displayed with a push option
8128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
82040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testPushOptionEAS()
83040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
8428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        Intent i = getTestIntent("Name", "eas://user:password@server.com");
8528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        this.setActivityIntent(i);
86040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
8728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        getActivityAndFields();
88040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
89f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        boolean hasPush = frequencySpinnerHasValue(Account.CHECK_INTERVAL_PUSH);
9028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        assertTrue(hasPush);
9128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
92946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
93946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    /**
94946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     * Test that POP3 accounts don't have a "background attachments" checkbox
95946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     */
96040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testBackgroundAttachmentsPop()
97040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
98946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        checkBackgroundAttachments("pop3://user:password@server.com", false);
99946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    }
100946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
101946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    /**
102946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     * Test that IMAP accounts have a "background attachments" checkbox
103946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     */
104040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testBackgroundAttachmentsImap()
105040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
106946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        checkBackgroundAttachments("imap://user:password@server.com", true);
107946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    }
108946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
109946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    /**
110946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     * Test that EAS accounts have a "background attachments" checkbox
111946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     */
112040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    public void testBackgroundAttachmentsEas()
113040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
114946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        checkBackgroundAttachments("eas://user:password@server.com", true);
115946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    }
116946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
117946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    /**
118040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy     * Common code to check that the "background attachments" checkbox is shown/hidden properly
119946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler     */
120040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    private void checkBackgroundAttachments(String storeUri, boolean expectVisible)
121040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
122946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        Intent i = getTestIntent("Name", storeUri);
123946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        this.setActivityIntent(i);
124946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        getActivityAndFields();
125946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
126946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        boolean isNull = mBackgroundAttachmentsView == null;
127946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        boolean isVisible = !isNull && (mBackgroundAttachmentsView.getVisibility() == View.VISIBLE);
128946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
129946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        if (!expectVisible) {
130946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler            assertTrue(!isVisible);
131946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        } else {
132946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler            assertTrue(!isNull);
133946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler            assertTrue(isVisible);
134946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        }
135946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler    }
136946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler
13728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
13828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Get the activity (which causes it to be started, using our intent) and get the UI fields
13928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
14028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    private void getActivityAndFields() {
14128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        mActivity = getActivity();
14228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        mCheckFrequencyView = (Spinner) mActivity.findViewById(R.id.account_check_frequency);
143946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler        mBackgroundAttachmentsView = (CheckBox) mActivity.findViewById(
144946239e8a0e01c628fae61894d3d48248b74cefcAndy Stadler                R.id.account_background_attachments);
14528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
146040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
14728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
14828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Test the frequency values list for a particular value
14928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
15028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    private boolean frequencySpinnerHasValue(int value) {
15128010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        SpinnerAdapter sa = mCheckFrequencyView.getAdapter();
15228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler
15328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        for (int i = 0; i < sa.getCount(); ++i) {
15428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler            SpinnerOption so = (SpinnerOption) sa.getItem(i);
15528010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler            if (so != null && ((Integer)so.value).intValue() == value) {
15628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler                return true;
15728010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler            }
15828010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        }
15928010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler        return false;
16028010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
161040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
16228010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    /**
16328010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     * Create an intent with the Account in it
16428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler     */
165040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy    private Intent getTestIntent(String name, String storeUri)
166040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy            throws URISyntaxException {
167f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank        Account account = new Account();
1689e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler        account.setSenderName(name);
169040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy        Context context = getInstrumentation().getTargetContext();
170040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy        HostAuth auth = account.getOrCreateHostAuthRecv(context);
171313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo        HostAuth.setHostAuthFromString(auth, storeUri);
172e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
173e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return new Intent(Intent.ACTION_MAIN);
17428010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler    }
175040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy
17628010fe9fc2ae45b8112a3c3b580f72e73f529afAndy Stadler}
177