mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00

Now that we use initialNavigation: 'enabledBlocking', pages can appear to be loaded before some functionality is fully active. In some cases this trips up Cypress, and it tries to interact with the app too soon. We address this by introducing a new dsBrowserOnly pipe in order to defer the data-test attributes Cypress relies on to CSR.
127 lines
4.6 KiB
TypeScript
127 lines
4.6 KiB
TypeScript
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing';
|
|
import { By } from '@angular/platform-browser';
|
|
import { RouterTestingModule } from '@angular/router/testing';
|
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
|
|
import { TranslateLoaderMock } from '../mocks/translate-loader.mock';
|
|
import { SearchService } from '../../core/shared/search/search.service';
|
|
import { ViewModeSwitchComponent } from './view-mode-switch.component';
|
|
import { SearchServiceStub } from '../testing/search-service.stub';
|
|
import { ViewMode } from '../../core/shared/view-mode.model';
|
|
import { BrowserOnlyMockPipe } from '../testing/browser-only-mock.pipe';
|
|
|
|
@Component({ template: '' })
|
|
class DummyComponent {
|
|
}
|
|
|
|
describe('ViewModeSwitchComponent', () => {
|
|
let comp: ViewModeSwitchComponent;
|
|
let fixture: ComponentFixture<ViewModeSwitchComponent>;
|
|
const searchService = new SearchServiceStub();
|
|
let listButton: HTMLElement;
|
|
let gridButton: HTMLElement;
|
|
let detailButton: HTMLElement;
|
|
beforeEach(waitForAsync(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
TranslateModule.forRoot({
|
|
loader: {
|
|
provide: TranslateLoader,
|
|
useClass: TranslateLoaderMock
|
|
}
|
|
}),
|
|
RouterTestingModule.withRoutes([
|
|
{ path: 'search', component: DummyComponent, pathMatch: 'full' },
|
|
])
|
|
],
|
|
declarations: [
|
|
ViewModeSwitchComponent,
|
|
DummyComponent,
|
|
BrowserOnlyMockPipe,
|
|
],
|
|
providers: [
|
|
{ provide: SearchService, useValue: searchService },
|
|
],
|
|
}).overrideComponent(ViewModeSwitchComponent, {
|
|
set: { changeDetection: ChangeDetectionStrategy.Default }
|
|
}).compileComponents();
|
|
}));
|
|
|
|
beforeEach(() => {
|
|
fixture = TestBed.createComponent(ViewModeSwitchComponent);
|
|
comp = fixture.componentInstance; // ViewModeSwitchComponent test instance
|
|
spyOn(comp.changeViewMode, 'emit');
|
|
});
|
|
|
|
describe('', () => {
|
|
beforeEach(fakeAsync(() => {
|
|
comp.viewModeList = [ViewMode.ListElement, ViewMode.GridElement];
|
|
comp.currentMode = ViewMode.ListElement;
|
|
searchService.setViewMode(ViewMode.ListElement);
|
|
tick();
|
|
fixture.detectChanges();
|
|
const debugElements = fixture.debugElement.queryAll(By.css('a'));
|
|
listButton = debugElements[0].nativeElement;
|
|
gridButton = debugElements[1].nativeElement;
|
|
}));
|
|
|
|
it('should set list button as active when on list mode', fakeAsync(() => {
|
|
comp.switchViewTo(ViewMode.ListElement);
|
|
expect(comp.changeViewMode.emit).not.toHaveBeenCalled();
|
|
tick();
|
|
fixture.detectChanges();
|
|
expect(comp.currentMode).toBe(ViewMode.ListElement);
|
|
expect(listButton.classList).toContain('active');
|
|
expect(gridButton.classList).not.toContain('active');
|
|
|
|
}));
|
|
|
|
it('should set grid button as active when on grid mode', fakeAsync(() => {
|
|
comp.switchViewTo(ViewMode.GridElement);
|
|
expect(comp.changeViewMode.emit).toHaveBeenCalledWith(ViewMode.GridElement);
|
|
tick();
|
|
fixture.detectChanges();
|
|
expect(comp.currentMode).toBe(ViewMode.GridElement);
|
|
expect(listButton.classList).not.toContain('active');
|
|
expect(gridButton.classList).toContain('active');
|
|
}));
|
|
});
|
|
|
|
|
|
describe('', () => {
|
|
beforeEach(fakeAsync(() => {
|
|
comp.viewModeList = [ViewMode.ListElement, ViewMode.DetailedListElement];
|
|
comp.currentMode = ViewMode.ListElement;
|
|
searchService.setViewMode(ViewMode.ListElement);
|
|
tick();
|
|
fixture.detectChanges();
|
|
const debugElements = fixture.debugElement.queryAll(By.css('a'));
|
|
listButton = debugElements[0].nativeElement;
|
|
detailButton = debugElements[1].nativeElement;
|
|
}));
|
|
|
|
it('should set list button as active when on list mode', fakeAsync(() => {
|
|
comp.switchViewTo(ViewMode.ListElement);
|
|
expect(comp.changeViewMode.emit).not.toHaveBeenCalled();
|
|
tick();
|
|
fixture.detectChanges();
|
|
expect(comp.currentMode).toBe(ViewMode.ListElement);
|
|
expect(listButton.classList).toContain('active');
|
|
expect(detailButton.classList).not.toContain('active');
|
|
}));
|
|
|
|
it('should set detail button as active when on detailed mode', fakeAsync(() => {
|
|
comp.switchViewTo(ViewMode.DetailedListElement);
|
|
expect(comp.changeViewMode.emit).toHaveBeenCalledWith(ViewMode.DetailedListElement);
|
|
tick();
|
|
fixture.detectChanges();
|
|
expect(comp.currentMode).toBe(ViewMode.DetailedListElement);
|
|
expect(listButton.classList).not.toContain('active');
|
|
expect(detailButton.classList).toContain('active');
|
|
}));
|
|
});
|
|
|
|
|
|
});
|