Index: chrome/browser/web_resource/promo_resource_service_unittest.cc |
=================================================================== |
--- chrome/browser/web_resource/promo_resource_service_unittest.cc (revision 111558) |
+++ chrome/browser/web_resource/promo_resource_service_unittest.cc (working copy) |
@@ -103,9 +103,9 @@ |
" }" |
"}"; |
- scoped_ptr<DictionaryValue> test_json(static_cast<DictionaryValue*>( |
+ scoped_ptr<DictionaryValue> test_json(static_cast<DictionaryValue*>( |
base::JSONReader::Read(json_header + question + json_footer, false))); |
- web_resource_service_->UnpackNTPSignInPromoSignal(*(test_json.get())); |
+ web_resource_service_->UnpackNTPSignInPromoSignal(*(test_json.get())); |
} |
private: |
@@ -194,8 +194,9 @@ |
class NotificationPromoTestDelegate : public NotificationPromo::Delegate { |
public: |
- explicit NotificationPromoTestDelegate(PrefService* prefs) |
- : prefs_(prefs), |
+ explicit NotificationPromoTestDelegate(Profile* profile) |
+ : profile_(profile), |
+ prefs_(profile->GetPrefs()), |
notification_promo_(NULL), |
received_notification_(false), |
achuithb
2011/11/27 07:48:26
please initialize should_receive_notification_ her
Cait (Slow)
2011/11/28 19:06:25
Done.
|
build_targeted_(true), |
@@ -208,7 +209,9 @@ |
platform_(NotificationPromo::PLATFORM_NONE), |
text_(), |
closed_(false), |
- current_platform_(NotificationPromo::CurrentPlatform()) { |
+ current_platform_(NotificationPromo::CurrentPlatform()), |
+ gplus_(false), |
+ feature_mask_(0) { |
} |
void Init(NotificationPromo* notification_promo, |
@@ -216,7 +219,8 @@ |
double start, double end, |
int build, int time_slice, |
int max_group, int max_views, int platform, |
- const std::string& text, bool closed) { |
+ int feature_mask, const std::string& text, bool closed, |
+ bool gplus) { |
notification_promo_ = notification_promo; |
test_json_.reset(static_cast<DictionaryValue*>( |
@@ -233,16 +237,26 @@ |
text_ = text; |
closed_ = closed; |
+ gplus_ = gplus; |
+ feature_mask_ = feature_mask; |
received_notification_ = false; |
} |
// NotificationPromo::Delegate implementation. |
- virtual void OnNewNotification(double start, double end) { |
- EXPECT_EQ(CalcStart(), start); |
- EXPECT_EQ(notification_promo_->StartTimeWithOffset(), start); |
- EXPECT_EQ(notification_promo_->end_, end); |
- received_notification_ = true; |
+ virtual void OnNotificationParsed(double start, double end) { |
+ if (should_receive_notification_) { |
+ EXPECT_EQ(CalcStart(), start); |
+ EXPECT_EQ(notification_promo_->StartTimeWithOffset(), start); |
+ EXPECT_EQ(notification_promo_->end_, end); |
+ } |
+ // If notification info needs to be updated, OnNotificationParsed is |
+ // called with start and end times, if no update needed, it is called |
+ // with default values (0.0, 0.0). |
+ received_notification_ = !(start == 0.0 && end == 0.0); |
+ |
+ // Test if notification received |
+ EXPECT_TRUE(received_notification_ == should_receive_notification_); |
} |
virtual bool IsBuildAllowed(int builds_targeted) const { |
@@ -263,8 +277,9 @@ |
} |
void InitPromoFromJson(bool should_receive_notification) { |
+ should_receive_notification_ = should_receive_notification; |
received_notification_ = false; |
- notification_promo_->InitFromJson(TestJson()); |
+ notification_promo_->InitFromJson(TestJson(), false); |
EXPECT_TRUE(received_notification_ == should_receive_notification); |
// Test the fields. |
@@ -272,6 +287,39 @@ |
TestPrefs(); |
} |
+ void ParseAndCallCookies(const DictionaryValue& json, |
achuithb
2011/11/27 07:48:26
You don't need this function at all. You're mainly
Cait (Slow)
2011/11/28 19:06:25
The purpose of this code is to set the promo value
|
+ const std::string& cookies, bool should_receive_notification, |
+ bool should_find_cookie) { |
+ should_receive_notification_ = should_receive_notification; |
+ received_notification_ = false; |
+ |
+ const char kHeaderProperty[] = "topic"; |
+ const char kArrayProperty[] = "answers"; |
+ |
+ DictionaryValue* dict; |
+ if (json.GetDictionary(kHeaderProperty, &dict)) { |
+ ListValue* answers; |
+ if (dict->GetList(kArrayProperty, &answers)) { |
+ for (ListValue::const_iterator it = answers->begin(); |
+ it != answers->end(); |
+ ++it) { |
+ if ((*it)->IsType(Value::TYPE_DICTIONARY)) |
+ notification_promo_->Parse(static_cast<DictionaryValue*>(*it)); |
+ } |
+ } |
+ } |
+ |
+ bool found_cookie = notification_promo_->CheckForGPlusCookie(cookies); |
+ EXPECT_TRUE(found_cookie == should_find_cookie); |
+ |
+ notification_promo_->CheckForNewNotification(found_cookie); |
+ EXPECT_TRUE(received_notification_ == should_receive_notification); |
+ |
+ // Test the fields. |
+ TestNotification(); |
+ TestPrefs(); |
+ } |
+ |
void TestNotification() { |
// Check values. |
EXPECT_EQ(notification_promo_->start_, start_); |
@@ -283,6 +331,8 @@ |
EXPECT_EQ(notification_promo_->platform_, platform_); |
EXPECT_EQ(notification_promo_->text_, text_); |
EXPECT_EQ(notification_promo_->closed_, closed_); |
+ EXPECT_EQ(notification_promo_->gplus_, gplus_); |
+ EXPECT_EQ(notification_promo_->feature_mask_, feature_mask_); |
// Check group within bounds. |
EXPECT_GE(notification_promo_->group_, 0); |
@@ -310,14 +360,17 @@ |
EXPECT_EQ(prefs_->GetInteger(prefs::kNTPPromoViews), 0); |
EXPECT_EQ(prefs_->GetString(prefs::kNTPPromoLine), text_); |
EXPECT_EQ(prefs_->GetBoolean(prefs::kNTPPromoClosed), closed_); |
+ EXPECT_EQ(prefs_->GetBoolean(prefs::kNTPPromoIsLoggedInToPlus), gplus_); |
+ EXPECT_EQ(prefs_->GetInteger(prefs::kNTPPromoFeatureMask), feature_mask_); |
} |
// Create a new NotificationPromo from prefs and compare to current |
// notification. |
void TestInitFromPrefs() { |
- NotificationPromo prefs_notification_promo(prefs_, this); |
- prefs_notification_promo.InitFromPrefs(); |
- const bool is_equal = *notification_promo_ == prefs_notification_promo; |
+ scoped_refptr<NotificationPromo> prefs_notification_promo = |
+ NotificationPromo::Factory(profile_, this); |
+ prefs_notification_promo->InitFromPrefs(); |
+ const bool is_equal = *notification_promo_ == *prefs_notification_promo; |
EXPECT_TRUE(is_equal); |
} |
@@ -515,10 +568,33 @@ |
EXPECT_TRUE(notification_promo_->CanShow()); |
} |
+ void TestFeatureMask() { |
+ // If no feature mask, gplus_ value is ignored. |
+ notification_promo_->gplus_ = false; |
+ notification_promo_->feature_mask_ = 0; |
+ EXPECT_TRUE(notification_promo_->CanShow()); |
+ |
+ notification_promo_->gplus_ = true; |
+ notification_promo_->feature_mask_ = 0; |
+ EXPECT_TRUE(notification_promo_->CanShow()); |
+ |
+ // No gplus cookie, feature mask in use. |
+ notification_promo_->gplus_ = false; |
+ notification_promo_->feature_mask_ = 1; |
achuithb
2011/11/27 07:48:26
Please use the value NotificationPromo::FEATURE_GP
Cait (Slow)
2011/11/28 19:06:25
Done.
|
+ EXPECT_FALSE(notification_promo_->CanShow()); |
achuithb
2011/11/27 07:48:26
I would EXPECT_TRUE here, based on the inversion o
Cait (Slow)
2011/11/28 19:06:25
We want to show the promo if the user is already l
|
+ |
+ // Gplus cookie, feature mask in use. |
+ notification_promo_->gplus_ = true; |
+ notification_promo_->feature_mask_ = 1; |
+ EXPECT_TRUE(notification_promo_->CanShow()); |
+ } |
+ |
private: |
+ Profile* profile_; |
PrefService* prefs_; |
NotificationPromo* notification_promo_; |
bool received_notification_; |
+ bool should_receive_notification_; |
bool build_targeted_; |
scoped_ptr<DictionaryValue> test_json_; |
@@ -530,10 +606,12 @@ |
int max_group_; |
int max_views_; |
int platform_; |
+ int feature_mask_; |
std::string text_; |
bool closed_; |
+ bool gplus_; |
int current_platform_; |
}; |
@@ -542,21 +620,22 @@ |
PrefService* prefs = profile_.GetPrefs(); |
ASSERT_TRUE(prefs != NULL); |
- NotificationPromoTestDelegate delegate(prefs); |
- NotificationPromo notification_promo(prefs, &delegate); |
+ NotificationPromoTestDelegate delegate(&profile_); |
+ scoped_refptr<NotificationPromo> notification_promo = |
+ NotificationPromo::Factory(&profile_, &delegate); |
// Make sure prefs are unset. |
delegate.TestPrefs(); |
// Set up start and end dates and promo line in a Dictionary as if parsed |
// from the service. |
- delegate.Init(¬ification_promo, |
+ delegate.Init(notification_promo, |
"{ " |
" \"topic\": {" |
" \"answers\": [" |
" {" |
" \"name\": \"promo_start\"," |
- " \"question\": \"3:2:5:10:15\"," |
+ " \"question\": \"3:2:5:10:15:0\"," |
" \"tooltip\": \"Eat more pie!\"," |
" \"inproduct\": \"31/01/10 01:00 GMT\"" |
" }," |
@@ -569,8 +648,8 @@ |
"}", |
1264899600, // unix epoch for Jan 31 2010 0100 GMT. |
1327971600, // unix epoch for Jan 31 2012 0100 GMT. |
- 3, 2, 5, 10, 15, |
- "Eat more pie!", false); |
+ 3, 2, 5, 10, 15, 0, |
+ "Eat more pie!", false, false); |
delegate.InitPromoFromJson(true); |
@@ -587,6 +666,7 @@ |
delegate.TestClosed(); |
delegate.TestText(); |
delegate.TestTime(); |
+ delegate.TestFeatureMask(); |
delegate.TestPlatforms(); |
} |
@@ -595,18 +675,19 @@ |
PrefService* prefs = profile_.GetPrefs(); |
ASSERT_TRUE(prefs != NULL); |
- NotificationPromoTestDelegate delegate(prefs); |
- NotificationPromo notification_promo(prefs, &delegate); |
+ NotificationPromoTestDelegate delegate(&profile_); |
+ scoped_refptr<NotificationPromo> notification_promo = |
+ NotificationPromo::Factory(&profile_, &delegate); |
// Set up start and end dates and promo line in a Dictionary as if parsed |
// from the service. |
- delegate.Init(¬ification_promo, |
+ delegate.Init(notification_promo, |
"{ " |
" \"topic\": {" |
" \"answers\": [" |
" {" |
" \"name\": \"promo_start\"," |
- " \"question\": \"12:8:10:20:15\"," |
+ " \"question\": \"12:8:10:20:15:0\"," |
" \"tooltip\": \"Happy 3rd Birthday!\"," |
" \"inproduct\": \"09/15/10 05:00 PDT\"" |
" }," |
@@ -619,8 +700,8 @@ |
"}", |
1284552000, // unix epoch for Sep 15 2010 0500 PDT. |
1285848000, // unix epoch for Sep 30 2010 0500 PDT. |
- 12, 8, 10, 20, 15, |
- "Happy 3rd Birthday!", false); |
+ 12, 8, 10, 20, 15, 0, |
+ "Happy 3rd Birthday!", false, false); |
delegate.InitPromoFromJson(true); |
@@ -630,12 +711,111 @@ |
delegate.TestInitFromPrefs(); |
// Should fail because out of time bounds. |
- EXPECT_FALSE(notification_promo.CanShow()); |
+ EXPECT_FALSE(notification_promo->CanShow()); |
} |
+TEST_F(PromoResourceServiceTest, NotificationPromoCookieTest) { |
achuithb
2011/11/27 07:48:26
Please delete this test - it has a lot of copy/pas
|
+ // Check that prefs are set correctly. |
+ PrefService* prefs = profile_.GetPrefs(); |
+ ASSERT_TRUE(prefs != NULL); |
+ |
+ NotificationPromoTestDelegate delegate(&profile_); |
+ scoped_refptr<NotificationPromo> notification_promo = |
+ NotificationPromo::Factory(&profile_, &delegate); |
+ |
+ // Make sure prefs are unset. |
+ delegate.TestPrefs(); |
+ |
+ // Set up start and end dates and promo line in a Dictionary as if parsed |
+ // from the service. |
+ delegate.Init(notification_promo, |
+ "{ " |
+ " \"topic\": {" |
+ " \"answers\": [" |
+ " {" |
+ " \"name\": \"promo_start\"," |
+ " \"question\": \"3:2:5:10:15:1\"," |
+ " \"tooltip\": \"Eat more pie!\"," |
+ " \"inproduct\": \"31/01/10 01:00 GMT\"" |
+ " }," |
+ " {" |
+ " \"name\": \"promo_end\"," |
+ " \"inproduct\": \"31/01/12 01:00 GMT\"" |
+ " }" |
+ " ]" |
+ " }" |
+ "}", |
+ 1264899600, // unix epoch for Jan 31 2010 0100 GMT. |
+ 1327971600, // unix epoch for Jan 31 2012 0100 GMT. |
+ 3, 2, 5, 10, 15, 1, |
+ "Eat more pie!", false, true); |
+ |
+ delegate.ParseAndCallCookies(delegate.TestJson(), "SID=123456;", true, true); |
+ delegate.ParseAndCallCookies(delegate.TestJson(), "SID=123456;", false, true); |
+ |
+ delegate.TestInitFromPrefs(); |
+ |
+ // Test various conditions of CanShow. |
+ // TestGroup Has the side effect of setting us to a passing group. |
+ delegate.TestGroup(); |
+ delegate.TestViews(); |
+ delegate.TestBuild(); |
+ delegate.TestClosed(); |
+ delegate.TestText(); |
+ delegate.TestTime(); |
+ delegate.TestFeatureMask(); |
+ delegate.TestPlatforms(); |
+} |
achuithb
2011/11/27 07:48:26
Delete this test too. It's a bit difficult to main
|
+TEST_F(PromoResourceServiceTest, NotificationPromoCookieTestFail) { |
+ // Check that prefs are set correctly. |
+ PrefService* prefs = profile_.GetPrefs(); |
+ ASSERT_TRUE(prefs != NULL); |
+ |
+ NotificationPromoTestDelegate delegate(&profile_); |
+ scoped_refptr<NotificationPromo> notification_promo = |
+ NotificationPromo::Factory(&profile_, &delegate); |
+ |
+ // Make sure prefs are unset. |
+ delegate.TestPrefs(); |
+ |
+ // Set up start and end dates and promo line in a Dictionary as if parsed |
+ // from the service. |
+ delegate.Init(notification_promo, |
+ "{ " |
+ " \"topic\": {" |
+ " \"answers\": [" |
+ " {" |
+ " \"name\": \"promo_start\"," |
+ " \"question\": \"3:2:5:10:15:1\"," |
+ " \"tooltip\": \"Eat more pie!\"," |
+ " \"inproduct\": \"31/01/10 01:00 GMT\"" |
+ " }," |
+ " {" |
+ " \"name\": \"promo_end\"," |
+ " \"inproduct\": \"31/01/12 01:00 GMT\"" |
+ " }" |
+ " ]" |
+ " }" |
+ "}", |
+ 1264899600, // unix epoch for Jan 31 2010 0100 GMT. |
+ 1327971600, // unix epoch for Jan 31 2012 0100 GMT. |
+ 3, 2, 5, 10, 15, 1, |
+ "Eat more pie!", false, false); |
+ |
+ delegate.ParseAndCallCookies(delegate.TestJson(), "WRONG=123456;", |
+ true, false); |
+ // Should not trigger notification on second call. |
+ delegate.ParseAndCallCookies(delegate.TestJson(), "WRONG=123456;", |
+ false, false); |
+ |
+ delegate.TestInitFromPrefs(); |
+ |
+ // Should fail because cookie is required but was not set. |
+ EXPECT_FALSE(notification_promo->CanShow()); |
+} |
TEST_F(PromoResourceServiceTest, GetNextQuestionValueTest) { |
- const std::string question("0:-100:2048:0:2a"); |
- const int question_vec[] = { 0, -100, 2048, 0 }; |
+ const std::string question("0:-100:2048:0:0:0:2a"); |
+ const int question_vec[] = { 0, -100, 2048, 0, 0, 0}; |
size_t index = 0; |
bool err = false; |