public void TestCheckAttributionState()
{
LogConfig.SetupLogging(logDelegate: msg => System.Diagnostics.Debug.WriteLine(msg),
logLevel: null);
//AdjustFactory.setTimerStart(500);
AdjustFactory.SetSessionInterval(new TimeSpan(0,0,0,0,4000));
/***
* // if it's a new session
* if (ActivityState.SubSessionCount <= 1) { return; }
*
* // if there is already an attribution saved and there was no attribution being asked
* if (Attribution != null && !ActivityState.AskingAttribution) { return; }
*
* AttributionHandler.AskAttribution();
*/
// create the config to start the session
AdjustConfig config = new AdjustConfig(appToken: "123456789012", environment: AdjustConfig.EnvironmentSandbox);
config.AttributionChanged = (adjustAttribution) => MockLogger.Test("AttributionChanged: {0}", adjustAttribution);
// start activity handler with config
ActivityHandler activityHandler = GetActivityHandler(config);
DeviceUtil.Sleep(3000);
// test init values
InitTests();
// subsession count is 1
// attribution is null,
// askingAttribution is false by default,
// -> Not called
// test first session start
CheckFirstSession();
// test that get attribution wasn't called
Assert.NotTest("AttributionHandler AskAttribution");
// subsession count increased to 2
// attribution is still null,
// askingAttribution is still false,
// -> Called
// trigger a new sub session
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount:1, subsessionCount: 2,
timerAlreadyStarted: true, askAttributionIsCalled: true);
// subsession count increased to 3
// attribution is still null,
// askingAttribution is set to true,
// -> Called
// set asking attribution
activityHandler.SetAskingAttribution(true);
DeviceUtil.Sleep(1000);
Assert.Debug("Wrote Activity state: ec:0 sc:1 ssc:2");
// trigger a new session
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount: 1, subsessionCount: 3,
timerAlreadyStarted: true, askAttributionIsCalled: true);
// subsession is reset to 1 with new session
// attribution is still null,
// askingAttribution is set to true,
// -> Not called
DeviceUtil.Sleep(3000); // 5 seconds = 2 + 3
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount: 2, subsessionCount: 1,
timerAlreadyStarted: true, askAttributionIsCalled: false);
// subsession count increased to 2
// attribution is set,
// askingAttribution is set to true,
// -> Called
var jsonAttribution = "{ " +
"\"tracker_token\" : \"ttValue\" , " +
"\"tracker_name\" : \"tnValue\" , " +
"\"network\" : \"nValue\" , " +
"\"campaign\" : \"cpValue\" , " +
"\"adgroup\" : \"aValue\" , " +
"\"creative\" : \"ctValue\" , " +
"\"click_label\" : \"clValue\" }";
var attribution = AdjustAttribution.FromJsonString(jsonAttribution);
// update the attribution
Assert.IsTrue(activityHandler.UpdateAttribution(attribution));
DeviceUtil.Sleep(1000);
// attribution was updated
Assert.Debug("Wrote Attribution: tt:ttValue tn:tnValue net:nValue cam:cpValue adg:aValue cre:ctValue cl:clValue");
// trigger a new sub session
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(2, 2, true, true);
// subsession count is reset to 1
// attribution is set,
// askingAttribution is set to true,
// -> Not called
DeviceUtil.Sleep(3000); // 5 seconds = 2 + 3
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount: 3, subsessionCount: 1,
timerAlreadyStarted: true, askAttributionIsCalled: false);
// subsession increased to 2
// attribution is set,
// askingAttribution is set to false
// -> Not called
activityHandler.SetAskingAttribution(false);
DeviceUtil.Sleep(1000);
Assert.Debug("Wrote Activity state: ec:0 sc:3 ssc:1");
// trigger a new sub session
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount: 3, subsessionCount: 2,
timerAlreadyStarted: true, askAttributionIsCalled: false);
// subsession is reset to 1
// attribution is set,
// askingAttribution is set to false
// -> Not called
DeviceUtil.Sleep(3000); // 5 seconds = 2 + 3
activityHandler.TrackSubsessionStart();
DeviceUtil.Sleep(2000);
CheckSubsession(sessionCount: 4, subsessionCount: 1,
timerAlreadyStarted: true, askAttributionIsCalled: false);
}