blob: 7ac92f70f17c77d7629858945e10bd4e7a59366e [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "components/autofill/browser/wallet/wallet_address.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
const char kAddressMissingObjectId[] =
"{"
" \"phone_number\":\"phone_number\","
" \"postal_address\":"
" {"
" \"recipient_name\":\"recipient_name\","
" \"address_line\":"
" ["
" \"address_line_1\","
" \"address_line_2\""
" ],"
" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"postal_code_number\":\"postal_code_number\","
" \"country_name_code\":\"country_name_code\""
" }"
"}";
const char kAddressMissingCountryNameCode[] =
"{"
" \"id\":\"id\","
" \"phone_number\":\"phone_number\","
" \"postal_address\":"
" {"
" \"recipient_name\":\"recipient_name\","
" \"address_line\":"
" ["
" \"address_line_1\","
" \"address_line_2\""
" ],"
" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"postal_code_number\":\"postal_code_number\""
" }"
"}";
const char kAddressMissingRecipientName[] =
"{"
" \"id\":\"id\","
" \"phone_number\":\"phone_number\","
" \"postal_address\":"
" {"
" \"address_line\":"
" ["
" \"address_line_1\","
" \"address_line_2\""
" ],"
" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"postal_code_number\":\"postal_code_number\","
" \"country_name_code\":\"country_name_code\""
" }"
"}";
const char kAddressMissingPostalCodeNumber[] =
"{"
" \"id\":\"id\","
" \"phone_number\":\"phone_number\","
" \"postal_address\":"
" {"
" \"recipient_name\":\"recipient_name\","
" \"address_line\":"
" ["
" \"address_line_1\","
" \"address_line_2\""
" ],"
" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"country_name_code\":\"country_name_code\""
" }"
"}";
const char kValidAddress[] =
"{"
" \"id\":\"id\","
" \"phone_number\":\"phone_number\","
" \"postal_address\":"
" {"
" \"recipient_name\":\"recipient_name\","
" \"address_line\":"
" ["
" \"address_line_1\","
" \"address_line_2\""
" ],"
" \"locality_name\":\"locality_name\","
" \"administrative_area_name\":\"administrative_area_name\","
" \"country_name_code\":\"country_name_code\","
" \"postal_code_number\":\"postal_code_number\""
" }"
"}";
const char kClientAddressMissingCountryCode[] =
"{"
" \"name\":\"name\","
" \"address1\":\"address1\","
" \"address2\":\"address2\","
" \"city\":\"city\","
" \"state\":\"state\","
" \"postal_code\":\"postal_code\","
" \"phone_number\":\"phone_number\""
"}";
const char kClientAddressMissingPostalCode[] =
"{"
" \"name\":\"name\","
" \"address1\":\"address1\","
" \"address2\":\"address2\","
" \"city\":\"city\","
" \"state\":\"state\","
" \"phone_number\":\"phone_number\","
" \"country_code\":\"country_code\""
"}";
const char kClientAddressMissingName[] =
"{"
" \"address1\":\"address1\","
" \"address2\":\"address2\","
" \"city\":\"city\","
" \"state\":\"state\","
" \"postal_code\":\"postal_code\","
" \"phone_number\":\"phone_number\","
" \"country_code\":\"country_code\""
"}";
const char kClientValidAddress[] =
"{"
" \"name\":\"name\","
" \"address1\":\"address1\","
" \"address2\":\"address2\","
" \"city\":\"city\","
" \"state\":\"state\","
" \"postal_code\":\"postal_code\","
" \"phone_number\":\"phone_number\","
" \"country_code\":\"country_code\""
"}";
} // anonymous namespace
namespace autofill {
namespace wallet {
class WalletAddressTest : public testing::Test {
public:
WalletAddressTest() {}
protected:
void SetUpDictionary(const std::string& json) {
scoped_ptr<Value> value(base::JSONReader::Read(json));
DCHECK(value.get());
DCHECK(value->IsType(Value::TYPE_DICTIONARY));
dict_.reset(static_cast<DictionaryValue*>(value.release()));
}
scoped_ptr<const DictionaryValue> dict_;
};
TEST_F(WalletAddressTest, CreateAddressMissingObjectId) {
SetUpDictionary(kAddressMissingObjectId);
Address address("country_name_code",
ASCIIToUTF16("recipient_name"),
ASCIIToUTF16("address_line_1"),
ASCIIToUTF16("address_line_2"),
ASCIIToUTF16("locality_name"),
ASCIIToUTF16("administrative_area_name"),
ASCIIToUTF16("postal_code_number"),
ASCIIToUTF16("phone_number"),
std::string());
ASSERT_EQ(address, *Address::CreateAddress(*dict_));
}
TEST_F(WalletAddressTest, CreateAddressWithIDMissingObjectId) {
SetUpDictionary(kAddressMissingObjectId);
ASSERT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
}
TEST_F(WalletAddressTest, CreateAddressMissingCountryNameCode) {
SetUpDictionary(kAddressMissingCountryNameCode);
ASSERT_EQ(NULL, Address::CreateAddress(*dict_).get());
ASSERT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
}
TEST_F(WalletAddressTest, CreateAddressMissingRecipientName) {
SetUpDictionary(kAddressMissingRecipientName);
ASSERT_EQ(NULL, Address::CreateAddress(*dict_).get());
ASSERT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
}
TEST_F(WalletAddressTest, CreateAddressMissingPostalCodeNumber) {
SetUpDictionary(kAddressMissingPostalCodeNumber);
ASSERT_EQ(NULL, Address::CreateAddress(*dict_).get());
ASSERT_EQ(NULL, Address::CreateAddressWithID(*dict_).get());
}
TEST_F(WalletAddressTest, CreateAddressWithID) {
SetUpDictionary(kValidAddress);
Address address("country_name_code",
ASCIIToUTF16("recipient_name"),
ASCIIToUTF16("address_line_1"),
ASCIIToUTF16("address_line_2"),
ASCIIToUTF16("locality_name"),
ASCIIToUTF16("administrative_area_name"),
ASCIIToUTF16("postal_code_number"),
ASCIIToUTF16("phone_number"),
"id");
ASSERT_EQ(address, *Address::CreateAddress(*dict_));
ASSERT_EQ(address, *Address::CreateAddressWithID(*dict_));
}
TEST_F(WalletAddressTest, CreateDisplayAddressMissingCountryNameCode) {
SetUpDictionary(kClientAddressMissingCountryCode);
ASSERT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
}
TEST_F(WalletAddressTest, CreateDisplayAddressMissingName) {
SetUpDictionary(kClientAddressMissingName);
ASSERT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
}
TEST_F(WalletAddressTest, CreateDisplayAddressMissingPostalCode) {
SetUpDictionary(kClientAddressMissingPostalCode);
ASSERT_EQ(NULL, Address::CreateDisplayAddress(*dict_).get());
}
TEST_F(WalletAddressTest, CreateDisplayAddress) {
SetUpDictionary(kClientValidAddress);
Address address("country_code",
ASCIIToUTF16("name"),
ASCIIToUTF16("address1"),
ASCIIToUTF16("address2"),
ASCIIToUTF16("city"),
ASCIIToUTF16("state"),
ASCIIToUTF16("postal_code"),
ASCIIToUTF16("phone_number"),
std::string());
ASSERT_EQ(address, *Address::CreateDisplayAddress(*dict_));
}
TEST_F(WalletAddressTest, ToDictionaryWithoutID) {
base::DictionaryValue expected;
expected.SetString("country_name_code",
"country_name_code");
expected.SetString("recipient_name",
"recipient_name");
expected.SetString("locality_name",
"locality_name");
expected.SetString("administrative_area_name",
"administrative_area_name");
expected.SetString("postal_code_number",
"postal_code_number");
base::ListValue* address_lines = new base::ListValue();
address_lines->AppendString("address_line_1");
address_lines->AppendString("address_line_2");
expected.Set("address_line", address_lines);
Address address("country_name_code",
ASCIIToUTF16("recipient_name"),
ASCIIToUTF16("address_line_1"),
ASCIIToUTF16("address_line_2"),
ASCIIToUTF16("locality_name"),
ASCIIToUTF16("administrative_area_name"),
ASCIIToUTF16("postal_code_number"),
ASCIIToUTF16("phone_number"),
std::string());
EXPECT_TRUE(expected.Equals(address.ToDictionaryWithoutID().get()));
}
TEST_F(WalletAddressTest, ToDictionaryWithID) {
base::DictionaryValue expected;
expected.SetString("id", "id");
expected.SetString("phone_number", "phone_number");
expected.SetString("postal_address.country_name_code",
"country_name_code");
expected.SetString("postal_address.recipient_name",
"recipient_name");
expected.SetString("postal_address.locality_name",
"locality_name");
expected.SetString("postal_address.administrative_area_name",
"administrative_area_name");
expected.SetString("postal_address.postal_code_number",
"postal_code_number");
base::ListValue* address_lines = new base::ListValue();
address_lines->AppendString("address_line_1");
address_lines->AppendString("address_line_2");
expected.Set("postal_address.address_line", address_lines);
Address address("country_name_code",
ASCIIToUTF16("recipient_name"),
ASCIIToUTF16("address_line_1"),
ASCIIToUTF16("address_line_2"),
ASCIIToUTF16("locality_name"),
ASCIIToUTF16("administrative_area_name"),
ASCIIToUTF16("postal_code_number"),
ASCIIToUTF16("phone_number"),
"id");
EXPECT_TRUE(expected.Equals(address.ToDictionaryWithID().get()));
}
} // namespace wallet
} // namespace autofill