UnityGame/Library/PackageCache/com.unity.multiplayer.center/Tests/Editor/RecommendationAnalyticsTests.cs
2024-10-27 10:53:47 +03:00

126 lines
4.6 KiB
C#

using NUnit.Framework;
using Unity.Multiplayer.Center.Analytics;
using Unity.Multiplayer.Center.Common;
using Unity.Multiplayer.Center.Common.Analytics;
using Unity.Multiplayer.Center.Window;
using UnityEngine;
using UnityEngine.UIElements;
namespace Unity.MultiplayerCenterTests
{
[TestFixture]
internal class RecommendationAnalyticsTests
{
[OneTimeSetUp]
public void OneTimeSetup()
{
// Copy user choices to temp file to restore after tests.
UtilsForMultiplayerCenterTests.CopyUserChoicesToTempFile();
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
// restore user choices after tests.
UtilsForMultiplayerCenterTests.RestoreUserChoicesFromTempFile();
}
[SetUp]
public void SetUp()
{
UtilsForMultiplayerCenterTests.CloseMultiplayerCenterWindow();
}
[TearDown]
public void TearDown()
{
UtilsForMultiplayerCenterTests.CloseMultiplayerCenterWindow();
}
class MockThatCountsEvents : IMultiplayerCenterAnalytics
{
public int InstallationEventCount { get; private set; }
public int RecommendationEventCount { get; private set; }
public void SendInstallationEvent(AnswerData data, Preset preset, Package[] packages)
=> InstallationEventCount++;
public void SendRecommendationEvent(AnswerData data, Preset preset)
=> RecommendationEventCount++;
public void SendGettingStartedInteractionEvent(string targetPackageId, string sectionId,
InteractionDataType type, string displayName) { }
}
[Test]
public void RecommendationTabView_PresetSelectedViaUI_RecommendationEventSent()
{
UtilsForMultiplayerCenterTests.PopulateUserAnswersForPresetAndPlayerCount(Preset.Async, 4);
var view = CreateViewWithMockedAnalytics(out var mock);
Assert.NotNull(view.QuestionnaireView);
Assert.AreEqual(0, mock.RecommendationEventCount);
view.QuestionnaireView.RaisePresetSelected(Preset.Shooter);
Assert.AreEqual(1, mock.RecommendationEventCount);
}
[Test]
public void RecommendationTabView_NonePresetSelected_RecommendationEventNotSent()
{
UtilsForMultiplayerCenterTests.PopulateUserAnswersForPresetAndPlayerCount(Preset.Async, 4);
var view = CreateViewWithMockedAnalytics(out var mock);
Assert.NotNull(view.QuestionnaireView);
Assert.AreEqual(0, mock.RecommendationEventCount);
view.QuestionnaireView.RaisePresetSelected(Preset.None);
Assert.AreEqual(0, mock.RecommendationEventCount); // no recommendation => no event
}
[Test]
public void RecommendationTabView_PlayerCountChangedViaUI_RecommendationEventSent()
{
UtilsForMultiplayerCenterTests.PopulateUserAnswersForPresetAndPlayerCount(Preset.Adventure, 8);
var view = CreateViewWithMockedAnalytics(out var mock);
Assert.NotNull(view.QuestionnaireView);
Assert.AreEqual(0, mock.RecommendationEventCount);
view.QuestionnaireView.QuestionUpdated(UtilsForMultiplayerCenterTests.CreatePlayerCountAnswer(2));
Assert.AreEqual(1, mock.RecommendationEventCount);
}
[Test]
public void RecommendationTabView_NonMandatoryAnswerChangedViaUI_RecommendationEventSent()
{
UtilsForMultiplayerCenterTests.PopulateUserAnswersForPresetAndPlayerCount(Preset.Adventure, 8);
var view = CreateViewWithMockedAnalytics(out var mock);
Assert.NotNull(view.QuestionnaireView);
Assert.AreEqual(0, mock.RecommendationEventCount);
view.QuestionnaireView.QuestionUpdated(UtilsForMultiplayerCenterTests.GetAnsweredQuestionThatIsNotInAdventurePreset());
Assert.AreEqual(1, mock.RecommendationEventCount);
}
static RecommendationTabView CreateViewWithMockedAnalytics(out MockThatCountsEvents mock)
{
mock = new MockThatCountsEvents();
var view = new RecommendationTabView();
view.RootVisualElement = new VisualElement();
view.MultiplayerCenterAnalytics = mock;
view.Refresh();
return view;
}
}
}