Affichage version

Signed-off-by: Gato <cedric@goutailler-olivier.fr>
This commit is contained in:
2026-05-31 16:06:34 +02:00
parent 9f5012e9ea
commit 11aba5dbd0
7 changed files with 288 additions and 2 deletions
+67
View File
@@ -1,10 +1,12 @@
import { signal } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { provideRouter } from '@angular/router';
import { of, throwError } from 'rxjs';
import { vi } from 'vitest';
import { KeycloakService } from '../auth/keycloak.service';
import { ProjectContextService } from '../projects/project-context.service';
import { ProjectEntity } from '../projects/projects.store';
import { VersionApiService } from '../version/version-api.service';
import { Menu } from './menu';
describe('Menu', () => {
@@ -18,6 +20,7 @@ describe('Menu', () => {
const keycloakMock = { isAuthenticated, username, logout: vi.fn(), login: vi.fn() };
const projectContextMock = { projectId, project };
const versionApiMock = { getVersion: vi.fn() };
beforeEach(async () => {
isAuthenticated.set(false);
@@ -25,6 +28,7 @@ describe('Menu', () => {
project.set(null);
keycloakMock.logout = vi.fn();
keycloakMock.login = vi.fn();
versionApiMock.getVersion = vi.fn();
await TestBed.configureTestingModule({
imports: [Menu],
@@ -32,6 +36,7 @@ describe('Menu', () => {
provideRouter([]),
{ provide: KeycloakService, useValue: keycloakMock },
{ provide: ProjectContextService, useValue: projectContextMock },
{ provide: VersionApiService, useValue: versionApiMock },
],
}).compileComponents();
@@ -73,4 +78,66 @@ describe('Menu', () => {
const hrefs = Array.from(links).map((l: any) => l.getAttribute('href') ?? '');
expect(hrefs.some((h) => h === '/projects')).toBe(true);
});
describe('info button', () => {
it('toggleInfo opens the popover and fetches API version', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: '1.2.3' }));
(component as any).toggleInfo();
expect((component as any).showInfo()).toBe(true);
expect((component as any).apiVersion()).toBe('1.2.3');
});
it('toggleInfo closes the popover when already open', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: '1.2.3' }));
(component as any).toggleInfo();
(component as any).toggleInfo();
expect((component as any).showInfo()).toBe(false);
});
it('does not call getVersion again when popover is reopened', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: '1.2.3' }));
(component as any).toggleInfo();
(component as any).toggleInfo();
(component as any).toggleInfo();
expect(versionApiMock.getVersion).toHaveBeenCalledTimes(1);
});
it('sets apiVersion to — on API error', () => {
versionApiMock.getVersion.mockReturnValue(throwError(() => new Error('network')));
(component as any).toggleInfo();
expect((component as any).apiVersion()).toBe('—');
});
it('closeInfo hides the popover', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: '1.2.3' }));
(component as any).toggleInfo();
(component as any).closeInfo();
expect((component as any).showInfo()).toBe(false);
});
it('versionMismatch is false when versions match', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: (component as any).version }));
(component as any).toggleInfo();
expect((component as any).versionMismatch()).toBe(false);
});
it('versionMismatch is true when versions differ', () => {
versionApiMock.getVersion.mockReturnValue(of({ version: '99.99.99' }));
(component as any).toggleInfo();
expect((component as any).versionMismatch()).toBe(true);
});
it('versionMismatch is false before API responds', () => {
expect((component as any).versionMismatch()).toBe(false);
});
});
});