diff --git a/src/main/webapp/app/overview/header-course.component.html b/src/main/webapp/app/overview/header-course.component.html index 5a895864ddbd..d694ef2d356d 100644 --- a/src/main/webapp/app/overview/header-course.component.html +++ b/src/main/webapp/app/overview/header-course.component.html @@ -14,10 +14,24 @@
{{ courseDescription }}
-
- + +
+ +
+ + {{ 'artemisApp.courseOverview.studentView' | artemisTranslate }} +
diff --git a/src/main/webapp/app/overview/header-course.component.ts b/src/main/webapp/app/overview/header-course.component.ts index cf75a61e33e8..3cdbdb04c465 100644 --- a/src/main/webapp/app/overview/header-course.component.ts +++ b/src/main/webapp/app/overview/header-course.component.ts @@ -21,7 +21,7 @@ export class HeaderCourseComponent implements OnChanges { public longDescriptionShown = false; faArrowDown = faArrowDown; - constructor(private router: Router) {} + constructor(protected router: Router) {} ngOnChanges() { this.adjustCourseDescription(); @@ -54,13 +54,4 @@ export class HeaderCourseComponent implements OnChanges { } } } - - shouldShowGoToCourseManagementButton() { - const courseManagementPage = this.router.url.startsWith('/course-management'); - return !courseManagementPage && this.course.isAtLeastTutor; - } - - redirectToCourseManagement() { - this.router.navigate(['course-management', this.course.id]); - } } diff --git a/src/main/webapp/i18n/de/student-dashboard.json b/src/main/webapp/i18n/de/student-dashboard.json index 2a315c9313d5..ba8be7b9ae50 100644 --- a/src/main/webapp/i18n/de/student-dashboard.json +++ b/src/main/webapp/i18n/de/student-dashboard.json @@ -28,6 +28,7 @@ "showMore": "Mehr anzeigen", "showLess": "Weniger anzeigen", "manage": "Verwalten", + "studentView": "Studentenansicht", "menu": { "exercises": "Aufgaben", "statistics": "Statistiken", diff --git a/src/main/webapp/i18n/en/student-dashboard.json b/src/main/webapp/i18n/en/student-dashboard.json index 85dfddc163c9..1797b7d68581 100644 --- a/src/main/webapp/i18n/en/student-dashboard.json +++ b/src/main/webapp/i18n/en/student-dashboard.json @@ -28,6 +28,7 @@ "showMore": "Show more", "showLess": "Show less", "manage": "Manage", + "studentView": "Student view", "menu": { "exercises": "Exercises", "statistics": "Statistics", diff --git a/src/test/javascript/spec/component/course/header-course.component.spec.ts b/src/test/javascript/spec/component/course/header-course.component.spec.ts index cda9b5525791..5fa37fd2aa77 100644 --- a/src/test/javascript/spec/component/course/header-course.component.spec.ts +++ b/src/test/javascript/spec/component/course/header-course.component.spec.ts @@ -1,11 +1,15 @@ -import { TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { HeaderCourseComponent } from 'app/overview/header-course.component'; import { ArtemisTestModule } from '../../test.module'; import { Course } from 'app/entities/course.model'; -import { MockProvider } from 'ng-mocks'; +import { MockPipe, MockProvider } from 'ng-mocks'; import { Router } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { ArtemisTranslatePipe } from 'app/shared/pipes/artemis-translate.pipe'; +import { MockRouterLinkDirective } from '../../helpers/mocks/directive/mock-router-link.directive'; describe('Header Course Component', () => { + let fixture: ComponentFixture; let component: HeaderCourseComponent; const courseWithLongDescription: Course = { @@ -24,12 +28,14 @@ describe('Header Course Component', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [HeaderCourseComponent, MockProvider(Router)], - imports: [ArtemisTestModule], + imports: [ArtemisTestModule, CommonModule, MockPipe(ArtemisTranslatePipe), MockRouterLinkDirective], + declarations: [HeaderCourseComponent], + providers: [MockProvider(Router)], }) .compileComponents() .then(() => { - component = TestBed.createComponent(HeaderCourseComponent).componentInstance; + fixture = TestBed.createComponent(HeaderCourseComponent); + component = fixture.componentInstance; }); window['innerWidth'] = 1920; }); @@ -84,19 +90,26 @@ describe('Header Course Component', () => { const urlSpy = jest.spyOn(router, 'url', 'get'); urlSpy.mockReturnValue('/some-url'); - const showManageLectureButton = component.shouldShowGoToCourseManagementButton(); - expect(showManageLectureButton).toBeTrue(); + fixture.detectChanges(); + + const manageButton = fixture.nativeElement.querySelector('#manage-button'); + expect(manageButton).toBeTruthy(); }); - it('should not display manage button in course management', () => { + it('should not display manage button but go to student view button in course management', () => { component.course = courseWithShortDescription; component.course!.isAtLeastTutor = true; const router = TestBed.inject(Router); const urlSpy = jest.spyOn(router, 'url', 'get'); urlSpy.mockReturnValue('/course-management/some-path'); - const showManageLectureButton = component.shouldShowGoToCourseManagementButton(); - expect(showManageLectureButton).toBeFalse(); + fixture.detectChanges(); + + const manageButton = fixture.nativeElement.querySelector('#manage-button'); + expect(manageButton).toBeNull(); + + const showStudentViewButton = fixture.nativeElement.querySelector('#student-view-button'); + expect(showStudentViewButton).toBeTruthy(); }); it('should not display manage button to student', () => { @@ -106,16 +119,20 @@ describe('Header Course Component', () => { const urlSpy = jest.spyOn(router, 'url', 'get'); urlSpy.mockReturnValue('/some-url'); - const showManageLectureButton = component.shouldShowGoToCourseManagementButton(); - expect(showManageLectureButton).toBeFalse(); + fixture.detectChanges(); + + const manageButton = fixture.nativeElement.querySelector('#manage-button'); + expect(manageButton).toBeNull(); }); - it('should redirect to course management', () => { + it('should not display student view button in student view', () => { component.course = courseWithShortDescription; + component.course!.isAtLeastTutor = false; const router = TestBed.inject(Router); - const navigateSpy = jest.spyOn(router, 'navigate'); + const urlSpy = jest.spyOn(router, 'url', 'get'); + urlSpy.mockReturnValue('/courses'); - component.redirectToCourseManagement(); - expect(navigateSpy).toHaveBeenCalledWith(['course-management', 234]); + const showManageLectureButton = fixture.nativeElement.querySelector('#student-view-button'); + expect(showManageLectureButton).toBeNull(); }); });