Skip to content

Commit

Permalink
Merge pull request #546 from ilya-deriv/Account_sign_up
Browse files Browse the repository at this point in the history
fix(deriv_rudderstack): [DERG-1502 ]Account sign up
  • Loading branch information
aliakbar-deriv authored May 7, 2024
2 parents 3c8cabd + 91ef68b commit bbb270f
Show file tree
Hide file tree
Showing 3 changed files with 206 additions and 13 deletions.
186 changes: 186 additions & 0 deletions packages/analytics/lib/sdk/rudderstack/events/rudderstack_events.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
import 'package:analytics/sdk/rudderstack/core/rudderstack_configuration.dart';
import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart';
import 'package:rudder_sdk_flutter_platform_interface/platform.dart';

/// Class which hold events which should be monitored.
class DerivRudderstackEvents {
/// Constructor for [DerivRudderstackEvents].
const DerivRudderstackEvents();

///Set ups Rudderstack connection.
void setup({required String dataPlaneUrl, required String writeKey}) {
DerivRudderstack().setup(
RudderstackConfiguration(dataPlaneUrl: dataPlaneUrl, writeKey: writeKey),
);
}

/// Captures app_open event when the app is opened.
void logAppOpened() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'open',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Captures user tap on Log in button on sign up screen.
void logUserTappedLoginButton() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'go_to_login',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Captures user tap on Get free account button on sign up screen.
void logAppGetFreeAccount(String slideName) {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'get_free_account',
'form_source': 'mobile_derivgo',
'getstarted_slide_name':
'${slideName.substring(slideName.indexOf('.') + 1, slideName.length)}',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user turns on or off Refferal toggle switcher.
void logReferralToggleSwitched() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'tab_referral_toggle',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user gets Invalid referral code pop up with Try again button.
void logTryAgainReferralCode() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'try_again_referral_code',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when Email confirmation is sent to a user.
void logEmailConfirmationSent() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'email_confirmation_sent',
'signup_provider': 'email',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user land on Successfull email verification screen.
void logEmailConfirmed() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'email_confirmed',
'signup_provider': 'email',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user taps Continue button on Successfull email verification screen.
void logSignupContinued() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'signup_continued',
'signup_provider': 'email',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user lands on Country selection screen.
void logCountrySelectionPageOpened() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'country_selection_screen_opened',
'signup_provider': 'email',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user lands on Create password page while creating demo account.
void logSetPasswordPageOpened() {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'password_screen_opened',
'signup_provider': 'email',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user's sign up is finished.
void logSignUpDone(String signupProvider) {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'signup_done',
'signup_provider': '$signupProvider',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks when user taps 'Create free demo account' or social log in button.
void logSignUpPageAction(String signupProvider,
[bool? isToggleOn, String? referralCode]) {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'started',
'signup_provider': '$signupProvider',
'referral_toggle_mode': '${isToggleOn ?? false} ',
'referral_code': '$referralCode',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}

/// Tracks any error is happening and shown to the user (validation, API communication, social providers errors).
void logSignUpFlowError(String? errorText, [String? signupProvider]) {
DerivRudderstack().track(
eventName: 'ce_virtual_signup_form',
properties: RudderProperty.fromMap(<String, dynamic>{
'action': 'signup_flow_error',
'signup_provider': '$signupProvider',
'error_message': '$errorText',
'form_source': 'mobile_derivgo',
'form_name': 'virtual_signup_derivgo'
}),
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ class DerivRudderstack implements BaseAnalytics<RudderstackConfiguration> {
Future<bool> identify({required String userId}) async =>
_execute(() => rudderClient.identify(userId));

/// Tracks an event with the given [eventName].
Future<bool> track({required String eventName}) async =>
_execute(() => rudderClient.track(eventName));
/// Tracks an event with the given [eventName] and [properties].
Future<bool> track({
required String eventName,
RudderProperty? properties, // Change the parameter type to RudderProperty
}) async =>
_execute(() => rudderClient.track(eventName, properties: properties));

/// Logs a screen view with the given [screenName].
Future<bool> screen({required String screenName}) async =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:rudder_sdk_flutter/RudderController.dart';
import 'package:rudder_sdk_flutter_platform_interface/platform.dart';

class MockRudderController extends Mock implements RudderController {}

Expand Down Expand Up @@ -34,20 +35,23 @@ void main() {

test('track calls rudderClient.track', () async {
const String eventName = 'test_event_name';
const Map<String, dynamic> properties = {'action': 'open'};

final bool result = await derivRudderstack.track(eventName: eventName);
// Convert properties to RudderProperty
final rudderProperties = RudderProperty.fromMap(properties);

expect(result, isTrue);
verify(() => mockRudderController.track(eventName)).called(1);
});

test('track calls rudderClient.track', () async {
const String eventName = 'test_event_name';

final bool result = await derivRudderstack.track(eventName: eventName);
final bool result = await derivRudderstack.track(
eventName: eventName,
properties: rudderProperties, // Pass RudderProperty directly
);

expect(result, isTrue);
verify(() => mockRudderController.track(eventName)).called(1);
// Verify that the track method is called with the correct parameters
verify(() => mockRudderController.track(
eventName,
properties: rudderProperties, // Pass RudderProperty directly
options: null // Assuming options is not used in this case
)).called(1);
});

test('screen calls rudderClient.screen', () async {
Expand Down

0 comments on commit bbb270f

Please sign in to comment.