diff --git a/src/main/webapp/app/detail-overview-list/components/boolean-detail.component.html b/src/main/webapp/app/detail-overview-list/components/boolean-detail/boolean-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/boolean-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/boolean-detail/boolean-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/boolean-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/boolean-detail/boolean-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/boolean-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/boolean-detail/boolean-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/components/date-detail.component.html b/src/main/webapp/app/detail-overview-list/components/date-detail/date-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/date-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/date-detail/date-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/date-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/date-detail/date-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/date-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/date-detail/date-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/components/link-detail.component.html b/src/main/webapp/app/detail-overview-list/components/link-detail/link-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/link-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/link-detail/link-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/link-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/link-detail/link-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/link-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/link-detail/link-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component.html b/src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.html b/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.html new file mode 100644 index 000000000000..5b7834c51b5a --- /dev/null +++ b/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.html @@ -0,0 +1,24 @@ + +
+ +
+@if (detail.data.addedLineCount > 0 || detail.data.removedLineCount > 0) { +
+ +
+} diff --git a/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.ts new file mode 100644 index 000000000000..b108a561d7c5 --- /dev/null +++ b/src/main/webapp/app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component.ts @@ -0,0 +1,39 @@ +import { Component, Input, inject } from '@angular/core'; +import type { ProgrammingDiffReportDetail } from 'app/detail-overview-list/detail.model'; +import { FeatureToggle } from 'app/shared/feature-toggle/feature-toggle.service'; +import { ButtonSize, ButtonType, TooltipPlacement } from 'app/shared/components/button.component'; +import { faCodeCompare } from '@fortawesome/free-solid-svg-icons'; +import { ProgrammingExerciseGitDiffReport } from 'app/entities/hestia/programming-exercise-git-diff-report.model'; +import { GitDiffReportModalComponent } from 'app/exercises/programming/hestia/git-diff-report/git-diff-report-modal.component'; +import { GitDiffReportModule } from 'app/exercises/programming/hestia/git-diff-report/git-diff-report.module'; +import { ArtemisSharedComponentModule } from 'app/shared/components/shared-component.module'; +import { ArtemisSharedModule } from 'app/shared/shared.module'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'jhi-programming-diff-report-detail', + templateUrl: 'programming-diff-report-detail.component.html', + standalone: true, + imports: [ArtemisSharedModule, ArtemisSharedComponentModule, GitDiffReportModule], +}) +export class ProgrammingDiffReportDetailComponent { + protected readonly FeatureToggle = FeatureToggle; + protected readonly ButtonSize = ButtonSize; + protected readonly TooltipPlacement = TooltipPlacement; + protected readonly WARNING = ButtonType.WARNING; + + protected readonly faCodeCompare = faCodeCompare; + + private readonly modalService = inject(NgbModal); + + @Input({ required: true }) detail: ProgrammingDiffReportDetail; + + showGitDiff(gitDiff?: ProgrammingExerciseGitDiffReport) { + if (!gitDiff) { + return; + } + + const modalRef = this.modalService.open(GitDiffReportModalComponent, { windowClass: 'diff-view-modal' }); + modalRef.componentInstance.report = gitDiff; + } +} diff --git a/src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail.component.html b/src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.html b/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.html new file mode 100644 index 000000000000..366ecdb77efd --- /dev/null +++ b/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.html @@ -0,0 +1,38 @@ +@if (detail.data.participation) { +
+ @if (!detail.data.loading) { + + } + @if (detail.data.participation.results?.length) { + + @if (detail.data.exercise.isAtLeastEditor) { + + } + } + @if (detail.data.exercise.isAtLeastEditor && detail.data.participation.id) { + + @switch (detail.data.type) { + @case (ProgrammingExerciseParticipationType.TEMPLATE) { + + } + @case (ProgrammingExerciseParticipationType.SOLUTION) { + + } + } + + } +
+} diff --git a/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.ts new file mode 100644 index 000000000000..89a43fb9aee3 --- /dev/null +++ b/src/main/webapp/app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component.ts @@ -0,0 +1,20 @@ +import { Component, Input } from '@angular/core'; +import type { ProgrammingTestStatusDetail } from 'app/detail-overview-list/detail.model'; +import { RouterModule } from '@angular/router'; +import { ArtemisProgrammingExerciseActionsModule } from 'app/exercises/programming/shared/actions/programming-exercise-actions.module'; +import { SubmissionResultStatusModule } from 'app/overview/submission-result-status.module'; +import { ArtemisProgrammingExerciseStatusModule } from 'app/exercises/programming/manage/status/programming-exercise-status.module'; +import { TranslateDirective } from 'app/shared/language/translate.directive'; +import { ProgrammingExerciseParticipationType } from 'app/entities/programming/programming-exercise-participation.model'; + +@Component({ + selector: 'jhi-programming-test-status-detail', + templateUrl: 'programming-test-status-detail.component.html', + standalone: true, + imports: [RouterModule, ArtemisProgrammingExerciseActionsModule, SubmissionResultStatusModule, ArtemisProgrammingExerciseStatusModule, TranslateDirective], +}) +export class ProgrammingTestStatusDetailComponent { + protected readonly ProgrammingExerciseParticipationType = ProgrammingExerciseParticipationType; + + @Input({ required: true }) detail: ProgrammingTestStatusDetail; +} diff --git a/src/main/webapp/app/detail-overview-list/components/text-detail.component.html b/src/main/webapp/app/detail-overview-list/components/text-detail/text-detail.component.html similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/text-detail.component.html rename to src/main/webapp/app/detail-overview-list/components/text-detail/text-detail.component.html diff --git a/src/main/webapp/app/detail-overview-list/components/text-detail.component.ts b/src/main/webapp/app/detail-overview-list/components/text-detail/text-detail.component.ts similarity index 100% rename from src/main/webapp/app/detail-overview-list/components/text-detail.component.ts rename to src/main/webapp/app/detail-overview-list/components/text-detail/text-detail.component.ts diff --git a/src/main/webapp/app/detail-overview-list/detail-overview-list.component.html b/src/main/webapp/app/detail-overview-list/detail-overview-list.component.html index ae8ce9674c34..54cc218a7f3b 100644 --- a/src/main/webapp/app/detail-overview-list/detail-overview-list.component.html +++ b/src/main/webapp/app/detail-overview-list/detail-overview-list.component.html @@ -15,79 +15,6 @@

