refs #1044 Add karma.conf file and, junit reports and adjust test

oggui/translations
Alvaro Puente Mella 2024-10-24 13:04:44 +02:00
parent 87680723bc
commit 2187373c23
17 changed files with 371 additions and 66 deletions

View File

@ -0,0 +1,34 @@
module.exports = function(config) {
config.set({
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('karma-junit-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false
},
reporters: ['progress', 'kjhtml', 'junit'],
junitReporter: {
outputDir: 'test-results',
outputFile: 'ogGui-junit-report.xml',
useBrowserName: false,
},
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

View File

@ -38,6 +38,7 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"karma-junit-reporter": "^2.0.1",
"typescript": "~5.4.5"
}
},
@ -10027,6 +10028,22 @@
"integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==",
"dev": true
},
"node_modules/karma-junit-reporter": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz",
"integrity": "sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==",
"dev": true,
"dependencies": {
"path-is-absolute": "^1.0.0",
"xmlbuilder": "12.0.0"
},
"engines": {
"node": ">= 8"
},
"peerDependencies": {
"karma": ">=0.9"
}
},
"node_modules/karma-source-map-support": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz",
@ -14831,6 +14848,15 @@
}
}
},
"node_modules/xmlbuilder": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-12.0.0.tgz",
"integrity": "sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==",
"dev": true,
"engines": {
"node": ">=6.0"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",

View File

@ -40,6 +40,7 @@
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"karma-junit-reporter": "^2.0.1",
"typescript": "~5.4.5"
}
}

View File

