From 03ff85d29d14e4d41858098e3a216d187dc02847 Mon Sep 17 00:00:00 2001 From: Maximilian Anzinger <44003963+MaximilianAnzinger@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:24:27 +0100 Subject: [PATCH 1/3] add redirect button and test --- .../webapp/app/overview/header-course.component.html | 6 ++++++ src/main/webapp/app/overview/header-course.component.ts | 8 ++++++++ src/main/webapp/i18n/de/student-dashboard.json | 1 + src/main/webapp/i18n/en/student-dashboard.json | 1 + .../component/course/header-course.component.spec.ts | 9 +++++++++ 5 files changed, 25 insertions(+) diff --git a/src/main/webapp/app/overview/header-course.component.html b/src/main/webapp/app/overview/header-course.component.html index 5a895864ddbd..2ba6762f9a82 100644 --- a/src/main/webapp/app/overview/header-course.component.html +++ b/src/main/webapp/app/overview/header-course.component.html @@ -19,6 +19,12 @@
{{ courseDescription }}
+ +
+ +
diff --git a/src/main/webapp/app/overview/header-course.component.ts b/src/main/webapp/app/overview/header-course.component.ts index cf75a61e33e8..2c8024691e53 100644 --- a/src/main/webapp/app/overview/header-course.component.ts +++ b/src/main/webapp/app/overview/header-course.component.ts @@ -63,4 +63,12 @@ export class HeaderCourseComponent implements OnChanges { redirectToCourseManagement() { this.router.navigate(['course-management', this.course.id]); } + + shouldShowGoToStudentViewButton() { + return this.router.url.startsWith('/course-management'); + } + + redirectToStudentView() { + this.router.navigate(['courses', 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..f6618c7ed78b 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 @@ -118,4 +118,13 @@ describe('Header Course Component', () => { component.redirectToCourseManagement(); expect(navigateSpy).toHaveBeenCalledWith(['course-management', 234]); }); + + it('should redirect to course student view', () => { + component.course = courseWithShortDescription; + const router = TestBed.inject(Router); + const navigateSpy = jest.spyOn(router, 'navigate'); + + component.redirectToStudentView(); + expect(navigateSpy).toHaveBeenCalledWith(['courses', 234]); + }); }); From aa16ce2e2c10e5e5a168097bf2ef3e02c5ac198d Mon Sep 17 00:00:00 2001 From: Maximilian Anzinger <44003963+MaximilianAnzinger@users.noreply.github.com> Date: Tue, 14 Nov 2023 23:27:18 +0100 Subject: [PATCH 2/3] replace buttons by links --- .../app/overview/header-course.component.html | 8 +++---- .../app/overview/header-course.component.ts | 4 ---- .../course/header-course.component.spec.ts | 24 ++++++++----------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/main/webapp/app/overview/header-course.component.html b/src/main/webapp/app/overview/header-course.component.html index 2ba6762f9a82..303f9c3f8b4e 100644 --- a/src/main/webapp/app/overview/header-course.component.html +++ b/src/main/webapp/app/overview/header-course.component.html @@ -15,15 +15,15 @@
{{ courseDescription }}
- +
- +
diff --git a/src/main/webapp/app/overview/header-course.component.ts b/src/main/webapp/app/overview/header-course.component.ts index 2c8024691e53..0663fe358f95 100644 --- a/src/main/webapp/app/overview/header-course.component.ts +++ b/src/main/webapp/app/overview/header-course.component.ts @@ -67,8 +67,4 @@ export class HeaderCourseComponent implements OnChanges { shouldShowGoToStudentViewButton() { return this.router.url.startsWith('/course-management'); } - - redirectToStudentView() { - this.router.navigate(['courses', this.course.id]); - } } 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 f6618c7ed78b..f6b2bf5819f4 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 @@ -88,7 +88,7 @@ describe('Header Course Component', () => { expect(showManageLectureButton).toBeTrue(); }); - 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); @@ -97,6 +97,9 @@ describe('Header Course Component', () => { const showManageLectureButton = component.shouldShowGoToCourseManagementButton(); expect(showManageLectureButton).toBeFalse(); + + const showStudentViewButton = component.shouldShowGoToStudentViewButton(); + expect(showStudentViewButton).toBeTrue(); }); it('should not display manage button to student', () => { @@ -110,21 +113,14 @@ describe('Header Course Component', () => { expect(showManageLectureButton).toBeFalse(); }); - it('should redirect to course management', () => { - component.course = courseWithShortDescription; - const router = TestBed.inject(Router); - const navigateSpy = jest.spyOn(router, 'navigate'); - - component.redirectToCourseManagement(); - expect(navigateSpy).toHaveBeenCalledWith(['course-management', 234]); - }); - - it('should redirect to course student view', () => { + 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.redirectToStudentView(); - expect(navigateSpy).toHaveBeenCalledWith(['courses', 234]); + const showManageLectureButton = component.shouldShowGoToStudentViewButton(); + expect(showManageLectureButton).toBeFalse(); }); }); From 205f1b97075ed76a22c158d595abfc08cd6dee3a Mon Sep 17 00:00:00 2001 From: Maximilian Anzinger <44003963+MaximilianAnzinger@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:01:07 +0100 Subject: [PATCH 3/3] apply lucas suggestions --- .../app/overview/header-course.component.html | 12 +++++- .../app/overview/header-course.component.ts | 15 +------ .../course/header-course.component.spec.ts | 42 ++++++++++++------- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/main/webapp/app/overview/header-course.component.html b/src/main/webapp/app/overview/header-course.component.html index 303f9c3f8b4e..d694ef2d356d 100644 --- a/src/main/webapp/app/overview/header-course.component.html +++ b/src/main/webapp/app/overview/header-course.component.html @@ -14,13 +14,21 @@
{{ courseDescription }}
-
+
{{ 'artemisApp.courseOverview.manage' | artemisTranslate }}
-
+
{{ '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 0663fe358f95..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,17 +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]); - } - - shouldShowGoToStudentViewButton() { - return this.router.url.startsWith('/course-management'); - } } 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 f6b2bf5819f4..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,8 +90,10 @@ 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 but go to student view button in course management', () => { @@ -95,11 +103,13 @@ describe('Header Course Component', () => { 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 = component.shouldShowGoToStudentViewButton(); - expect(showStudentViewButton).toBeTrue(); + const showStudentViewButton = fixture.nativeElement.querySelector('#student-view-button'); + expect(showStudentViewButton).toBeTruthy(); }); it('should not display manage button to student', () => { @@ -109,8 +119,10 @@ 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 not display student view button in student view', () => { @@ -120,7 +132,7 @@ describe('Header Course Component', () => { const urlSpy = jest.spyOn(router, 'url', 'get'); urlSpy.mockReturnValue('/courses'); - const showManageLectureButton = component.shouldShowGoToStudentViewButton(); - expect(showManageLectureButton).toBeFalse(); + const showManageLectureButton = fixture.nativeElement.querySelector('#student-view-button'); + expect(showManageLectureButton).toBeNull(); }); });