Skip to content

Commit

Permalink
Issue #SH-25 merge: Merge pull request #1108 from Ajoymaity/release-3…
Browse files Browse the repository at this point in the history
….1.0

Issue #SB-19784 test: Unit test for activity details page
  • Loading branch information
AmiableAnil authored Jul 16, 2020
2 parents ef67fd3 + d59a504 commit d38a317
Showing 1 changed file with 329 additions and 2 deletions.
331 changes: 329 additions & 2 deletions src/app/my-groups/activity-details/activity-details.page.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import {
CommonUtilService, Environment, ImpressionType,
PageId, TelemetryGeneratorService
} from '@app/services';
import { GroupService } from '@project-sunbird/sunbird-sdk';
import { GroupService, GroupMemberRole } from '@project-sunbird/sunbird-sdk';
import { AppHeaderService } from '../../../services';
import { Platform } from '@ionic/angular';
import { Location } from '@angular/common';
import { of } from 'rxjs';

describe('ActivityDetailsPage', () => {
let activityDetailsPage: ActivityDetailsPage;
Expand All @@ -22,7 +23,15 @@ describe('ActivityDetailsPage', () => {
getCurrentNavigation: jest.fn(() => ({
extras: {
state: {
memberList: ['member-1']
memberList: ['member-1'],
loggedinUser: {
userId: 'sample-user-id-1'
},
groupId: 'sample-group-id',
activity: {
id: 'sample-id',
type: 'sample-type'
}
}
}
})) as any
Expand All @@ -44,6 +53,7 @@ describe('ActivityDetailsPage', () => {

beforeEach(() => {
jest.clearAllMocks();
jest.resetAllMocks();
});

it('should be create a instance of activityDetailsPage', () => {
Expand All @@ -66,4 +76,321 @@ describe('ActivityDetailsPage', () => {
Environment.GROUP
);
});

it('should generate telemetry for back clicked', () => {
mockTelemetryGeneratorService.generateBackClickedTelemetry = jest.fn();
mockLocation.back = jest.fn();
// act
activityDetailsPage.handleBackButton(true);
// assert
expect(mockTelemetryGeneratorService.generateBackClickedTelemetry)
.toHaveBeenCalledWith(PageId.GROUP_DETAIL, Environment.GROUP, true);
expect(mockLocation.back).toHaveBeenCalled();
});

it('should handle device back button', () => {
const data = {
name: 'back'
};
jest.spyOn(activityDetailsPage, 'handleBackButton').mockImplementation(() => {
return;
});
activityDetailsPage.handleHeaderEvents(data);
expect(data.name).toBe('back');
});

it('should invoked handleDeviceBackButton', () => {
mockPlatform.backButton = {
subscribeWithPriority: jest.fn((_, fn) => fn(Promise.resolve({event: {}}))) as any
} as any;
jest.spyOn(activityDetailsPage, 'handleBackButton').mockImplementation();
// act
activityDetailsPage.handleDeviceBackButton();
// assert
expect(mockPlatform.backButton).not.toBeUndefined();
});

describe('ionViewWillEnter', () => {
it('should handle device header and back-button for b.userId', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: [{
role: GroupMemberRole.MEMBER,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-2'
}, {
role: GroupMemberRole.ADMIN,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-1'
}],
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for admin', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: [{
role: GroupMemberRole.ADMIN,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-1'
}, {
role: GroupMemberRole.MEMBER,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-2'
}],
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for b.role is member', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: [{
role: GroupMemberRole.ADMIN,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-'
}, {
role: GroupMemberRole.MEMBER,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-'
}],
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for a.role is member', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: [{
role: GroupMemberRole.MEMBER,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-'
}, {
role: GroupMemberRole.ADMIN,
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id-'
}],
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for nothing match', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: [{
role: '',
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id'
}, {
role: '',
createdBy: 'sample-creator',
name: 'member-name',
userId: 'sample-user-id'
}],
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for undefined memberList', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of({
members: undefined,
activity: {
id: 'activity-id',
type: 'activity-type',
agg: {}
}
})) as any
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});

it('should handle device header and back-button for undefined response', (done) => {
mockHeaderService.showHeaderWithBackButton = jest.fn();
mockHeaderService.headerEventEmitted$ = of({
subscribe: jest.fn(() => { })
});
jest.spyOn(activityDetailsPage, 'handleHeaderEvents').mockImplementation();
jest.spyOn(activityDetailsPage, 'handleDeviceBackButton').mockImplementation();
mockGroupService.activityService = {
getDataAggregation: jest.fn(() => of(undefined))
};
// act
activityDetailsPage.ionViewWillEnter();
// assert
setTimeout(() => {
expect(mockHeaderService.showHeaderWithBackButton).toHaveBeenCalled();
expect(mockHeaderService.headerEventEmitted$).not.toBeUndefined();
expect(mockGroupService.activityService).not.toBeUndefined();
done();
}, 0);
});
});

describe('ionViewWillLeave', () => {
it('should unsubscribe all header service', () => {
activityDetailsPage.unregisterBackButton = {
unsubscribe: jest.fn()
} as any;
// act
activityDetailsPage.ionViewWillLeave();
// assert
expect(activityDetailsPage.unregisterBackButton).not.toBeUndefined();
});

it('should not unsubscribe all header service', () => {
activityDetailsPage.unregisterBackButton = undefined;
// act
activityDetailsPage.ionViewWillLeave();
// assert
expect(activityDetailsPage.unregisterBackButton).toBeUndefined();
});
});

describe('getMemberName', () => {
it('should return memberName if userId is matched', () => {
const member = {
userId: 'sample-user-id-1',
name: 'sample-member-name'
};
mockCommonUtilService.translateMessage = jest.fn(() => '');
// act
activityDetailsPage.getMemberName(member);
// assert
expect(mockCommonUtilService.translateMessage).toHaveBeenCalledWith('LOGGED_IN_MEMBER', { member_name: member.name });
});

it('should return memberName if userId is not matched', () => {
const member = {
user: 'sample-user-id',
name: 'sample-member-name'
};
// act
activityDetailsPage.getMemberName(member);
});
});
});

0 comments on commit d38a317

Please sign in to comment.