blob: e9b8c4867987ab90f122607eafdba7e5e4ed7491 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/cart/cart_discount_link_fetcher.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
cart_db::ChromeCartContentProto BuildProto(
const std::string& domain,
const std::string& merchant_url,
const std::string& merchant_id,
const double last_used_timestamp,
const std::string& rule_id,
const std::string& merchant_rule_id,
const std::string& raw_merchant_offer_id) {
cart_db::ChromeCartContentProto proto;
proto.set_key(domain);
proto.set_merchant_cart_url(merchant_url);
proto.set_timestamp(last_used_timestamp);
proto.mutable_discount_info()->set_merchant_id(merchant_id);
cart_db::RuleDiscountInfoProto* discount =
proto.mutable_discount_info()->add_rule_discount_info();
discount->set_rule_id(rule_id);
discount->set_merchant_rule_id(merchant_rule_id);
discount->set_raw_merchant_offer_id(raw_merchant_offer_id);
return proto;
}
cart_db::ChromeCartContentProto BuildProtoWithPercentOff(
const std::string& domain,
const std::string& merchant_url,
const std::string& merchant_id,
const double last_used_timestamp,
const std::string& rule_id,
const std::string& merchant_rule_id,
const std::string& raw_merchant_offer_id,
const int percent_off) {
auto proto =
BuildProto(domain, merchant_url, merchant_id, last_used_timestamp,
rule_id, merchant_rule_id, raw_merchant_offer_id);
cart_db::RuleDiscountInfoProto* discount =
proto.mutable_discount_info()->mutable_rule_discount_info(0);
discount->set_percent_off(percent_off);
return proto;
}
cart_db::ChromeCartContentProto BuildProtoWithAmountOff(
const std::string& domain,
const std::string& merchant_url,
const std::string& merchant_id,
const double last_used_timestamp,
const std::string& rule_id,
const std::string& merchant_rule_id,
const std::string& raw_merchant_offer_id,
const std::string& currency_code,
const std::string& units,
const int nanos) {
auto proto =
BuildProto(domain, merchant_url, merchant_id, last_used_timestamp,
rule_id, merchant_rule_id, raw_merchant_offer_id);
cart_db::RuleDiscountInfoProto* discount =
proto.mutable_discount_info()->mutable_rule_discount_info(0);
cart_db::MoneyProto* money = discount->mutable_amount_off();
money->set_currency_code(currency_code);
money->set_units(units);
money->set_nanos(nanos);
return proto;
}
const char kMockMerchantA[] = "foo.com";
const char kMockMerchantACartURL[] = "https://www.foo.com/cart";
const int kMockMerchantALastTimestamp = 1;
const char kMockMerchantAId[] = "123";
const char kMockMerchantARuleId[] = "456";
const char kMockMerchantARawMerchantOfferId[] = "789";
const int kMockMerchantAPercentOff = 10;
const char kMockMerchantAMoneyOffCurrency[] = "USD";
const char kMockMerchantAMonneyOffUnits[] = "10";
const int kMockMerchantAMonneyOffNanos = 0;
} // namespace
class CartDiscountLinkFetcherTest {
public:
static std::string generatePostData(
cart_db::ChromeCartContentProto cart_content_proto) {
return CartDiscountLinkFetcher::GeneratePostData(
std::move(cart_content_proto));
}
};
TEST(CartDiscountLinkFetcherTest, TestGeneratePostData_PercentOff) {
cart_db::ChromeCartContentProto cart_content_proto = BuildProtoWithPercentOff(
kMockMerchantA, kMockMerchantACartURL, kMockMerchantAId,
kMockMerchantALastTimestamp, kMockMerchantARuleId, kMockMerchantARuleId,
kMockMerchantARawMerchantOfferId, kMockMerchantAPercentOff);
std::string expected =
"{\"baseUrl\":\"https://www.foo.com/"
"cart\",\"discount\":{\"merchantIdentifier\":{\"cartUrl\":\"https://"
"www.foo.com/"
"cart\",\"merchantId\":\"123\"},\"ruleDiscounts\":[{\"discount\":{"
"\"percentOff\":10},\"merchantRuleId\":\"456\",\"rawMerchantOfferId\":"
"\"789\",\"ruleId\":\"456\"}]},\"merchantId\":\"123\"}";
std::string generated_post_data =
CartDiscountLinkFetcherTest::generatePostData(
std::move(cart_content_proto));
EXPECT_EQ(expected, generated_post_data);
}
TEST(CartDiscountLinkFetcherTest, TestGeneratePostData_AmountOff) {
cart_db::ChromeCartContentProto cart_content_proto = BuildProtoWithAmountOff(
kMockMerchantA, kMockMerchantACartURL, kMockMerchantAId,
kMockMerchantALastTimestamp, kMockMerchantARuleId, kMockMerchantARuleId,
kMockMerchantARawMerchantOfferId, kMockMerchantAMoneyOffCurrency,
kMockMerchantAMonneyOffUnits, kMockMerchantAMonneyOffNanos);
std::string expected =
"{\"baseUrl\":\"https://www.foo.com/"
"cart\",\"discount\":{\"merchantIdentifier\":{\"cartUrl\":\"https://"
"www.foo.com/"
"cart\",\"merchantId\":\"123\"},\"ruleDiscounts\":[{\"discount\":{"
"\"amountOff\":{\"currencyCode\":\"USD\",\"nanos\":0,\"units\":\"10\"}},"
"\"merchantRuleId\":\"456\",\"rawMerchantOfferId\":\"789\",\"ruleId\":"
"\"456\"}]},\"merchantId\":\"123\"}";
std::string generated_post_data =
CartDiscountLinkFetcherTest::generatePostData(
std::move(cart_content_proto));
EXPECT_EQ(expected, generated_post_data);
}
TEST(CartDiscountLinkFetcherTest,
TestGeneratePostData_OptionalRawMerchantOfferId) {
cart_db::ChromeCartContentProto cart_content_proto = BuildProtoWithAmountOff(
kMockMerchantA, kMockMerchantACartURL, kMockMerchantAId,
kMockMerchantALastTimestamp, kMockMerchantARuleId, kMockMerchantARuleId,
"", kMockMerchantAMoneyOffCurrency, kMockMerchantAMonneyOffUnits,
kMockMerchantAMonneyOffNanos);
std::string expected =
"{\"baseUrl\":\"https://www.foo.com/"
"cart\",\"discount\":{\"merchantIdentifier\":{\"cartUrl\":\"https://"
"www.foo.com/"
"cart\",\"merchantId\":\"123\"},\"ruleDiscounts\":[{\"discount\":{"
"\"amountOff\":{\"currencyCode\":\"USD\",\"nanos\":0,\"units\":\"10\"}},"
"\"merchantRuleId\":\"456\",\"ruleId\":"
"\"456\"}]},\"merchantId\":\"123\"}";
std::string generated_post_data =
CartDiscountLinkFetcherTest::generatePostData(
std::move(cart_content_proto));
EXPECT_EQ(expected, generated_post_data);
}