From cf5bb81cf535c42fbccd843b44deba246c501620 Mon Sep 17 00:00:00 2001 From: Arif Burak Demiray Date: Fri, 14 Nov 2025 14:49:58 +0300 Subject: [PATCH 1/2] feat: session triggers user props saving test --- .../sessionCallsTriggersSave_A_test.dart | 64 ++++++++++++++++++ .../sessionCallsTriggersSave_M_test.dart | 65 +++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 example/integration_test/user_property_save_tests/sessionCallsTriggersSave_A_test.dart create mode 100644 example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart diff --git a/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_A_test.dart b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_A_test.dart new file mode 100644 index 00000000..f8715ef2 --- /dev/null +++ b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_A_test.dart @@ -0,0 +1,64 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:countly_flutter/countly_flutter.dart'; +import 'package:flutter_foreground_task/flutter_foreground_task.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import '../utils.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + testWidgets('test_eventSaveScenario_sessionCallsTriggersSave_A', (WidgetTester tester) async { + // Initialize the SDK + CountlyConfig config = CountlyConfig(SERVER_URL, APP_KEY).setLoggingEnabled(true).setUserProperties({'beforeBeginSession': true}).setUpdateSessionTimerDelay(3); + await Countly.initWithConfig(config); // generates 0.begin_session + await Future.delayed(Duration(seconds: 1)); + + await Countly.instance.userProfile.setProperty('beforeUpdateSession', true); + await Future.delayed(Duration(seconds: 2)); + + await Countly.instance.userProfile.setProperty('beforeEndSession', true); + FlutterForegroundTask.minimizeApp(); // go to background + await Future.delayed(Duration(seconds: 2)); // wait for session to end + + // Get request queue from native side + List>> requestList = (await getRequestQueue()).map((e) => Uri.parse("?" + e).queryParametersAll).toList(); + + // Currently + // 0- user properties: beforeBeginSession + // 1- begin_session + // 2- user properties: beforeUpdateSession + // 3- session_duration + // 4- user properties: beforeEndSession + // 5- end_session + expect(requestList.length, Platform.isAndroid ? 7 : 6); + + testCommonRequestParams(requestList[0]); + expect(requestList[0]['user_details']?[0], '{"custom":{"beforeBeginSession":true}}'); + + testCommonRequestParams(requestList[1]); // tests + checkBeginSession(requestList[1]); + + int i = 2; + if (Platform.isAndroid) { + expect(requestList[i]['events']?[0].contains('[CLY]_orientation'), true); + i++; + } + + testCommonRequestParams(requestList[i]); + expect(requestList[i]['user_details']?[0], '{"custom":{"beforeUpdateSession":${Platform.isAndroid ? '"true"' : 'true'}}}'); + i++; + + testCommonRequestParams(requestList[i]); + expect(requestList[i]['session_duration']?[0], '3'); + i++; + + testCommonRequestParams(requestList[i]); + expect(requestList[i]['user_details']?[0], '{"custom":{"beforeEndSession":${Platform.isAndroid ? '"true"' : 'true'}}}'); + i++; + + testCommonRequestParams(requestList[i]); + checkEndSession(requestList[i]); + }); +} diff --git a/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart new file mode 100644 index 00000000..47ca98b5 --- /dev/null +++ b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart @@ -0,0 +1,65 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:countly_flutter/countly_flutter.dart'; +import 'package:flutter_foreground_task/flutter_foreground_task.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import '../utils.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + testWidgets('test_eventSaveScenario_sessionCallsTriggersSave_M', (WidgetTester tester) async { + // Initialize the SDK + CountlyConfig config = CountlyConfig(SERVER_URL, APP_KEY).enableManualSessionHandling().setLoggingEnabled(true); + await Countly.initWithConfig(config); // generates 0.begin_session + await Future.delayed(Duration(seconds: 1)); + + await Countly.instance.userProfile.setProperty('beforeBeginSession', true); + await Countly.instance.sessions.beginSession(); + + await Countly.instance.userProfile.setProperty('beforeUpdateSession', true); + await Future.delayed(Duration(seconds: 2)); + await Countly.instance.sessions.updateSession(); + + await Countly.instance.userProfile.setProperty('beforeEndSession', true); + await Future.delayed(Duration(seconds: 2)); // wait for session to end + await Countly.instance.sessions.endSession(); + + // Get request queue from native side + List>> requestList = (await getRequestQueue()).map((e) => Uri.parse("?" + e).queryParametersAll).toList(); + for (var req in requestList) { + print(req); + } + + // Currently + // 0- user properties: beforeBeginSession + // 1- begin_session + // 2- orientation + // 3- user properties: beforeUpdateSession + // 4- session_duration + // 5- user properties: beforeEndSession + // 6- end_session + expect(requestList.length, 7); + + testCommonRequestParams(requestList[0]); + expect(requestList[0]['user_details']?[0], '{"custom":{"beforeBeginSession":${Platform.isAndroid ? '"true"' : 'true'}}}'); + + testCommonRequestParams(requestList[1]); // tests + checkBeginSession(requestList[1]); + + expect(requestList[2]['events']?[0].contains('[CLY]_orientation'), true); + + testCommonRequestParams(requestList[3]); + expect(requestList[3]['user_details']?[0], '{"custom":{"beforeUpdateSession":${Platform.isAndroid ? '"true"' : 'true'}}}'); + + testCommonRequestParams(requestList[4]); + expect(requestList[4]['session_duration']?[0], '2'); + + testCommonRequestParams(requestList[5]); + expect(requestList[5]['user_details']?[0], '{"custom":{"beforeEndSession":${Platform.isAndroid ? '"true"' : 'true'}}}'); + + testCommonRequestParams(requestList[6]); + checkEndSession(requestList[6]); + }); +} From 7d239f9f5e9b4f3062798076c449ca8e858b5bcb Mon Sep 17 00:00:00 2001 From: Arif Burak Demiray Date: Fri, 14 Nov 2025 15:56:19 +0300 Subject: [PATCH 2/2] fix: remove print --- .../sessionCallsTriggersSave_M_test.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart index 47ca98b5..3ead89dd 100644 --- a/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart +++ b/example/integration_test/user_property_save_tests/sessionCallsTriggersSave_M_test.dart @@ -28,9 +28,6 @@ void main() { // Get request queue from native side List>> requestList = (await getRequestQueue()).map((e) => Uri.parse("?" + e).queryParametersAll).toList(); - for (var req in requestList) { - print(req); - } // Currently // 0- user properties: beforeBeginSession