1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.chrome.browser.autofill;
6
7import android.test.suitebuilder.annotation.SmallTest;
8
9import org.chromium.base.test.util.Feature;
10import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
11import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
12import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
13
14import java.util.concurrent.ExecutionException;
15
16/**
17 * Tests for Chrome on Android's usage of the PersonalDataManager API.
18 */
19public class PersonalDataManagerTest extends ChromiumTestShellTestBase {
20
21    private AutofillTestHelper mHelper;
22
23    @Override
24    public void setUp() throws Exception {
25        super.setUp();
26        clearAppData();
27        launchChromiumTestShellWithBlankPage();
28        assertTrue(waitForActiveShellToBeDoneLoading());
29
30        mHelper = new AutofillTestHelper();
31    }
32
33    @SmallTest
34    @Feature({"Autofill"})
35    public void testAddAndEditProfiles() throws InterruptedException, ExecutionException {
36        AutofillProfile profile = new AutofillProfile(
37                "" /* guid */, "https://www.example.com" /* origin */,
38                "John Smith", "Acme Inc.", "1 Main", "Apt A", "San Francisco", "CA",
39                "94102", "US", "4158889999", "john@acme.inc");
40        String profileOneGUID = mHelper.setProfile(profile);
41        assertEquals(1, mHelper.getNumberOfProfiles());
42
43        AutofillProfile profile2 = new AutofillProfile(
44                "" /* guid */, "http://www.example.com" /* origin */,
45                "John Hackock", "Acme Inc.", "1 Main", "Apt A", "San Francisco", "CA",
46                "94102", "US", "4158889999", "john@acme.inc");
47        String profileTwoGUID = mHelper.setProfile(profile2);
48        assertEquals(2, mHelper.getNumberOfProfiles());
49
50        profile.setGUID(profileOneGUID);
51        profile.setCountry("Canada");
52        mHelper.setProfile(profile);
53        assertEquals("Should still have only two profile", 2, mHelper.getNumberOfProfiles());
54
55        AutofillProfile storedProfile = mHelper.getProfile(profileOneGUID);
56        assertEquals(profileOneGUID, storedProfile.getGUID());
57        assertEquals("https://www.example.com", storedProfile.getOrigin());
58        assertEquals("CA", storedProfile.getCountryCode());
59        assertEquals("San Francisco", storedProfile.getCity());
60        assertNotNull(mHelper.getProfile(profileTwoGUID));
61    }
62
63    @SmallTest
64    @Feature({"Autofill"})
65    public void testAddAndDeleteProfile() throws InterruptedException, ExecutionException {
66        AutofillProfile profile = new AutofillProfile(
67                "" /* guid */, "Chrome settings" /* origin */,
68                "John Smith", "Acme Inc.", "1 Main", "Apt A", "San Francisco", "CA",
69                "94102", "US", "4158889999", "john@acme.inc");
70        String profileOneGUID = mHelper.setProfile(profile);
71        assertEquals(1, mHelper.getNumberOfProfiles());
72
73        mHelper.deleteProfile(profileOneGUID);
74        assertEquals(0, mHelper.getNumberOfProfiles());
75    }
76
77    @SmallTest
78    @Feature({"Autofill"})
79    public void testAddAndEditCreditCards() throws InterruptedException, ExecutionException {
80        CreditCard card = new CreditCard(
81                "" /* guid */, "https://www.example.com" /* origin */,
82                "Visa", "1234123412341234", "", "5", "2020");
83        String cardOneGUID = mHelper.setCreditCard(card);
84        assertEquals(1, mHelper.getNumberOfCreditCards());
85
86        CreditCard card2 = new CreditCard(
87                "" /* guid */, "http://www.example.com" /* origin */,
88                "American Express", "1234123412341234", "", "8", "2020");
89        String cardTwoGUID = mHelper.setCreditCard(card2);
90        assertEquals(2, mHelper.getNumberOfCreditCards());
91
92        card.setGUID(cardOneGUID);
93        card.setMonth("10");
94        card.setNumber("5678567856785678");
95        mHelper.setCreditCard(card);
96        assertEquals("Should still have only two cards", 2, mHelper.getNumberOfCreditCards());
97
98        CreditCard storedCard = mHelper.getCreditCard(cardOneGUID);
99        assertEquals(cardOneGUID, storedCard.getGUID());
100        assertEquals("https://www.example.com", storedCard.getOrigin());
101        assertEquals("Visa", storedCard.getName());
102        assertEquals("10", storedCard.getMonth());
103        assertEquals("5678567856785678", storedCard.getNumber());
104        assertEquals("************5678", storedCard.getObfuscatedNumber());
105        assertNotNull(mHelper.getCreditCard(cardTwoGUID));
106    }
107
108    @SmallTest
109    @Feature({"Autofill"})
110    public void testAddAndDeleteCreditCard() throws InterruptedException, ExecutionException {
111        CreditCard card = new CreditCard(
112                "" /* guid */, "Chrome settings" /* origin */,
113                "Visa", "1234123412341234", "", "5", "2020");
114        String cardOneGUID = mHelper.setCreditCard(card);
115        assertEquals(1, mHelper.getNumberOfCreditCards());
116
117        mHelper.deleteCreditCard(cardOneGUID);
118        assertEquals(0, mHelper.getNumberOfCreditCards());
119    }
120
121    @SmallTest
122    @Feature({"Autofill"})
123    public void testRespectCountryCodes() throws InterruptedException, ExecutionException {
124        // The constructor should accept country names and ISO 3166-1-alpha-2 country codes.
125        // getCountryCode() should return a country code.
126        AutofillProfile profile1 = new AutofillProfile(
127                "" /* guid */, "https://www.example.com" /* origin */,
128                "John Smith", "Acme Inc.", "1 Main", "Apt A", "Montreal", "Quebec",
129                "H3B 2Y5", "Canada", "514-670-1234", "john@acme.inc");
130        String profileGuid1 = mHelper.setProfile(profile1);
131
132        AutofillProfile profile2 = new AutofillProfile(
133                "" /* guid */, "https://www.example.com" /* origin */,
134                "Greg Smith", "Ucme Inc.", "123 Bush", "Apt 125", "Montreal", "Quebec",
135                "H3B 2Y5", "CA", "514-670-4321", "greg@ucme.inc");
136        String profileGuid2 = mHelper.setProfile(profile2);
137
138        assertEquals(2, mHelper.getNumberOfProfiles());
139
140        AutofillProfile storedProfile1 = mHelper.getProfile(profileGuid1);
141        assertEquals("CA", storedProfile1.getCountryCode());
142
143        AutofillProfile storedProfile2 = mHelper.getProfile(profileGuid2);
144        assertEquals("CA", storedProfile2.getCountryCode());
145    }
146
147}
148