76 lines
3.0 KiB
TypeScript
76 lines
3.0 KiB
TypeScript
import { TestBed } from '@angular/core/testing';
|
|||
|
|
import { provideHttpClient } from '@angular/common/http';
|
||
|
|
import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
|
||
|
|
import { provideRouter, Router } from '@angular/router';
|
||
|
|
import { App } from './app';
|
||
|
|
import { routes } from './app.routes';
|
||
|
|
import { MetadataService } from './core/metadata.service';
|
||
|
|
|
||
|
|
const tick = () => new Promise((r) => setTimeout(r));
|
||
|
|
|
||
|
|
describe('App', () => {
|
||
|
|
let http: HttpTestingController;
|
||
|
|
let router: Router;
|
||
|
|
|
||
|
|
beforeEach(async () => {
|
||
|
|
localStorage.clear();
|
||
|
|
await TestBed.configureTestingModule({
|
||
|
|
imports: [App],
|
||
|
|
providers: [provideRouter(routes), provideHttpClient(), provideHttpClientTesting()],
|
||
|
|
}).compileComponents();
|
||
|
|
http = TestBed.inject(HttpTestingController);
|
||
|
|
router = TestBed.inject(Router);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('sin sesión redirige al login', async () => {
|
||
|
|
TestBed.createComponent(App);
|
||
|
|
const navegacion = router.navigateByUrl('/planificaciones');
|
||
|
|
await tick();
|
||
|
|
http.expectOne('/api/auth/me').flush({ message: 'Debe iniciar sesión.' }, { status: 401, statusText: 'Unauthorized' });
|
||
|
|
await navegacion;
|
||
|
|
expect(router.url).toBe('/login');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('con sesión y metadatos incompletos lleva a Configuración', async () => {
|
||
|
|
TestBed.createComponent(App);
|
||
|
|
const navegacion = router.navigateByUrl('/planificaciones');
|
||
|
|
await tick();
|
||
|
|
http.expectOne('/api/auth/me').flush({ userName: 'manager', companyDb: 'TEST', version: '1000' });
|
||
|
|
await tick();
|
||
|
|
http.expectOne('/api/metadata/status').flush({ completo: false, elementos: [] });
|
||
|
|
await navegacion;
|
||
|
|
expect(router.url).toBe('/configuracion/metadatos');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('con la verificación de metadatos desactivada entra sin consultarla', async () => {
|
||
|
|
TestBed.inject(MetadataService).fijarVerificacionAlIngresar(false);
|
||
|
|
TestBed.createComponent(App);
|
||
|
|
const navegacion = router.navigateByUrl('/planificaciones');
|
||
|
|
await tick();
|
||
|
|
http.expectOne('/api/auth/me').flush({ userName: 'manager', companyDb: 'TEST', version: '1000' });
|
||
|
|
await navegacion;
|
||
|
|
|
||
|
|
http.expectNone('/api/metadata/status');
|
||
|
|
expect(router.url).toBe('/planificaciones');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('desactivada pero con un estado ya conocido incompleto, igual lleva a Configuración', async () => {
|
||
|
|
const metadata = TestBed.inject(MetadataService);
|
||
|
|
metadata.fijarVerificacionAlIngresar(false);
|
||
|
|
metadata.estado.set({ completo: false, elementos: [] });
|
||
|
|
TestBed.createComponent(App);
|
||
|
|
const navegacion = router.navigateByUrl('/planificaciones');
|
||
|
|
await tick();
|
||
|
|
http.expectOne('/api/auth/me').flush({ userName: 'manager', companyDb: 'TEST', version: '1000' });
|
||
|
|
await navegacion;
|
||
|
|
|
||
|
|
expect(router.url).toBe('/configuracion/metadatos');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('la elección del login se recuerda en el navegador', () => {
|
||
|
|
const metadata = TestBed.inject(MetadataService);
|
||
|
|
expect(metadata.verificarAlIngresar()).toBe(true);
|
||
|
|
metadata.fijarVerificacionAlIngresar(false);
|
||
|
|
expect(localStorage.getItem('dp.verificarMetadatos')).toBe('false');
|
||
|
|
});
|
||
|
|
});
|