@ -1,33 +1,61 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { TreeViewComponent } from '../../groups/shared/tree-view/tree-view.component';
import { MatDialogModule } from '@angular/material/dialog'; // <-- Import MatDialogModule
import { MatFormFieldModule } from '@angular/material/form-field'; // Import for mat-form-field
import { MatInputModule } from '@angular/material/input'; // Import for matInput
import { MatDividerModule } from '@angular/material/divider'; // Import for mat-divider
import { ToastrModule } from 'ngx-toastr'; // Import for Toastr
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { ToastrModule } from 'ngx-toastr';
import { MatTableModule } from '@angular/material/table';
import { DatePipe } from '@angular/common';
import { CommandsComponent } from './commands.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgxChartsModule } from '@swimlane/ngx-charts';
describe('TreeViewComponent', () => {
let component: TreeViewComponent;
let fixture: ComponentFixture<TreeViewComponent>;
describe('CommandsComponent', () => {
let component: CommandsComponent;
let fixture: ComponentFixture<CommandsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [TreeViewComponent],
declarations: [CommandsComponent],
imports: [
MatDialogModule, // <-- Add MatDialogModule here
MatFormFieldModule, // <-- For mat-form-field
MatInputModule, // <-- For matInput
MatDividerModule, // <-- For mat-divider
ToastrModule.forRoot() // <-- For ToastrService
HttpClientTestingModule,
ToastrModule.forRoot(),
BrowserAnimationsModule,
MatDividerModule,
MatFormFieldModule,
MatInputModule,
MatIconModule,
MatButtonModule,
MatTableModule,
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatProgressSpinnerModule,
MatDialogModule,
ReactiveFormsModule,
MatSelectModule,
NgxChartsModule,
DatePipe
],
providers: [
provideHttpClient(withInterceptorsFromDi())
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
})
.compileComponents();
}).compileComponents();
});
fixture = TestBed.createComponent(TreeViewComponent);
beforeEach(() => {
fixture = TestBed.createComponent(CommandsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@ -35,4 +63,5 @@ describe('TreeViewComponent', () => {
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -62,7 +62,7 @@ export class OrganizationalUnitTabViewComponent {
},
{
columnDef: 'available',
header: 'Aula Reservada',
header: 'Disponible remotePC',
cell: (ou: any) => `${ou.available ? 'No' : 'Si'}`
},
{

View File

@ -2,6 +2,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { OgbootStatusComponent } from './ogboot-status.component';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
describe('OgbootStatusComponent', () => {
let component: OgbootStatusComponent;
let fixture: ComponentFixture<OgbootStatusComponent>;
@ -9,7 +23,30 @@ describe('OgbootStatusComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [OgbootStatusComponent],
imports: [HttpClientTestingModule, NgxChartsModule]
imports: [
HttpClientTestingModule,
ToastrModule.forRoot(),
BrowserAnimationsModule,
MatDividerModule,
MatFormFieldModule,
MatInputModule,
MatIconModule,
MatButtonModule,
MatTableModule,
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatProgressSpinnerModule,
MatDialogModule,
ReactiveFormsModule,
MatSelectModule,
NgxChartsModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
}).compileComponents();
});

View File

@ -9,7 +9,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
import { MatPaginatorModule } from '@angular/material/paginator';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule } from '@angular/forms';
import { FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';
import { MatInputModule } from '@angular/material/input';
import { MatTableModule } from '@angular/material/table';
@ -36,8 +36,10 @@ describe('PxeBootFilesComponent', () => {
BrowserAnimationsModule,
FormsModule,
MatInputModule,
MatTableModule,
]
MatTableModule,
ReactiveFormsModule
],
providers: [NgControl]
})
.compileComponents();

View File

@ -10,12 +10,16 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner } from '@angular/material/progress-spinner';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatListModule } from '@angular/material/list';
import { MatTabsModule } from '@angular/material/tabs';
describe('AddClientsToPxeComponent', () => {
let component: AddClientsToPxeComponent;
@ -37,10 +41,17 @@ describe('AddClientsToPxeComponent', () => {
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatOptionModule,
ReactiveFormsModule,
MatSelectModule
MatProgressSpinnerModule,
MatDialogModule,
MatSelectModule,
MatTabsModule,
MatAutocompleteModule,
MatListModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
})
.compileComponents();

View File

@ -10,13 +10,16 @@ import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner } from '@angular/material/progress-spinner';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MatDialogRef } from '@angular/material/dialog';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatListModule } from '@angular/material/list';
import { MatTabsModule } from '@angular/material/tabs';
describe('ClientsComponent', () => {
let component: ClientsComponent;
@ -38,11 +41,18 @@ describe('ClientsComponent', () => {
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatOptionModule,
ReactiveFormsModule,
MatProgressSpinnerModule,
MatDialogModule,
MatSelectModule,
MatDialogRef
MatTabsModule,
MatAutocompleteModule,
MatListModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {data: {id: 123}} }
]
})
.compileComponents();

View File

@ -30,7 +30,6 @@ export class ClientsComponent {
getPxeClients(): void {
this.http.get<any>(`${this.baseUrl}/clients?template.id=${this.data.data.id}`).subscribe({
next: data => {
console.log(data['hydra:member'])
this.clients = data['hydra:member']
},
error: error => {

View File

@ -1,23 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ShowTemplateContentComponent } from './show-template-content.component';
describe('ShowTemplateContentComponent', () => {
let component: ShowTemplateContentComponent;
let fixture: ComponentFixture<ShowTemplateContentComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ShowTemplateContentComponent]
})
.compileComponents();
fixture = TestBed.createComponent(ShowTemplateContentComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -10,12 +10,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner } from '@angular/material/progress-spinner';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; // Importar tokens de MatDialog
describe('ServerInfoDialogComponent', () => {
let component: ServerInfoDialogComponent;
@ -37,10 +38,15 @@ describe('ServerInfoDialogComponent', () => {
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatProgressSpinnerModule,
MatOptionModule,
ReactiveFormsModule,
MatSelectModule
MatSelectModule,
MatDialogModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
})
.compileComponents();

View File

@ -1,6 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { StatusComponent } from './status.component';
import { MatInputModule } from '@angular/material/input';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatOptionModule } from '@angular/material/core';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { NgxChartsModule } from '@swimlane/ngx-charts';
describe('StatusComponent', () => {
let component: StatusComponent;
@ -8,7 +25,31 @@ describe('StatusComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [StatusComponent]
declarations: [StatusComponent],
imports: [
HttpClientTestingModule,
ToastrModule.forRoot(),
BrowserAnimationsModule,
MatDividerModule,
MatFormFieldModule,
MatInputModule,
MatIconModule,
MatButtonModule,
MatTableModule,
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinnerModule,
MatOptionModule,
ReactiveFormsModule,
MatSelectModule,
MatDialogModule,
NgxChartsModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
})
.compileComponents();

View File

@ -1,6 +1,20 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CreateOperativeSystemComponent } from './create-operative-system.component';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
describe('CreateOperativeSystemComponent', () => {
let component: CreateOperativeSystemComponent;
@ -8,7 +22,29 @@ describe('CreateOperativeSystemComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [CreateOperativeSystemComponent]
declarations: [CreateOperativeSystemComponent],
imports: [
HttpClientTestingModule,
ToastrModule.forRoot(),
BrowserAnimationsModule,
MatDividerModule,
MatFormFieldModule,
MatInputModule,
MatIconModule,
MatButtonModule,
MatTableModule,
MatPaginatorModule,
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatProgressSpinnerModule,
MatDialogModule,
ReactiveFormsModule
],
providers: [
{ provide: MatDialogRef, useValue: {} }, // Proporciona un mock de MatDialogRef
{ provide: MAT_DIALOG_DATA, useValue: {} } // Proporciona un mock de MAT_DIALOG_DATA si es necesario
]
})
.compileComponents();

View File

@ -1,6 +1,24 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CreateSoftwareProfileComponent } from './create-software-profile.component';
import { MatFormFieldModule } from '@angular/material/form-field';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatTabsModule } from '@angular/material/tabs';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatListModule } from '@angular/material/list';
describe('CreateSoftwareProfileComponent', () => {
let component: CreateSoftwareProfileComponent;
@ -8,7 +26,32 @@ describe('CreateSoftwareProfileComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [CreateSoftwareProfileComponent]
declarations: [CreateSoftwareProfileComponent],
imports: [
HttpClientTestingModule,
ToastrModule.forRoot(),
BrowserAnimationsModule,
MatDividerModule,
MatFormFieldModule,
MatInputModule,
MatIconModule,
MatButtonModule,
MatTableModule,
MatPaginatorModule,
MatTooltipModule,
FormsModule,
ReactiveFormsModule,
MatProgressSpinnerModule,
MatDialogModule,
MatSelectModule,
MatTabsModule,
MatAutocompleteModule,
MatListModule
],
providers: [
{ provide: MatDialogRef, useValue: {} },
{ provide: MAT_DIALOG_DATA, useValue: {} }
]
})
.compileComponents();

View File

@ -10,12 +10,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinner } from '@angular/material/progress-spinner';
import { MatProgressSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSelectModule } from '@angular/material/select';
import { MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
describe('CreateSoftwareComponent', () => {
let component: CreateSoftwareComponent;
@ -38,9 +39,14 @@ describe('CreateSoftwareComponent', () => {
MatTooltipModule,
FormsModule,
MatProgressSpinner,
MatOptionModule,
MatProgressSpinnerModule,
MatDialogModule,
ReactiveFormsModule,
MatSelectModule
],
providers: [
{ provide: MatDialogRef, useValue: {} }, // Proporciona un mock de MatDialogRef
{ provide: MAT_DIALOG_DATA, useValue: {} } // Proporciona un mock de MAT_DIALOG_DATA si es necesario
]
})
.compileComponents();

View File

@ -0,0 +1,47 @@
<?xml version="1.0"?>
<testsuite name="Chrome 123.0.0.0 (Linux x86_64)" package="" timestamp="2024-10-24T11:02:26" id="0" hostname="Ubnt" tests="31" errors="0" failures="0" time="1.13">
<properties>
<property name="browser.fullName" value="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"/>
</properties>
<testcase name="CreateOperativeSystemComponent should create" time="0.106" classname="CreateOperativeSystemComponent"/>
<testcase name="PxeBootFilesComponent should create" time="0.083" classname="PxeBootFilesComponent"/>
<testcase name="OgDhcpSubnetsComponent should create" time="0.068" classname="OgDhcpSubnetsComponent"/>
<testcase name="PXEimagesComponent should create" time="0.092" classname="PXEimagesComponent"/>
<testcase name="AddClientsToPxeComponent should create" time="0.024" classname="AddClientsToPxeComponent"/>
<testcase name="RolesComponent should create" time="0.024" classname="RolesComponent"/>
<testcase name="SoftwareProfileComponent should create" time="0.05" classname="SoftwareProfileComponent"/>
<testcase name="CreateCommandComponent should create" time="0.026" classname="CreateCommandComponent"/>
<testcase name="DashboardComponent should create the component" time="0.008" classname="DashboardComponent"/>
<testcase name="CalendarComponent should create" time="0.049" classname="CalendarComponent"/>
<testcase name="UsersComponent should create" time="0.023" classname="UsersComponent"/>
<testcase name="SoftwareComponent should create" time="0.053" classname="SoftwareComponent"/>
<testcase name="OgdhcpComponent should create" time="0.006" classname="OgdhcpComponent"/>
<testcase name="StatusComponent should create" time="0.032" classname="StatusComponent"/>
<testcase name="OperativeSystemComponent should create" time="0.04" classname="OperativeSystemComponent"/>
<testcase name="LoginComponent should create" time="0.036" classname="LoginComponent"/>
<testcase name="CommandsTaskComponent should create" time="0.041" classname="CommandsTaskComponent"/>
<testcase name="CommandsComponent should create" time="0.037" classname="CommandsComponent"/>
<testcase name="CreateSoftwareProfileComponent should create" time="0.067" classname="CreateSoftwareProfileComponent"/>
<testcase name="OgbootStatusComponent should create the component" time="0.017" classname="OgbootStatusComponent"/>
<testcase name="ClientsComponent should create" time="0.032" classname="ClientsComponent"/>
<testcase name="AdminComponent el primer botón debería tener el texto &quot;Usuarios&quot;" time="0.022" classname="AdminComponent"/>
<testcase name="AdminComponent el segundo botón debería tener el routerLink correcto" time="0.017" classname="AdminComponent"/>
<testcase name="AdminComponent el primer botón debería tener el routerLink correcto" time="0.016" classname="AdminComponent"/>
<testcase name="AdminComponent debería crear el componente" time="0.008" classname="AdminComponent"/>
<testcase name="AdminComponent el segundo botón debería tener el texto &quot;Roles&quot;" time="0.011" classname="AdminComponent"/>
<testcase name="AdminComponent debería contener dos botones" time="0.009" classname="AdminComponent"/>
<testcase name="AppComponent should create the app" time="0.009" classname="AppComponent"/>
<testcase name="CreateSoftwareComponent should create" time="0.058" classname="CreateSoftwareComponent"/>
<testcase name="PxeComponent should create the component" time="0.05" classname="PxeComponent"/>
<testcase name="ServerInfoDialogComponent should create" time="0.016" classname="ServerInfoDialogComponent"/>
<system-out>
<![CDATA[Chrome 123.0.0.0 (Linux x86_64) ERROR: 'Error fetching images', HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, headers: Map{}}, status: 0, statusText: 'Unknown Error', url: 'https://127.0.0.1:8443/og-lives?page=1&itemsPerPage=1000', ok: false, name: 'HttpErrorResponse', message: 'Http failure response for https://127.0.0.1:8443/og-lives?page=1&itemsPerPage=1000: 0 Unknown Error', error: ProgressEvent{isTrusted: true}}
,Chrome 123.0.0.0 (Linux x86_64) ERROR: 'Error fetching og lives', HttpErrorResponse{headers: HttpHeaders{normalizedNames: Map{}, lazyUpdate: null, headers: Map{}}, status: 0, statusText: 'Unknown Error', url: 'https://127.0.0.1:8443/og-lives?page=1&itemsPerPage=1000', ok: false, name: 'HttpErrorResponse', message: 'Http failure response for https://127.0.0.1:8443/og-lives?page=1&itemsPerPage=1000: 0 Unknown Error', error: ProgressEvent{isTrusted: true}}
,Chrome 123.0.0.0 (Linux x86_64) LOG: 'Selected subnet UUID:', Object{}
,Chrome 123.0.0.0 (Linux x86_64) LOG: Object{}
,Chrome 123.0.0.0 (Linux x86_64) LOG: Object{}
]]>
</system-out>
<system-err/>
</testsuite>