summaryrefslogtreecommitdiffstats
path: root/toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp')
-rw-r--r--toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp b/toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp
new file mode 100644
index 0000000000..7b0d1e0e7b
--- /dev/null
+++ b/toolkit/components/nimbus/test/gtest/NimbusFeatures_RecordExposure.cpp
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+#include "mozilla/Preferences.h"
+#include "mozilla/browser/NimbusFeatures.h"
+#include "js/Array.h"
+#include "js/PropertyAndElement.h"
+#include "js/TypeDecls.h"
+#include "TelemetryFixture.h"
+#include "TelemetryTestHelpers.h"
+
+using namespace mozilla;
+using namespace TelemetryTestHelpers;
+
+class NimbusTelemetryFixture : public TelemetryTestFixture {};
+
+TEST_F(NimbusTelemetryFixture, NimbusFeaturesTelemetry) {
+ constexpr auto prefName = "nimbus.syncdatastore.foo"_ns;
+ constexpr auto prefValue =
+ R"({"slug":"experiment-slug","branch":{"slug":"branch-slug"}})";
+ AutoJSContextWithGlobal cx(mCleanGlobal);
+ Unused << mTelemetry->ClearEvents();
+
+ ASSERT_EQ(NimbusFeatures::RecordExposureEvent("foo"_ns), NS_ERROR_UNEXPECTED)
+ << "Should fail because not enrolled in experiment";
+ // Set the experiment info for `foo`
+ Preferences::SetCString(prefName.get(), prefValue);
+ ASSERT_EQ(NimbusFeatures::RecordExposureEvent("foo"_ns), NS_OK)
+ << "Should work for the 2nd call";
+ ASSERT_EQ(NimbusFeatures::RecordExposureEvent("foo"_ns, true), NS_ERROR_ABORT)
+ << "Should abort because we've sent exposure and aOnce is true";
+ ASSERT_EQ(NimbusFeatures::RecordExposureEvent("bar"_ns), NS_ERROR_UNEXPECTED)
+ << "Should fail because we don't have an experiment for bar";
+
+ JS::Rooted<JS::Value> eventsSnapshot(cx.GetJSContext());
+ GetEventSnapshot(cx.GetJSContext(), &eventsSnapshot);
+ ASSERT_TRUE(EventPresent(cx.GetJSContext(), eventsSnapshot, "normandy"_ns,
+ "expose"_ns, "nimbus_experiment"_ns));
+}