OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | |
raymes
2017/05/24 00:59:51
nit: I don't think we use (c) anymore https://chro
awdf
2017/06/01 15:11:22
Done.
| |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/notifications/notification_channels_provider_android.h" | |
6 | |
7 #include "base/memory/ptr_util.h" | |
8 #include "base/values.h" | |
9 #include "components/content_settings/core/browser/content_settings_pref.h" | |
10 #include "components/content_settings/core/common/content_settings_pattern.h" | |
11 #include "testing/gmock/include/gmock/gmock.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 #include "url/gurl.h" | |
14 | |
15 using ::testing::Return; | |
16 | |
17 class NotificationChannelsProviderAndroidTest : public testing::Test { | |
18 public: | |
19 NotificationChannelsProviderAndroidTest() {} | |
Peter Beverloo
2017/05/24 10:57:43
TEST_F(X, Y) means that you're creating a test wit
awdf
2017/06/01 15:11:22
Done.
| |
20 }; | |
21 | |
22 class MockNotificationChannelsBridge | |
23 : public NotificationChannelsProviderAndroid::NotificationChannelsBridge { | |
24 public: | |
Peter Beverloo
2017/05/24 10:57:43
nit: define dtor
awdf
2017/06/01 15:11:22
Done. Do I also need to define a ctor?
Peter Beverloo
2017/06/01 15:26:11
No, that's fine. It's just virtual destructors tha
| |
25 MOCK_METHOD0(ShouldUseChannelSettings, bool()); | |
26 MOCK_METHOD2(CreateChannel, void(const std::string&, bool)); | |
27 MOCK_METHOD1(GetChannelStatus, NotificationChannelStatus(const std::string&)); | |
28 MOCK_METHOD1(DeleteChannel, void(const std::string&)); | |
29 }; | |
30 | |
31 TEST_F( | |
32 NotificationChannelsProviderAndroidTest, | |
33 SetWebsiteSettingAllowedWhenChannelUnavailable_CreatesEnabledChannelAndRetur nsTrue) { | |
Peter Beverloo
2017/05/24 10:57:42
Such descriptive names are super rare in Chromium
awdf
2017/06/01 15:11:22
I'd argue that 'CreatesEnabledChannelWhenUnavailab
Peter Beverloo
2017/06/01 15:26:11
Okay!
| |
34 auto* mock_bridge = new MockNotificationChannelsBridge(); | |
35 EXPECT_CALL(*mock_bridge, ShouldUseChannelSettings()).WillOnce(Return(true)); | |
36 | |
37 NotificationChannelsProviderAndroid channels_provider( | |
38 base::WrapUnique(mock_bridge)); | |
39 | |
40 EXPECT_CALL(*mock_bridge, GetChannelStatus("https://example.com/")) | |
Peter Beverloo
2017/05/24 10:57:43
nit: consider using a constant for the origin.
awdf
2017/06/01 15:11:22
Done.
awdf
2017/06/01 15:11:22
Done.
| |
41 .WillOnce(Return(NotificationChannelStatus::UNAVAILABLE)); | |
42 EXPECT_CALL(*mock_bridge, | |
43 CreateChannel("https://example.com/", true /* enabled */)); | |
44 | |
45 bool result = channels_provider.SetWebsiteSetting( | |
46 ContentSettingsPattern::FromString("https://example.com"), | |
47 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
48 std::string(), new base::Value(CONTENT_SETTING_ALLOW)); | |
49 | |
50 EXPECT_EQ(true, result); | |
raymes
2017/05/24 00:59:51
nit (here and below): EXPECT_TRUE(result)
awdf
2017/06/01 15:11:22
Done.
| |
51 | |
52 channels_provider.ShutdownOnUIThread(); | |
53 } | |
54 | |
55 TEST_F( | |
56 NotificationChannelsProviderAndroidTest, | |
57 SetWebsiteSettingBlockedWhenChannelUnavailable_CreatesDisabledChannelAndRetu rnsTrue) { | |
58 auto* mock_bridge = new MockNotificationChannelsBridge(); | |
59 EXPECT_CALL(*mock_bridge, ShouldUseChannelSettings()).WillOnce(Return(true)); | |
60 | |
61 NotificationChannelsProviderAndroid channels_provider( | |
62 base::WrapUnique(mock_bridge)); | |
63 | |
64 EXPECT_CALL(*mock_bridge, GetChannelStatus("https://example.com/")) | |
65 .WillOnce(Return(NotificationChannelStatus::UNAVAILABLE)); | |
66 EXPECT_CALL(*mock_bridge, | |
67 CreateChannel("https://example.com/", false /* enabled */)); | |
68 | |
69 bool result = channels_provider.SetWebsiteSetting( | |
70 ContentSettingsPattern::FromString("https://example.com"), | |
71 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
72 std::string(), new base::Value(CONTENT_SETTING_BLOCK)); | |
73 | |
74 EXPECT_EQ(true, result); | |
75 | |
76 channels_provider.ShutdownOnUIThread(); | |
77 } | |
78 | |
79 TEST_F(NotificationChannelsProviderAndroidTest, | |
80 SetWebsiteSettingAllowedWhenChannelAllowed_NoopAndReturnsTrue) { | |
81 auto* mock_bridge = new MockNotificationChannelsBridge(); | |
82 EXPECT_CALL(*mock_bridge, ShouldUseChannelSettings()).WillOnce(Return(true)); | |
83 | |
84 NotificationChannelsProviderAndroid channels_provider( | |
85 base::WrapUnique(mock_bridge)); | |
86 | |
87 EXPECT_CALL(*mock_bridge, GetChannelStatus("https://example.com/")) | |
88 .WillOnce(Return(NotificationChannelStatus::ENABLED)); | |
89 | |
90 bool result = channels_provider.SetWebsiteSetting( | |
91 ContentSettingsPattern::FromString("https://example.com"), | |
92 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
93 std::string(), new base::Value(CONTENT_SETTING_ALLOW)); | |
94 | |
95 EXPECT_EQ(true, result); | |
96 | |
97 channels_provider.ShutdownOnUIThread(); | |
98 } | |
99 | |
100 TEST_F(NotificationChannelsProviderAndroidTest, | |
101 SetWebsiteSettingBlockedWhenChannelBlocked_NoopAndReturnsTrue) { | |
102 auto* mock_bridge = new MockNotificationChannelsBridge(); | |
103 EXPECT_CALL(*mock_bridge, ShouldUseChannelSettings()).WillOnce(Return(true)); | |
104 | |
105 NotificationChannelsProviderAndroid channels_provider( | |
106 base::WrapUnique(mock_bridge)); | |
107 | |
108 EXPECT_CALL(*mock_bridge, GetChannelStatus("https://example.com/")) | |
109 .WillOnce(Return(NotificationChannelStatus::BLOCKED)); | |
110 | |
111 bool result = channels_provider.SetWebsiteSetting( | |
112 ContentSettingsPattern::FromString("https://example.com"), | |
113 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
114 std::string(), new base::Value(CONTENT_SETTING_BLOCK)); | |
115 | |
116 EXPECT_EQ(true, result); | |
117 | |
118 channels_provider.ShutdownOnUIThread(); | |
119 } | |
120 | |
121 TEST_F(NotificationChannelsProviderAndroidTest, | |
122 SetWebsiteSettingDefault_DeletesChannelAndReturnsTrue) { | |
123 auto* mock_bridge = new MockNotificationChannelsBridge(); | |
124 EXPECT_CALL(*mock_bridge, ShouldUseChannelSettings()).WillOnce(Return(true)); | |
125 | |
126 NotificationChannelsProviderAndroid channels_provider( | |
127 base::WrapUnique(mock_bridge)); | |
128 | |
129 EXPECT_CALL(*mock_bridge, DeleteChannel("https://example.com/")); | |
130 bool result = channels_provider.SetWebsiteSetting( | |
131 ContentSettingsPattern::FromString("https://example.com"), | |
132 ContentSettingsPattern(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
133 std::string(), nullptr); | |
134 | |
135 EXPECT_EQ(true, result); | |
136 | |
137 channels_provider.ShutdownOnUIThread(); | |
138 } | |
raymes
2017/05/24 00:59:51
nit: could we have a test which checks that the pr
awdf
2017/06/01 15:11:22
Done.
| |
OLD | NEW |