diff --git a/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.spec.ts b/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.spec.ts index 32a493cd410ee4cdbfc9fd3c42fe7ce51a98f98b..47238789ee762b965faf12d77415107f248c0aa8 100644 --- a/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.spec.ts +++ b/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.spec.ts @@ -75,6 +75,7 @@ describe('BatchDetailsComponent', () => { component.courseHierarchy = {identifier: '01250836468775321655', pkgVersion: '1'} ; spyOn(courseBatchService, 'getAllBatchDetails').and.returnValue(observableOf(allBatchDetails)); spyOn(courseBatchService, 'getUserList').and.returnValue(observableOf(userSearch)); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.ngOnInit(); const searchParams: any = { filters: { @@ -99,6 +100,7 @@ describe('BatchDetailsComponent', () => { const resourceService = TestBed.get(ResourceService); resourceService.messages = resourceServiceMockData.messages; resourceService.frmelmnts = resourceServiceMockData.frmelmnts; + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); spyOn(courseBatchService, 'getAllBatchDetails').and.returnValue(observableThrowError(allBatchDetails)); component.ngOnInit(); const searchParams: any = { @@ -120,6 +122,7 @@ describe('BatchDetailsComponent', () => { component.courseHierarchy = {identifier: '01250836468775321655', pkgVersion: '1'} ; component.userService.setUserId('123'); spyOn(permissionService, 'checkRolesPermissions').and.returnValue(true); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); spyOn(courseBatchService, 'getAllBatchDetails').and.returnValue(observableOf(allBatchDetails)); spyOn(courseBatchService, 'getUserList').and.returnValue(observableOf(userSearch)); const searchParams: any = { @@ -164,6 +167,7 @@ describe('BatchDetailsComponent', () => { }); it('should unsubscribe from all observable subscriptions', () => { component.courseHierarchy = {identifier: '01250836468775321655', pkgVersion: '1'} ; + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.ngOnInit(); spyOn(component.unsubscribe, 'complete'); component.ngOnDestroy(); @@ -183,6 +187,7 @@ describe('BatchDetailsComponent', () => { spyOnProperty(userService, 'userid', 'get').and.returnValue('9ad90eb4-b8d2-4e99-805f'); spyOn(permissionService, 'checkRolesPermissions').and.returnValue(true); spyOn(component['courseConsumptionService'], 'canViewDashboard').and.returnValue(true); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); component.courseHierarchy = {createdBy: '9ad90eb4-b8d2-4e99-805f', trackable: {enabled: 'Yes'}}; component.showCreateBatch(); expect(component.isTrackable).toBe(true); @@ -193,11 +198,12 @@ describe('BatchDetailsComponent', () => { it(`should not allow 'Create Batch' button to be shown if the user has not created the course`, () => { component.courseHierarchy = {createdBy: '9ad90eb4-b8d2-4e99-805f', trackable: {enabled: 'No'}}; - spyOn(component['courseConsumptionService'], 'canCreateBatch').and.returnValue(true); + spyOn(component['courseConsumptionService'], 'canCreateBatch').and.returnValue(false); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.showCreateBatch(); expect(component.allowBatchCreation).toBe(false); expect(component.isTrackable).toBe(false); - expect(component['courseConsumptionService'].canCreateBatch).not. + expect(component['courseConsumptionService'].canCreateBatch). toHaveBeenCalledWith({createdBy: '9ad90eb4-b8d2-4e99-805f', trackable: {enabled: 'No'}}); }); @@ -206,6 +212,7 @@ describe('BatchDetailsComponent', () => { const permissionService = TestBed.get(PermissionService); spyOnProperty(userService, 'userid', 'get').and.returnValue('9ad90eb4-b8d2-4e99-805f'); spyOn(permissionService, 'checkRolesPermissions').and.returnValue(false); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.courseHierarchy = {createdBy: '9ad90eb4-b8d2-4e99-805f'}; component.showCreateBatch(); expect(component.showCreateBatch()).toBeFalsy(); @@ -263,6 +270,7 @@ describe('BatchDetailsComponent', () => { component.courseHierarchy = {trackable: { enabled: 'Yes'} }; spyOn(component, 'showCreateBatch'); spyOn(component['courseConsumptionService'], 'canCreateBatch').and.returnValue(false); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.ngOnInit(); expect(component.showCreateBatch).toHaveBeenCalled(); expect(component.isTrackable).toBeFalsy(); diff --git a/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.ts b/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.ts index dd7523e6ed2ac2499c64386f07853062197a1147..5ebb51588b34a42a450c244481f019e6ad9911e2 100644 --- a/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.ts +++ b/src/app/client/src/app/modules/learn/components/batch/batch-details/batch-details.component.ts @@ -278,9 +278,9 @@ export class BatchDetailsComponent implements OnInit, OnDestroy { * @returns - boolean */ showCreateBatch() { - this.isTrackable = _.lowerCase(_.get(this.courseHierarchy, 'trackable.enabled')) === 'yes'; - this.allowBatchCreation = this.isTrackable && this.courseConsumptionService.canCreateBatch(this.courseHierarchy); - this.viewBatch = this.isTrackable && this.courseConsumptionService.canViewDashboard(this.courseHierarchy); + this.isTrackable = this.courseConsumptionService.isTrackableCollection(this.courseHierarchy); + this.allowBatchCreation = this.courseConsumptionService.canCreateBatch(this.courseHierarchy); + this.viewBatch = this.courseConsumptionService.canViewDashboard(this.courseHierarchy); } logTelemetry(id, content?: {}, batchId?) { diff --git a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.spec.ts b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.spec.ts index 95a1910c5d47e24b64d25d245105e5e433fb1bb4..dca32349c0cd3333c22b420c054fbf15ffda2bfd 100644 --- a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.spec.ts +++ b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.spec.ts @@ -82,6 +82,7 @@ describe('CourseConsumptionHeaderComponent', () => { const resourceService = TestBed.get(ResourceService); spyOn(courseConsumptionService, 'parseChildren').and.returnValue([]); spyOn(permissionService, 'checkRolesPermissions').and.returnValue(true); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); resourceService.messages = resourceServiceMockData.messages; resourceService.frmelmnts = resourceServiceMockData.frmelmnts; component.courseHierarchy = CourseHierarchyGetMockResponse.result.content; @@ -101,6 +102,7 @@ describe('CourseConsumptionHeaderComponent', () => { const courseConsumptionService = TestBed.get(CourseConsumptionService); spyOn(courseConsumptionService, 'parseChildren').and.returnValue([]); spyOn(courseConsumptionService.updateContentConsumedStatus, 'emit'); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); const courseProgressService = TestBed.get(CourseProgressService); const resourceService = TestBed.get(ResourceService); resourceService.messages = resourceServiceMockData.messages; @@ -123,6 +125,7 @@ describe('CourseConsumptionHeaderComponent', () => { const resourceService = TestBed.get(ResourceService); const activatedRouteStub = TestBed.get(ActivatedRoute); activatedRouteStub.changeFirstChildParams({ courseId: 'do_212347136096788480178' }); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); resourceService.messages = resourceServiceMockData.messages; resourceService.frmelmnts = resourceServiceMockData.frmelmnts; component.courseHierarchy = CourseHierarchyGetMockResponseFlagged.result.content; @@ -313,19 +316,22 @@ describe('CourseConsumptionHeaderComponent', () => { expect(telemetryService.interact).toHaveBeenCalled(); }); - it ('should return user is coursementor', () => { + it ('should enable isTrackable', () => { CourseHierarchyGetMockResponseFlagged.result.content['trackable.enabled'] = 'Yes'; component.courseHierarchy = CourseHierarchyGetMockResponseFlagged.result.content; spyOn(component['courseConsumptionService'], 'canViewDashboard').and.returnValue(true); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(true); component.ngOnInit(); expect(component.isTrackable).toBeTruthy(); expect(component.viewDashboard).toBeTruthy(); }); - it ('should return user is not coursementor', () => { + it ('should disable isTrackable', () => { CourseHierarchyGetMockResponseFlagged.result.content['trackable.enabled'] = 'No'; + CourseHierarchyGetMockResponseFlagged.result.content['contentType'] = 'Textbook'; component.courseHierarchy = CourseHierarchyGetMockResponseFlagged.result.content; spyOn(component['courseConsumptionService'], 'canViewDashboard').and.returnValue(false); + spyOn(component['courseConsumptionService'], 'isTrackableCollection').and.returnValue(false); component.ngOnInit(); expect(component.isTrackable).toBeFalsy(); expect(component.viewDashboard).toBeFalsy(); diff --git a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.ts b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.ts index 04030abe236318ce5c4b27a437c140dc4ef3dc95..0f2090db148be759386406d562dec1ec9c3bd2b7 100644 --- a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.ts +++ b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.ts @@ -75,8 +75,8 @@ export class CourseConsumptionHeaderComponent implements OnInit, AfterViewInit, if (!this.courseConsumptionService.getCoursePagePreviousUrl) { this.courseConsumptionService.setCoursePagePreviousUrl(); } - this.isTrackable = _.lowerCase(_.get(this.courseHierarchy, 'trackable.enabled')) === 'yes'; - this.viewDashboard = this.isTrackable && this.courseConsumptionService.canViewDashboard(this.courseHierarchy); + this.isTrackable = this.courseConsumptionService.isTrackableCollection(this.courseHierarchy); + this.viewDashboard = this.courseConsumptionService.canViewDashboard(this.courseHierarchy); observableCombineLatest(this.activatedRoute.firstChild.params, this.activatedRoute.firstChild.queryParams, (params, queryParams) => { diff --git a/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.spec.ts b/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.spec.ts index d1c10ac047447fed6804eddaccdda46869973e10..60b02b42939e0a1c6ea060d9dfce23e72b6358ce 100644 --- a/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.spec.ts +++ b/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.spec.ts @@ -208,4 +208,19 @@ describe('CourseConsumptionService', () => { expect(response).toEqual(false); }); + it('should enable trackable', () => { + const service = TestBed.get(CourseConsumptionService); + courseConsumptionServiceMockData.courseHierarchy.trackable.enabled = 'yes'; + const response = service.isTrackableCollection(courseConsumptionServiceMockData.courseHierarchy); + expect(response).toEqual(true); + }); + + it('should disable trackable', () => { + const service = TestBed.get(CourseConsumptionService); + courseConsumptionServiceMockData.courseHierarchy.trackable.enabled = 'no'; + courseConsumptionServiceMockData.courseHierarchy.contentType = 'textbook'; + const response = service.isTrackableCollection(courseConsumptionServiceMockData.courseHierarchy); + expect(response).toBeFalsy(); + }); + }); diff --git a/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.ts b/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.ts index aa494d603cb2a789f7c10b371158f2adcd7cb638..bf6ae562f01e3e62bc04f8122f560eef9739f8e0 100644 --- a/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.ts +++ b/src/app/client/src/app/modules/learn/services/course-consumption/course-consumption.service.ts @@ -156,15 +156,20 @@ getAllOpenBatches(contents) { } canCreateBatch(courseHierarchy) { - return (this.permissionService.checkRolesPermissions(['CONTENT_CREATOR']) + return (this.isTrackableCollection(courseHierarchy) && this.permissionService.checkRolesPermissions(['CONTENT_CREATOR']) && this.userService.userid === _.get(courseHierarchy, 'createdBy')); } canViewDashboard(courseHierarchy) { - return (this.canCreateBatch(courseHierarchy) || this.permissionService.checkRolesPermissions(['COURSE_MENTOR'])); + return (this.isTrackableCollection(courseHierarchy) && + (this.canCreateBatch(courseHierarchy) || this.permissionService.checkRolesPermissions(['COURSE_MENTOR']))); } canAddCertificates(courseHierarchy) { return this.canCreateBatch(courseHierarchy); } + + isTrackableCollection(collection: {trackable?: {enabled?: string}, contentType: string}) { + return (_.lowerCase(collection.trackable.enabled) === 'yes' || _.lowerCase(collection.contentType) === 'course'); + } }