Skip to content

Commit

Permalink
Issue #SB-31 merge: Merge pull request #1037 from subranil/release-3.1.0
Browse files Browse the repository at this point in the history
Issue #SB-31 feat: added telemetry events for my group clicked and test suites added
  • Loading branch information
swayangjit authored Jul 8, 2020
2 parents 6a98ab8 + 1019183 commit 2931ef6
Show file tree
Hide file tree
Showing 9 changed files with 277 additions and 27 deletions.
1 change: 1 addition & 0 deletions src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,7 @@ export class AppComponent implements OnInit, AfterViewInit {
|| (routeUrl.indexOf(RouterLinks.PERMISSION) !== -1)
|| (routeUrl.indexOf(RouterLinks.LANGUAGE_SETTING) !== -1)
|| (routeUrl.indexOf(RouterLinks.SHARE_USER_AND_GROUPS) !== -1)
|| (routeUrl.indexOf(RouterLinks.MY_GROUPS) !== -1)
) {
this.headerService.sidebarEvent($event);
return;
Expand Down
37 changes: 35 additions & 2 deletions src/app/my-groups/create-edit-group/create-edit-group.page.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@ import { CommonUtilService } from '@app/services/common-util.service';
import { AppHeaderService } from '@app/services/app-header.service';
import { Location } from '@angular/common';
import { of, throwError } from 'rxjs';
import { UtilityService } from '../../../services';
import {
Environment, ID,
ImpressionSubtype,
ImpressionType,
InteractType,
PageId,
TelemetryGeneratorService,
UtilityService
} from '../../../services';

describe('CreateEditGroupPage', () => {
let createEditGroupPage: CreateEditGroupPage;
Expand All @@ -28,6 +36,7 @@ describe('CreateEditGroupPage', () => {
const mockPlatform: Partial<Platform> = {
};
const mockTranslate: Partial<TranslateService> = {};
const mockTelemetryGeneratorService: Partial<TelemetryGeneratorService> = {};

beforeAll(() => {
createEditGroupPage = new CreateEditGroupPage(
Expand All @@ -39,7 +48,8 @@ describe('CreateEditGroupPage', () => {
mockLocation as Location,
mockPlatform as Platform,
mockAlertCtrl as AlertController,
mockUtilityService as UtilityService
mockUtilityService as UtilityService,
mockTelemetryGeneratorService as TelemetryGeneratorService
);
});

Expand Down Expand Up @@ -73,23 +83,46 @@ describe('CreateEditGroupPage', () => {
} as any;
mockAlertCtrl.getTop = jest.fn(() => undefined);
mockLocation.back = jest.fn();
mockTelemetryGeneratorService.generateBackClickedTelemetry = jest.fn();
createEditGroupPage.handleBackButtonEvents();
setTimeout(() => {
expect(mockPlatform.backButton).not.toBeUndefined();
expect(mockTelemetryGeneratorService.generateBackClickedTelemetry).toHaveBeenCalledWith(
PageId.CREATE_GROUP, Environment.GROUP, false
);
done();
}, 0);
});
});

it('should return headers with backButton', () => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
const data = jest.fn((fn => fn({name: 'sample-event'})));
mockHeaderService.headerEventEmitted$ = {
subscribe: data
} as any;
jest.spyOn(createEditGroupPage, 'handleBackButtonEvents').mockImplementation(() => {
return;
});
mockCommonUtilService.getAppName = jest.fn(() => Promise.resolve('Sunbird'));
mockTelemetryGeneratorService.generateImpressionTelemetry = jest.fn();
mockTelemetryGeneratorService.generateInteractTelemetry = jest.fn();
createEditGroupPage.ionViewWillEnter();
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockCommonUtilService.getAppName).toHaveBeenCalled();
expect(mockTelemetryGeneratorService.generateImpressionTelemetry).toHaveBeenCalledWith(
ImpressionType.VIEW, ImpressionSubtype.CREATE_GROUP_FORM, PageId.CREATE_GROUP, Environment.GROUP);
expect(mockTelemetryGeneratorService.generateInteractTelemetry).toHaveBeenCalledWith(
InteractType.INITIATED,
'',
Environment.GROUP,
PageId.CREATE_GROUP,
undefined,
undefined,
undefined,
undefined,
ID.CREATE_GROUP
);
});

describe('ionViewWillLeave', () => {
Expand Down
60 changes: 57 additions & 3 deletions src/app/my-groups/create-edit-group/create-edit-group.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import { AppHeaderService } from '@app/services/app-header.service';
import { Location } from '@angular/common';
import { UtilityService } from '@app/services';
import { RouterLinks } from '@app/app/app.constant';
import {Environment, ID, ImpressionSubtype, ImpressionType, InteractType, PageId,
TelemetryGeneratorService, InteractSubtype} from '@app/services';

@Component({
selector: 'app-create-edit-group',
Expand All @@ -24,7 +26,6 @@ export class CreateEditGroupPage {
createGroupForm: FormGroup;
backButtonFunc: Subscription;
hasFilledLocation = false;

errorMessages = {
groupName: {
message: 'GROUP_NAME_IS_REQUIRED'
Expand All @@ -33,6 +34,7 @@ export class CreateEditGroupPage {
message: 'GROUP_TERMS_IS_REQUIRED'
}
};
headerObservable: Subscription;

constructor(
@Inject('GROUP_SERVICE') public groupService: GroupService,
Expand All @@ -43,18 +45,45 @@ export class CreateEditGroupPage {
private location: Location,
private platform: Platform,
private alertCtrl: AlertController,
private utilityService: UtilityService
private utilityService: UtilityService,
private telemetryGeneratorService: TelemetryGeneratorService
) {
this.initializeForm();
}

ionViewWillEnter() {
this.headerService.showHeaderWithBackButton();

this.headerObservable = this.headerService.headerEventEmitted$.subscribe(eventName => {
this.handleHeaderEvents(eventName);
});

this.handleBackButtonEvents();
this.commonUtilService.getAppName().then((res) => { this.appName = res; });

this.telemetryGeneratorService.generateImpressionTelemetry
(ImpressionType.VIEW, ImpressionSubtype.CREATE_GROUP_FORM, PageId.CREATE_GROUP, Environment.GROUP);

this.telemetryGeneratorService.generateInteractTelemetry(
InteractType.INITIATED,
'',
Environment.GROUP,
PageId.CREATE_GROUP,
undefined,
undefined,
undefined,
undefined,
ID.CREATE_GROUP
);
}

ionViewWillLeave() {
this.commonUtilService.getAppName().then((res) => { this.appName = res; });

if (this.headerObservable) {
this.headerObservable.unsubscribe();
}

if (this.backButtonFunc) {
this.backButtonFunc.unsubscribe();
}
Expand All @@ -66,6 +95,7 @@ export class CreateEditGroupPage {
if (activePortal) {
activePortal.dismiss();
} else {
this.telemetryGeneratorService.generateBackClickedTelemetry(PageId.CREATE_GROUP, Environment.GROUP, false);
this.location.back();
}
});
Expand Down Expand Up @@ -102,6 +132,17 @@ export class CreateEditGroupPage {
this.groupService.create(groupCreateRequest).toPromise().then(async (res) => {
await loader.dismiss();
this.commonUtilService.showToast('GROUP_CREATED');
this.telemetryGeneratorService.generateInteractTelemetry(
InteractType.SUCCESS,
'',
Environment.GROUP,
PageId.CREATE_GROUP,
undefined,
undefined,
undefined,
undefined,
ID.CREATE_GROUP
);
this.location.back();
}).catch(async (err) => {
console.error(err);
Expand All @@ -111,7 +152,12 @@ export class CreateEditGroupPage {
}

async openTermsOfUse() {
// this.generateInteractTelemetry(InteractType.TOUCH, InteractSubtype.TERMS_OF_USE_CLICKED);
this.telemetryGeneratorService.generateInteractTelemetry(
InteractType.TOUCH,
InteractSubtype.TERMS_OF_USE_CLICKED,
Environment.GROUP,
PageId.CREATE_GROUP
);
const baseUrl = await this.utilityService.getBuildConfigValue('TOU_BASE_URL');
const url = baseUrl + RouterLinks.TERM_OF_USE;
const options
Expand All @@ -120,4 +166,12 @@ export class CreateEditGroupPage {
(window as any).cordova.InAppBrowser.open(url, '_blank', options);
}

handleHeaderEvents($event) {
switch ($event.name) {
case 'back':
this.telemetryGeneratorService.generateBackClickedTelemetry(PageId.CREATE_GROUP, Environment.GROUP, true);
this.location.back();
break;
}
}
}
48 changes: 44 additions & 4 deletions src/app/my-groups/group-details/group-details.page.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { GroupDetailsPage } from './group-details.page';
import { GroupService } from '@project-sunbird/sunbird-sdk';
import { AppHeaderService, FormAndFrameworkUtilService, CommonUtilService, AppGlobalService } from '../../../services';
import {
AppHeaderService,
FormAndFrameworkUtilService,
CommonUtilService,
AppGlobalService,
TelemetryGeneratorService, ImpressionType, PageId, Environment, InteractType, InteractSubtype
} from '../../../services';
import { Router } from '@angular/router';
import { Platform, PopoverController } from '@ionic/angular';
import { FilterPipe } from '@app/pipes/filter/filter.pipe';
Expand Down Expand Up @@ -30,6 +36,7 @@ describe('GroupDetailsPage', () => {
}
})) as any
};
const mockTelemetryGeneratorService: Partial<TelemetryGeneratorService> = {};

beforeAll(() => {
groupDetailsPage = new GroupDetailsPage(
Expand All @@ -42,7 +49,8 @@ describe('GroupDetailsPage', () => {
mockPopoverCtrl as PopoverController,
mockFormAndFrameworkUtilService as FormAndFrameworkUtilService,
mockCommonUtilService as CommonUtilService,
mockFilterPipe as FilterPipe
mockFilterPipe as FilterPipe,
mockTelemetryGeneratorService as TelemetryGeneratorService
);
});

Expand Down Expand Up @@ -93,7 +101,7 @@ describe('GroupDetailsPage', () => {
expect(data.name).toBe('back');
});

it('should returu header with back button', (done) => {
it('should return header with back button', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => ({
Expand All @@ -108,18 +116,25 @@ describe('GroupDetailsPage', () => {
});
mockGroupService.getById = jest.fn(() => of({ groupId: 'sample-group-id', members: [] })) as any;
// act
mockTelemetryGeneratorService.generateImpressionTelemetry = jest.fn();
groupDetailsPage.ionViewWillEnter();
// assert
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockTelemetryGeneratorService.generateImpressionTelemetry).toHaveBeenCalledWith(
ImpressionType.VIEW,
'',
PageId.GROUP_DETAIL,
Environment.GROUP
);
setTimeout(() => {
expect(mockGroupService.getById).toHaveBeenCalled();
expect(groupDetailsPage.memberList).toStrictEqual([]);
done();
}, 0);
});

it('should returu header with back button', (done) => {
it('should return header with back button in error case', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => ({
Expand All @@ -133,11 +148,18 @@ describe('GroupDetailsPage', () => {
return;
});
mockGroupService.getById = jest.fn(() => throwError({ error: 'error' })) as any;
mockTelemetryGeneratorService.generateImpressionTelemetry = jest.fn();
// act
groupDetailsPage.ionViewWillEnter();
// assert
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockTelemetryGeneratorService.generateImpressionTelemetry).toHaveBeenCalledWith(
ImpressionType.VIEW,
'',
PageId.GROUP_DETAIL,
Environment.GROUP
);
setTimeout(() => {
expect(mockGroupService.getById).toHaveBeenCalled();
done();
Expand All @@ -146,9 +168,15 @@ describe('GroupDetailsPage', () => {

it('should navigate To AddUserPage', () => {
mockRouter.navigate = jest.fn(() => Promise.resolve(true));
mockTelemetryGeneratorService.generateInteractTelemetry = jest.fn();
groupDetailsPage.navigateToAddUserPage();
expect(mockRouter.navigate).toHaveBeenCalledWith([`/${RouterLinks.MY_GROUPS}/${RouterLinks.ADD_MEMBER_TO_GROUP}`],
{ state: { groupId: 'sample-group-id' } });
expect(mockTelemetryGeneratorService.generateInteractTelemetry).toHaveBeenCalledWith(
InteractType.TOUCH,
InteractSubtype.ADD_MEMBER_CLICKED,
Environment.GROUP,
PageId.GROUP_DETAIL);
});

it('should unsubscribe registerBackButton', () => {
Expand Down Expand Up @@ -464,9 +492,15 @@ describe('GroupDetailsPage', () => {
mockCommonUtilService.translateMessage = jest.fn(() => 'Select activity');
mockCommonUtilService.translateMessage = jest.fn(() => 'Next');
mockRouter.navigate = jest.fn(() => Promise.resolve(true));
mockTelemetryGeneratorService.generateInteractTelemetry = jest.fn();
// act
groupDetailsPage.showAddActivityPopup().then(() => {
// assert
expect(mockTelemetryGeneratorService.generateInteractTelemetry).toHaveBeenCalledWith(
InteractType.TOUCH,
InteractSubtype.ADD_ACTIVITY_CLICKED,
Environment.GROUP,
PageId.GROUP_DETAIL);
expect(mockFormAndFrameworkUtilService.invokeSupportedGroupActivitiesFormApi).toHaveBeenCalled();
expect(mockPopoverCtrl.create).toHaveBeenCalled();
expect(mockCommonUtilService.translateMessage).toHaveBeenNthCalledWith(1, 'SELECT_ACTIVITY');
Expand All @@ -490,9 +524,15 @@ describe('GroupDetailsPage', () => {
} as any)));
mockCommonUtilService.translateMessage = jest.fn(() => 'Select activity');
mockCommonUtilService.translateMessage = jest.fn(() => 'Next');
mockTelemetryGeneratorService.generateInteractTelemetry = jest.fn();
// act
groupDetailsPage.showAddActivityPopup().then(() => {
// assert
expect(mockTelemetryGeneratorService.generateInteractTelemetry).toHaveBeenCalledWith(
InteractType.TOUCH,
InteractSubtype.ADD_ACTIVITY_CLICKED,
Environment.GROUP,
PageId.GROUP_DETAIL);
expect(mockFormAndFrameworkUtilService.invokeSupportedGroupActivitiesFormApi).toHaveBeenCalled();
expect(mockPopoverCtrl.create).toHaveBeenCalled();
expect(mockCommonUtilService.translateMessage).toHaveBeenNthCalledWith(1, 'SELECT_ACTIVITY');
Expand Down
Loading

0 comments on commit 2931ef6

Please sign in to comment.