{{ section } @switch (detail.type) { - @case (DetailType.ProgrammingTestStatus) { -
- @if (detail.data.participation) { -
- @if (!detail.data.loading) { - - } - @if (detail.data.participation.results?.length) { - - @if (detail.data.exercise.isAtLeastEditor) { - - } - } - @if (detail.data.exercise.isAtLeastEditor && detail.data.participation.id) { - - @switch (detail.data.type) { - @case (ProgrammingExerciseParticipationType.TEMPLATE) { - - } - @case (ProgrammingExerciseParticipationType.SOLUTION) { - - } - } - - } -
- } -
- } - @case (DetailType.ProgrammingDiffReport) { -
- -
- -
- @if (detail.data.addedLineCount > 0 || detail.data.removedLineCount > 0) { -
- -
- } -
- } @case (DetailType.ProgrammingProblemStatement) { @if (detail.data.exercise?.templateParticipation) {
diff --git a/src/main/webapp/app/detail-overview-list/detail-overview-list.component.ts b/src/main/webapp/app/detail-overview-list/detail-overview-list.component.ts index 4f49ce9fe006..60ed25bd572a 100644 --- a/src/main/webapp/app/detail-overview-list/detail-overview-list.component.ts +++ b/src/main/webapp/app/detail-overview-list/detail-overview-list.component.ts @@ -1,11 +1,7 @@ import { Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; -import { faCodeCompare } from '@fortawesome/free-solid-svg-icons'; import { isEmpty } from 'lodash-es'; import { FeatureToggle } from 'app/shared/feature-toggle/feature-toggle.service'; -import { ButtonSize, ButtonType, TooltipPlacement } from 'app/shared/components/button.component'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { GitDiffReportModalComponent } from 'app/exercises/programming/hestia/git-diff-report/git-diff-report-modal.component'; -import { ProgrammingExerciseGitDiffReport } from 'app/entities/hestia/programming-exercise-git-diff-report.model'; +import { ButtonSize, TooltipPlacement } from 'app/shared/components/button.component'; import { IrisSubSettingsType } from 'app/entities/iris/settings/iris-sub-settings.model'; import { ModelingExerciseService } from 'app/exercises/modeling/manage/modeling-exercise.service'; import { AlertService } from 'app/core/util/alert.service'; @@ -52,6 +48,7 @@ export class DetailOverviewListComponent implements OnInit, OnDestroy { protected readonly FeatureToggle = FeatureToggle; protected readonly ButtonSize = ButtonSize; protected readonly ProgrammingExerciseParticipationType = ProgrammingExerciseParticipationType; + readonly CHAT = IrisSubSettingsType.CHAT; @Input() @@ -62,16 +59,10 @@ export class DetailOverviewListComponent implements OnInit, OnDestroy { // headline record to avoid function call in html headlinesRecord: Record; - // icons - readonly faCodeCompare = faCodeCompare; - - WARNING = ButtonType.WARNING; - profileSubscription: Subscription; isLocalVC = false; constructor( - private modalService: NgbModal, private modelingExerciseService: ModelingExerciseService, private alertService: AlertService, private profileService: ProfileService, @@ -92,15 +83,6 @@ export class DetailOverviewListComponent implements OnInit, OnDestroy { }, {}); } - showGitDiff(gitDiff?: ProgrammingExerciseGitDiffReport) { - if (!gitDiff) { - return; - } - - const modalRef = this.modalService.open(GitDiffReportModalComponent, { windowClass: 'diff-view-modal' }); - modalRef.componentInstance.report = gitDiff; - } - downloadApollonDiagramAsPDf(umlModel?: UMLModel, title?: string) { if (umlModel) { this.modelingExerciseService.convertToPdf(JSON.stringify(umlModel), `${title}-example-solution`).subscribe({ diff --git a/src/main/webapp/app/detail-overview-list/detail.model.ts b/src/main/webapp/app/detail-overview-list/detail.model.ts index 77085194fb0b..4e80437fe3d2 100644 --- a/src/main/webapp/app/detail-overview-list/detail.model.ts +++ b/src/main/webapp/app/detail-overview-list/detail.model.ts @@ -97,7 +97,7 @@ export interface ProgrammingAuxiliaryRepositoryButtonsDetail extends DetailBase data: { auxiliaryRepositories: AuxiliaryRepository[]; exerciseId?: number }; } -interface ProgrammingTestStatusDetail extends DetailBase { +export interface ProgrammingTestStatusDetail extends DetailBase { type: DetailType.ProgrammingTestStatus; data: { participation?: TemplateProgrammingExerciseParticipation | SolutionProgrammingExerciseParticipation; @@ -108,7 +108,7 @@ interface ProgrammingTestStatusDetail extends DetailBase { submissionRouterLink?: (string | number | undefined)[]; }; } -interface ProgrammingDiffReportDetail extends DetailBase { +export interface ProgrammingDiffReportDetail extends DetailBase { type: DetailType.ProgrammingDiffReport; data: { addedLineCount: number; removedLineCount: number; isLoadingDiffReport?: boolean; gitDiffReport?: ProgrammingExerciseGitDiffReport }; } diff --git a/src/main/webapp/app/detail-overview-list/exercise-detail.directive.ts b/src/main/webapp/app/detail-overview-list/exercise-detail.directive.ts index 9a0cd295b12e..2bacb55c076b 100644 --- a/src/main/webapp/app/detail-overview-list/exercise-detail.directive.ts +++ b/src/main/webapp/app/detail-overview-list/exercise-detail.directive.ts @@ -1,12 +1,14 @@ import { ComponentRef, Directive, Input, OnDestroy, OnInit, Type, ViewContainerRef } from '@angular/core'; import type { Detail, ShownDetail } from 'app/detail-overview-list/detail.model'; import { DetailType } from 'app/detail-overview-list/detail-overview-list.component'; -import { TextDetailComponent } from 'app/detail-overview-list/components/text-detail.component'; -import { DateDetailComponent } from 'app/detail-overview-list/components/date-detail.component'; -import { LinkDetailComponent } from 'app/detail-overview-list/components/link-detail.component'; -import { BooleanDetailComponent } from 'app/detail-overview-list/components/boolean-detail.component'; -import { ProgrammingRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-repository-buttons-detail.component'; -import { ProgrammingAuxiliaryRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component'; +import { TextDetailComponent } from 'app/detail-overview-list/components/text-detail/text-detail.component'; +import { DateDetailComponent } from 'app/detail-overview-list/components/date-detail/date-detail.component'; +import { LinkDetailComponent } from 'app/detail-overview-list/components/link-detail/link-detail.component'; +import { BooleanDetailComponent } from 'app/detail-overview-list/components/boolean-detail/boolean-detail.component'; +import { ProgrammingRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component'; +import { ProgrammingAuxiliaryRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component'; +import { ProgrammingTestStatusDetailComponent } from 'app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component'; +import { ProgrammingDiffReportDetailComponent } from 'app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component'; @Directive({ selector: '[jhiExerciseDetail]', @@ -33,6 +35,8 @@ export class ExerciseDetailDirective implements OnInit, OnDestroy { | BooleanDetailComponent | ProgrammingRepositoryButtonsDetailComponent | ProgrammingAuxiliaryRepositoryButtonsDetailComponent + | ProgrammingTestStatusDetailComponent + | ProgrammingDiffReportDetailComponent >; } = { [DetailType.Text]: TextDetailComponent, @@ -41,6 +45,8 @@ export class ExerciseDetailDirective implements OnInit, OnDestroy { [DetailType.Boolean]: BooleanDetailComponent, [DetailType.ProgrammingRepositoryButtons]: ProgrammingRepositoryButtonsDetailComponent, [DetailType.ProgrammingAuxiliaryRepositoryButtons]: ProgrammingAuxiliaryRepositoryButtonsDetailComponent, + [DetailType.ProgrammingTestStatus]: ProgrammingTestStatusDetailComponent, + [DetailType.ProgrammingDiffReport]: ProgrammingDiffReportDetailComponent, }; const detailComponent = detailTypeToComponent[this.detail.type]; diff --git a/src/main/webapp/app/shared/language/translate.directive.ts b/src/main/webapp/app/shared/language/translate.directive.ts index 8a703341ed63..cb40182df64f 100644 --- a/src/main/webapp/app/shared/language/translate.directive.ts +++ b/src/main/webapp/app/shared/language/translate.directive.ts @@ -9,6 +9,7 @@ import { takeUntil } from 'rxjs/operators'; */ @Directive({ selector: '[jhiTranslate]', + standalone: true, }) export class TranslateDirective implements OnChanges, OnInit, OnDestroy { @Input() jhiTranslate!: string; diff --git a/src/main/webapp/app/shared/shared-common.module.ts b/src/main/webapp/app/shared/shared-common.module.ts index 67381071e8cd..b14b2d663504 100644 --- a/src/main/webapp/app/shared/shared-common.module.ts +++ b/src/main/webapp/app/shared/shared-common.module.ts @@ -15,13 +15,12 @@ import { CloseCircleComponent } from 'app/shared/close-circle/close-circle.compo import { ArtemisDateRangePipe } from 'app/shared/pipes/artemis-date-range.pipe'; @NgModule({ - imports: [ArtemisSharedLibsModule], + imports: [ArtemisSharedLibsModule, TranslateDirective], declarations: [ ArtemisDatePipe, ArtemisDateRangePipe, FindLanguageFromKeyPipe, AlertOverlayComponent, - TranslateDirective, SortByDirective, SortDirective, ArtemisTranslatePipe, diff --git a/src/test/javascript/spec/component/detail-overview-list.component.spec.ts b/src/test/javascript/spec/component/detail-overview-list.component.spec.ts index cf32c04afa13..61e891b11e35 100644 --- a/src/test/javascript/spec/component/detail-overview-list.component.spec.ts +++ b/src/test/javascript/spec/component/detail-overview-list.component.spec.ts @@ -1,9 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { DetailOverviewListComponent, DetailOverviewSection, DetailType } from 'app/detail-overview-list/detail-overview-list.component'; -import { TranslatePipeMock } from '../helpers/mocks/service/mock-translate.service'; -import { MockNgbModalService } from '../helpers/mocks/service/mock-ngb-modal.service'; -import { ProgrammingExerciseGitDiffReport } from 'app/entities/hestia/programming-exercise-git-diff-report.model'; import { ModelingExerciseService } from 'app/exercises/modeling/manage/modeling-exercise.service'; import { AlertService } from 'app/core/util/alert.service'; import { MockAlertService } from '../helpers/mocks/service/mock-alert.service'; @@ -16,6 +12,7 @@ import { ProfileService } from 'app/shared/layouts/profiles/profile.service'; import { MockProfileService } from '../helpers/mocks/service/mock-profile.service'; import { MockRouter } from '../helpers/mocks/mock-router'; import { ExerciseDetailDirective } from 'app/detail-overview-list/exercise-detail.directive'; +import { TranslatePipeMock } from '../helpers/mocks/service/mock-translate.service'; const sections: DetailOverviewSection[] = [ { @@ -34,7 +31,6 @@ const sections: DetailOverviewSection[] = [ describe('DetailOverviewList', () => { let component: DetailOverviewListComponent; let fixture: ComponentFixture; - let modalService: NgbModal; let modelingService: ModelingExerciseService; let alertService: AlertService; @@ -43,7 +39,6 @@ describe('DetailOverviewList', () => { imports: [ExerciseDetailDirective], declarations: [DetailOverviewListComponent, TranslatePipeMock], providers: [ - { provide: NgbModal, useClass: MockNgbModalService }, { provide: AlertService, useClass: MockAlertService }, { provide: Router, useClass: MockRouter }, { provide: ProfileService, useClass: MockProfileService }, @@ -52,7 +47,6 @@ describe('DetailOverviewList', () => { }) .compileComponents() .then(() => { - modalService = fixture.debugElement.injector.get(NgbModal); modelingService = fixture.debugElement.injector.get(ModelingExerciseService); alertService = fixture.debugElement.injector.get(AlertService); }); @@ -99,18 +93,6 @@ describe('DetailOverviewList', () => { expect(titleDetailValue.textContent).toContain('A Title'); }); - it('should open git diff modal', () => { - const modalSpy = jest.spyOn(modalService, 'open'); - component.showGitDiff({} as unknown as ProgrammingExerciseGitDiffReport); - expect(modalSpy).toHaveBeenCalledOnce(); - }); - - it('should not open git diff modal', () => { - const modalSpy = jest.spyOn(modalService, 'open'); - component.showGitDiff(undefined); - expect(modalSpy).not.toHaveBeenCalled(); - }); - it('should download apollon Diagram', () => { const downloadSpy = jest.spyOn(modelingService, 'convertToPdf').mockReturnValue(of(new HttpResponse({ body: new Blob() }))); component.downloadApollonDiagramAsPDf({} as UMLModel, 'title'); diff --git a/src/test/javascript/spec/component/exercise-detail.directive.spec.ts b/src/test/javascript/spec/component/exercise-detail.directive.spec.ts index da435d3b9a84..50ed496b1b34 100644 --- a/src/test/javascript/spec/component/exercise-detail.directive.spec.ts +++ b/src/test/javascript/spec/component/exercise-detail.directive.spec.ts @@ -8,18 +8,23 @@ import type { LinkDetail, NotShownDetail, ProgrammingAuxiliaryRepositoryButtonsDetail, + ProgrammingDiffReportDetail, ProgrammingRepositoryButtonsDetail, + ProgrammingTestStatusDetail, ShownDetail, TextDetail, } from 'app/detail-overview-list/detail.model'; -import { TextDetailComponent } from 'app/detail-overview-list/components/text-detail.component'; -import { MockComponent } from 'ng-mocks'; +import { TextDetailComponent } from 'app/detail-overview-list/components/text-detail/text-detail.component'; +import { MockComponent, MockDirective } from 'ng-mocks'; import { DetailType } from 'app/detail-overview-list/detail-overview-list.component'; -import { DateDetailComponent } from 'app/detail-overview-list/components/date-detail.component'; -import { LinkDetailComponent } from 'app/detail-overview-list/components/link-detail.component'; -import { BooleanDetailComponent } from 'app/detail-overview-list/components/boolean-detail.component'; -import { ProgrammingRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-repository-buttons-detail.component'; -import { ProgrammingAuxiliaryRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail.component'; +import { DateDetailComponent } from 'app/detail-overview-list/components/date-detail/date-detail.component'; +import { LinkDetailComponent } from 'app/detail-overview-list/components/link-detail/link-detail.component'; +import { BooleanDetailComponent } from 'app/detail-overview-list/components/boolean-detail/boolean-detail.component'; +import { ProgrammingRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-repository-buttons-detail/programming-repository-buttons-detail.component'; +import { ProgrammingAuxiliaryRepositoryButtonsDetailComponent } from 'app/detail-overview-list/components/programming-auxiliary-repository-buttons-detail/programming-auxiliary-repository-buttons-detail.component'; +import { ProgrammingTestStatusDetailComponent } from 'app/detail-overview-list/components/programming-test-status-detail/programming-test-status-detail.component'; +import { ProgrammingDiffReportDetailComponent } from 'app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component'; +import { TranslateDirective } from 'app/shared/language/translate.directive'; @Component({ template: `
`, @@ -35,7 +40,13 @@ describe('ExerciseDetailDirective', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [TestDetailHostComponent, ExerciseDetailDirective, MockComponent(TextDetailComponent)], + declarations: [ + TestDetailHostComponent, + ExerciseDetailDirective, + MockDirective(TranslateDirective), + MockComponent(TextDetailComponent), + MockComponent(ProgrammingDiffReportDetailComponent), + ], }).compileComponents(); fixture = TestBed.createComponent(TestDetailHostComponent); @@ -86,6 +97,14 @@ describe('ExerciseDetailDirective', () => { ProgrammingAuxiliaryRepositoryButtonsDetailComponent, ); }); + + it('should create ProgrammingTestStatusDetail component', () => { + checkComponentForDetailWasCreated({ type: DetailType.ProgrammingTestStatus } as ProgrammingTestStatusDetail, ProgrammingTestStatusDetailComponent); + }); + + it('should create ProgrammingDiffReportDetail component', () => { + checkComponentForDetailWasCreated({ type: DetailType.ProgrammingDiffReport } as ProgrammingDiffReportDetail, ProgrammingDiffReportDetailComponent); + }); }); function checkComponentForDetailWasNotCreated(detailToBeChecked: NotShownDetail) { diff --git a/src/test/javascript/spec/component/programming-diff-report-detail.component.spec.ts b/src/test/javascript/spec/component/programming-diff-report-detail.component.spec.ts new file mode 100644 index 000000000000..9f1940740640 --- /dev/null +++ b/src/test/javascript/spec/component/programming-diff-report-detail.component.spec.ts @@ -0,0 +1,45 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { MockNgbModalService } from '../helpers/mocks/service/mock-ngb-modal.service'; +import { ProgrammingExerciseGitDiffReport } from 'app/entities/hestia/programming-exercise-git-diff-report.model'; +import { ProgrammingDiffReportDetailComponent } from 'app/detail-overview-list/components/programming-diff-report-detail/programming-diff-report-detail.component'; +import { TranslateService } from '@ngx-translate/core'; +import { MockTranslateService } from '../helpers/mocks/service/mock-translate.service'; +import { ProgrammingExerciseService } from 'app/exercises/programming/manage/services/programming-exercise.service'; +import { MockProgrammingExerciseService } from '../helpers/mocks/service/mock-programming-exercise.service'; +import { ProgrammingExerciseParticipationService } from 'app/exercises/programming/manage/services/programming-exercise-participation.service'; +import { MockProgrammingExerciseParticipationService } from '../helpers/mocks/service/mock-programming-exercise-participation.service'; + +describe('ProgrammingDiffReportDetailComponent', () => { + let component: ProgrammingDiffReportDetailComponent; + let fixture: ComponentFixture; + let modalService: NgbModal; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProgrammingDiffReportDetailComponent], + providers: [ + { provide: NgbModal, useClass: MockNgbModalService }, + { provide: TranslateService, useClass: MockTranslateService }, + { provide: ProgrammingExerciseService, useClass: MockProgrammingExerciseService }, + { provide: ProgrammingExerciseParticipationService, useClass: MockProgrammingExerciseParticipationService }, + ], + }).compileComponents(); + fixture = TestBed.createComponent(ProgrammingDiffReportDetailComponent); + + modalService = fixture.debugElement.injector.get(NgbModal); + component = fixture.componentInstance; + }); + + it('should open git diff modal', () => { + const modalSpy = jest.spyOn(modalService, 'open'); + component.showGitDiff({} as unknown as ProgrammingExerciseGitDiffReport); + expect(modalSpy).toHaveBeenCalledOnce(); + }); + + it('should not open git diff modal', () => { + const modalSpy = jest.spyOn(modalService, 'open'); + component.showGitDiff(undefined); + expect(modalSpy).not.toHaveBeenCalled(); + }); +}); diff --git a/src/test/javascript/spec/component/shared/confirm-entity-name.component.spec.ts b/src/test/javascript/spec/component/shared/confirm-entity-name.component.spec.ts index 2e37c1da4eeb..17625d2a357b 100644 --- a/src/test/javascript/spec/component/shared/confirm-entity-name.component.spec.ts +++ b/src/test/javascript/spec/component/shared/confirm-entity-name.component.spec.ts @@ -65,8 +65,8 @@ describe('ConfirmEntityNameComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [FormsModule, ReactiveFormsModule], - declarations: [ConfirmEntityNameComponent, TranslateDirective], + imports: [FormsModule, ReactiveFormsModule, TranslateDirective], + declarations: [ConfirmEntityNameComponent], providers: [{ provide: TranslateService, useClass: MockTranslateService }], }).compileComponents(); fixture = TestBed.createComponent(ConfirmEntityNameComponent); diff --git a/src/test/javascript/spec/component/utils/item-count.component.spec.ts b/src/test/javascript/spec/component/utils/item-count.component.spec.ts index ce6eb7b7dbab..7d04df08102d 100644 --- a/src/test/javascript/spec/component/utils/item-count.component.spec.ts +++ b/src/test/javascript/spec/component/utils/item-count.component.spec.ts @@ -9,8 +9,8 @@ describe('ItemCountComponent test', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], - declarations: [ItemCountComponent, TranslateDirective], + imports: [TranslateModule.forRoot(), TranslateDirective], + declarations: [ItemCountComponent], }) .compileComponents() .then(() => { diff --git a/src/test/javascript/spec/util/shared/translate.directive.spec.ts b/src/test/javascript/spec/util/shared/translate.directive.spec.ts index 7181c3fa07cb..c40004dc7410 100644 --- a/src/test/javascript/spec/util/shared/translate.directive.spec.ts +++ b/src/test/javascript/spec/util/shared/translate.directive.spec.ts @@ -8,14 +8,14 @@ import { TranslateDirective } from 'app/shared/language/translate.directive'; }) class TestTranslateDirectiveComponent {} -describe('TranslateDirective Tests', () => { +describe('TranslateDirective', () => { let fixture: ComponentFixture; let translateService: TranslateService; beforeEach(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], - declarations: [TranslateDirective, TestTranslateDirectiveComponent], + imports: [TranslateModule.forRoot(), TranslateDirective], + declarations: [TestTranslateDirectiveComponent], }) .compileComponents() .then(() => {