Files
devolucion_proveedores/apps/web/src/app/app.spec.ts
T

76 lines
3.0 KiB
TypeScript
Raw Normal View History

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');
});
});