File: stats_unittest.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (77 lines) | stat: -rw-r--r-- 3,168 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright 2019 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/notifications/scheduler/internal/stats.h"

#include "base/test/metrics/histogram_tester.h"
#include "chrome/browser/notifications/scheduler/public/notification_data.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace notifications {
namespace stats {
namespace {

void TestLogUserAction(const UserActionData& user_action_data,
                       ActionButtonEvent action_button_event) {
  base::HistogramTester histograms;
  LogUserAction(user_action_data);
}

void TestNotificationShow(const NotificationData& notification_data,
                          SchedulerClientType client_type,
                          bool expect_ihnr_histogram,
                          bool expect_life_cycle_histogram) {
  base::HistogramTester histograms;
  LogNotificationShow(notification_data, client_type);
  if (expect_life_cycle_histogram) {
    histograms.ExpectBucketCount(
        "Notifications.Scheduler.NotificationLifeCycleEvent",
        NotificationLifeCycleEvent::kShown, 1);
    histograms.ExpectBucketCount(
        "Notifications.Scheduler.NotificationLifeCycleEvent.__Test__",
        NotificationLifeCycleEvent::kShown, 1);
  } else {
    histograms.ExpectTotalCount(
        "Notifications.Scheduler.NotificationLifeCycleEvent", 0);
    histograms.ExpectTotalCount(
        "Notifications.Scheduler.NotificationLifeCycleEvent.__Test__", 0);
  }
}

// Verifies that ihnr buttons clicks are logged.
TEST(NotificationSchedulerStatsTest, LogUserActionIhnrButton) {
  UserActionData user_action_data(SchedulerClientType::kTest1,
                                  UserActionType::kButtonClick, "guid");
  user_action_data.button_click_info = ButtonClickInfo();
  user_action_data.button_click_info->type = ActionButtonType::kHelpful;
  TestLogUserAction(user_action_data, ActionButtonEvent::kHelpfulClick);

  user_action_data.button_click_info->type = ActionButtonType::kUnhelpful;
  TestLogUserAction(user_action_data, ActionButtonEvent::kUnhelpfulClick);
}

// Verifies notification show event is logged when there are ihnr buttons.
TEST(NotificationSchedulerStatsTest, LogNotificationShow) {
  NotificationData notification_data;
  notification_data.buttons.emplace_back(NotificationData::Button());

  // Notification without ihnr buttons.
  TestNotificationShow(notification_data, SchedulerClientType::kTest1,
                       false /*expect_ihnr_histogram*/,
                       true /*expect_life_cycle_histogram*/);

  std::vector<ActionButtonType> types{ActionButtonType::kHelpful,
                                      ActionButtonType::kUnhelpful};
  for (auto action_button_type : types) {
    notification_data.buttons.front().type = action_button_type;
    // Notification with ihnr buttons.
    TestNotificationShow(notification_data, SchedulerClientType::kTest1,
                         true /*expect_ihnr_histogram*/,
                         true /*expect_life_cycle_histogram*/);
  }
}

}  // namespace
}  // namespace stats
}  // namespace notifications