feat(aio): redirect marketing pages to `docs` if deploy mode is `archive`
See #18287
This commit is contained in:
parent
a5801b6020
commit
42ef1be75c
|
@ -765,6 +765,97 @@ describe('AppComponent', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('archive redirection', () => {
|
||||||
|
it('should redirect to `docs` if deployment mode is `archive` and not at a docs page', () => {
|
||||||
|
createTestingModule('', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).toHaveBeenCalledWith('docs');
|
||||||
|
|
||||||
|
createTestingModule('resources', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).toHaveBeenCalledWith('docs');
|
||||||
|
|
||||||
|
createTestingModule('guide/aot-compiler', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial/toh-pt1', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('docs', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('api', 'archive');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should redirect to `docs` if deployment mode is `next` and not at a docs page', () => {
|
||||||
|
createTestingModule('', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).toHaveBeenCalledWith('docs');
|
||||||
|
|
||||||
|
createTestingModule('resources', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).toHaveBeenCalledWith('docs');
|
||||||
|
|
||||||
|
createTestingModule('guide/aot-compiler', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial/toh-pt1', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('docs', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('api', 'next');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not redirect to `docs` if deployment mode is `stable` and not at a docs page', () => {
|
||||||
|
createTestingModule('', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('resources', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('guide/aot-compiler', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('tutorial/toh-pt1', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('docs', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
createTestingModule('api', 'stable');
|
||||||
|
initializeTest();
|
||||||
|
expect(TestBed.get(LocationService).replace).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with mocked DocViewer', () => {
|
describe('with mocked DocViewer', () => {
|
||||||
|
|
|
@ -129,6 +129,11 @@ export class AppComponent implements OnInit {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.locationService.currentPath.subscribe(path => {
|
this.locationService.currentPath.subscribe(path => {
|
||||||
|
// Redirect to docs if we are in not in stable mode and are not hitting a docs page
|
||||||
|
// (i.e. we have arrived at a marketing page)
|
||||||
|
if (this.deployment.mode !== 'stable' && !/^(docs$|api$|guide|tutorial)/.test(path)) {
|
||||||
|
this.locationService.replace('docs');
|
||||||
|
}
|
||||||
if (path === this.currentPath) {
|
if (path === this.currentPath) {
|
||||||
// scroll only if on same page (most likely a change to the hash)
|
// scroll only if on same page (most likely a change to the hash)
|
||||||
this.autoScroll();
|
this.autoScroll();
|
||||||
|
|
|
@ -55,6 +55,10 @@ export class LocationService {
|
||||||
window.location.assign(url);
|
window.location.assign(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
replace(url: string) {
|
||||||
|
window.location.replace(url);
|
||||||
|
}
|
||||||
|
|
||||||
private stripSlashes(url: string) {
|
private stripSlashes(url: string) {
|
||||||
return url.replace(/^\/+/, '').replace(/\/+(\?|#|$)/, '$1');
|
return url.replace(/^\/+/, '').replace(/\/+(\?|#|$)/, '$1');
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ export class MockLocationService {
|
||||||
go = jasmine.createSpy('Location.go').and
|
go = jasmine.createSpy('Location.go').and
|
||||||
.callFake((url: string) => this.urlSubject.next(url));
|
.callFake((url: string) => this.urlSubject.next(url));
|
||||||
goExternal = jasmine.createSpy('Location.goExternal');
|
goExternal = jasmine.createSpy('Location.goExternal');
|
||||||
|
replace = jasmine.createSpy('Location.replace');
|
||||||
handleAnchorClick = jasmine.createSpy('Location.handleAnchorClick')
|
handleAnchorClick = jasmine.createSpy('Location.handleAnchorClick')
|
||||||
.and.returnValue(false); // prevent click from causing a browser navigation
|
.and.returnValue(false); // prevent click from causing a browser navigation
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue