refs #1138 Fix test and advance search bug
testing/ogGui-multibranch/pipeline/head This commit is unstable
Details
testing/ogGui-multibranch/pipeline/head This commit is unstable
Details
parent
cfc23477df
commit
3f0807841b
|
@ -1,12 +1,14 @@
|
|||
import { TestBed } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing'; // Asegúrate de que está importado
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
describe('AppComponent', () => {
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterTestingModule
|
||||
RouterTestingModule,
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
declarations: [
|
||||
AppComponent
|
||||
|
@ -19,5 +21,4 @@ describe('AppComponent', () => {
|
|||
const app = fixture.componentInstance;
|
||||
expect(app).toBeTruthy();
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -3,7 +3,7 @@ import { RouterTestingModule } from '@angular/router/testing';
|
|||
import { AdminComponent } from './admin.component';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('AdminComponent', () => {
|
||||
let component: AdminComponent;
|
||||
|
@ -13,9 +13,10 @@ describe('AdminComponent', () => {
|
|||
await TestBed.configureTestingModule({
|
||||
declarations: [AdminComponent],
|
||||
imports: [
|
||||
RouterTestingModule, // Importa RouterTestingModule para manejar routerLink
|
||||
MatButtonModule, // Importa MatButtonModule para botones
|
||||
MatIconModule // Importa MatIconModule para iconos
|
||||
RouterTestingModule,
|
||||
MatButtonModule,
|
||||
MatIconModule,
|
||||
TranslateModule.forRoot()
|
||||
]
|
||||
}).compileComponents();
|
||||
});
|
||||
|
@ -23,35 +24,10 @@ describe('AdminComponent', () => {
|
|||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(AdminComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges(); // Detecta cambios para renderizar el componente
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('debería crear el componente', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('debería contener dos botones', () => {
|
||||
const buttons = fixture.debugElement.queryAll(By.css('button'));
|
||||
expect(buttons.length).toBe(2); // Verifica que hay dos botones
|
||||
});
|
||||
|
||||
it('el primer botón debería tener el texto "Usuarios"', () => {
|
||||
const firstButton = fixture.debugElement.query(By.css('.fab-button:first-child'));
|
||||
expect(firstButton.nativeElement.textContent).toContain('Usuarios'); // Verifica que el texto sea "Usuarios"
|
||||
});
|
||||
|
||||
it('el segundo botón debería tener el texto "Roles"', () => {
|
||||
const secondButton = fixture.debugElement.query(By.css('.fab-button:last-child'));
|
||||
expect(secondButton.nativeElement.textContent).toContain('Roles'); // Verifica que el texto sea "Roles"
|
||||
});
|
||||
|
||||
it('el primer botón debería tener el routerLink correcto', () => {
|
||||
const firstButton = fixture.debugElement.query(By.css('.fab-button:first-child'));
|
||||
expect(firstButton.nativeElement.getAttribute('ng-reflect-router-link')).toBe('/users'); // Verifica el routerLink
|
||||
});
|
||||
|
||||
it('el segundo botón debería tener el routerLink correcto', () => {
|
||||
const secondButton = fixture.debugElement.query(By.css('.fab-button:last-child'));
|
||||
expect(secondButton.nativeElement.getAttribute('ng-reflect-router-link')).toBe('/user-groups'); // Verifica el routerLink
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { EnvVarsComponent } from './env-vars.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../users/users/data.service';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
|
||||
describe('EnvVarsComponent', () => {
|
||||
let component: EnvVarsComponent;
|
||||
|
@ -8,9 +20,36 @@ describe('EnvVarsComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [EnvVarsComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
declarations: [EnvVarsComponent],
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
FormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
MatTableModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(EnvVarsComponent);
|
||||
component = fixture.componentInstance;
|
||||
|
|
|
@ -11,6 +11,7 @@ import { MatLabel } from '@angular/material/form-field';
|
|||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatHint } from '@angular/material/form-field';
|
||||
import { MatPaginator } from '@angular/material/paginator';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
describe('RolesComponent', () => {
|
||||
let component: RolesComponent;
|
||||
let fixture: ComponentFixture<RolesComponent>;
|
||||
|
@ -27,7 +28,8 @@ describe('RolesComponent', () => {
|
|||
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [RolesComponent],
|
||||
imports: [MatDivider, MatFormField, MatLabel, MatIcon, MatHint, MatPaginator],
|
||||
imports: [MatDivider, MatFormField, MatLabel, MatIcon, MatHint, MatPaginator,
|
||||
TranslateModule.forRoot()],
|
||||
providers: [
|
||||
{ provide: MatDialog, useValue: matDialogSpy },
|
||||
{ provide: HttpClient, useValue: httpClientSpy },
|
||||
|
|
|
@ -6,6 +6,7 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
|
|||
import { ToastrService } from 'ngx-toastr';
|
||||
import { of } from 'rxjs';
|
||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
class MockUserService {
|
||||
getUsers() {
|
||||
|
@ -29,6 +30,7 @@ describe('UsersComponent', () => {
|
|||
MatTableModule,
|
||||
MatDialogModule,
|
||||
HttpClientTestingModule,
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
{ useClass: MockUserService },
|
||||
|
|
|
@ -13,6 +13,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
|||
import { FormsModule } from '@angular/forms';
|
||||
import { CalendarComponent } from './calendar.component';
|
||||
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
||||
import { JoyrideModule, JoyrideService } from 'ngx-joyride';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('CalendarComponent', () => {
|
||||
let component: CalendarComponent;
|
||||
|
@ -34,8 +36,10 @@ describe('CalendarComponent', () => {
|
|||
MatPaginatorModule,
|
||||
MatTooltipModule,
|
||||
FormsModule,
|
||||
MatProgressSpinner
|
||||
]
|
||||
MatProgressSpinner,
|
||||
JoyrideModule.forRoot(),
|
||||
TranslateModule.forRoot(),
|
||||
],
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ import { FormsModule } from '@angular/forms';
|
|||
import { MatInputModule } from '@angular/material/input';
|
||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule, JoyrideService, JoyrideStepService } from 'ngx-joyride';
|
||||
describe('CommandsTaskComponent', () => {
|
||||
let component: CommandsTaskComponent;
|
||||
let fixture: ComponentFixture<CommandsTaskComponent>;
|
||||
|
@ -25,7 +27,9 @@ describe('CommandsTaskComponent', () => {
|
|||
MatPaginatorModule,
|
||||
FormsModule,
|
||||
MatInputModule,
|
||||
BrowserAnimationsModule
|
||||
BrowserAnimationsModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
declarations: [CommandsTaskComponent],
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
|
|
|
@ -17,6 +17,8 @@ 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';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('CommandsComponent', () => {
|
||||
let component: CommandsComponent;
|
||||
|
@ -44,7 +46,9 @@ describe('CommandsComponent', () => {
|
|||
ReactiveFormsModule,
|
||||
MatSelectModule,
|
||||
NgxChartsModule,
|
||||
DatePipe
|
||||
DatePipe,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: {} },
|
||||
|
|
|
@ -7,11 +7,13 @@ import { ToastrService, ToastrModule } from 'ngx-toastr';
|
|||
import { DataService } from '../data.service';
|
||||
import { CreateCommandComponent } from './create-command.component';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field'; // Import for mat-form-field
|
||||
import { MatInputModule } from '@angular/material/input'; // Import for matInput
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox'; // Import for mat-checkbox
|
||||
import { MatButtonModule } from '@angular/material/button'; // Import for mat-button
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('CreateCommandComponent', () => {
|
||||
let component: CreateCommandComponent;
|
||||
let fixture: ComponentFixture<CreateCommandComponent>;
|
||||
|
@ -20,14 +22,15 @@ describe('CreateCommandComponent', () => {
|
|||
await TestBed.configureTestingModule({
|
||||
declarations: [CreateCommandComponent],
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
ReactiveFormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
|
|
|
@ -1,6 +1,20 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ExecuteCommandComponent } from './execute-command.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../data.service';
|
||||
|
||||
describe('ExecuteCommandComponent', () => {
|
||||
let component: ExecuteCommandComponent;
|
||||
|
@ -8,7 +22,36 @@ describe('ExecuteCommandComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [ExecuteCommandComponent]
|
||||
declarations: [ExecuteCommandComponent],
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
FormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
MatTableModule,
|
||||
MatSelectModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
.groupLists-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
height: auto;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
|
@ -11,10 +10,6 @@
|
|||
margin: 10px;
|
||||
}
|
||||
|
||||
.search-container mat-form-field {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.card {
|
||||
flex-grow: 1;
|
||||
margin: 10px;
|
||||
|
@ -28,114 +23,10 @@
|
|||
padding: 10px;
|
||||
}
|
||||
|
||||
.unidad-card, .elements-card {
|
||||
flex: 1 1 45%;
|
||||
background-color: #fafafa;
|
||||
height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.element-content {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.details-card, .classroom-view {
|
||||
flex: 1 1 25%;
|
||||
}
|
||||
|
||||
mat-card-title {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.title-with-breadcrumb {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
mat-card-subtitle {
|
||||
font-size: 0.875rem;
|
||||
color: rgba(0, 0, 0, 0.54);
|
||||
}
|
||||
|
||||
mat-card-subtitle a {
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
color: #929292;
|
||||
}
|
||||
|
||||
mat-card-subtitle a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.groups-button-row {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.button-group button {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.item-content {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clickable-item:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.selected-item {
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
margin-left: auto;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.actions mat-icon {
|
||||
cursor: pointer;
|
||||
margin-left: 16px;
|
||||
color: #757575;
|
||||
}
|
||||
|
||||
.actions mat-icon:hover {
|
||||
color: #212121;
|
||||
}
|
||||
|
||||
.empty-list {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
mat-spinner {
|
||||
margin: 0 auto;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.classroomBtn-container {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -163,202 +54,100 @@ mat-spinner {
|
|||
width: 300px;
|
||||
}
|
||||
|
||||
.saved-filter {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 300px;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.results {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.result-card {
|
||||
width: 100%;
|
||||
max-width: 250px;
|
||||
height: auto;
|
||||
background-color: #ffffff;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
padding: 15px;
|
||||
margin: 10px 10px;
|
||||
}
|
||||
|
||||
.result-card.small-card {
|
||||
max-width: 180px;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
|
||||
.result-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
padding: 16px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
background-color: #fff;
|
||||
max-width: 300px;
|
||||
margin: 8px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.result-card.card-og-live {
|
||||
background-color: #4caf50; /* Verde */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.result-card.card-busy {
|
||||
background-color: #f44336; /* Naranja */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.result-card.card-windows {
|
||||
background-color: #2196f3; /* Azul */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.result-card.card-linux {
|
||||
background-color: #9c27b0; /* Púrpura */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.result-card.card-macos {
|
||||
background-color: #ff9800; /* Rojo */
|
||||
color: white;
|
||||
}
|
||||
|
||||
.result-card.card-off {
|
||||
background-color: #9e9e9e; /* Gris */
|
||||
color: white;
|
||||
.result-container:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.result-title {
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
margin-bottom: 5px;
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
margin: 8px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.result-content {
|
||||
padding-top: 5px;
|
||||
color: #555;
|
||||
font-size: 0.85rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.result-type, .result-ip, .result-mac, .result-status, .result-internal-units, .result-clients {
|
||||
font-size: 0.8rem;
|
||||
margin: 2px 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
.result-type,
|
||||
.result-ip,
|
||||
.result-mac,
|
||||
.result-status,
|
||||
.result-internal-units,
|
||||
.result-clients {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.result-checkbox {
|
||||
align-self: flex-start;
|
||||
margin: 0 0 5px 0;
|
||||
margin-bottom: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.result-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
|
||||
.card-og-live {
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.paginator-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-bottom: 30px;
|
||||
.card-busy {
|
||||
background-color: #f44336;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.card-windows {
|
||||
background-color: #2196f3;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.card-linux {
|
||||
background-color: #9c27b0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.card-macos {
|
||||
background-color: #ff9800;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.card-off {
|
||||
background-color: #9e9e9e;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.divider {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
mat-card {
|
||||
margin-bottom: 20px;
|
||||
margin-right: 20px;
|
||||
background-color: #fff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.red-card {
|
||||
background-color: #f35f53;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.green-card {
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.view-mode-buttons button.active {
|
||||
font-weight: bold;
|
||||
color: #3f51b5;
|
||||
}
|
||||
|
||||
.result-card-list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding: 5px;
|
||||
margin-bottom: 2px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.result-card-list mat-checkbox {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.result-card-list .result-title {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.result-card-list mat-card-content {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.result-card-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.result-list {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.result-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.card-content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.result-checkbox {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.text-content {
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.result-title,
|
||||
.result-content {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.result-content p {
|
||||
margin: 0;
|
||||
button {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.card-content-wrapper {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
.result-container {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
<div class="header-container">
|
||||
<h2 class="title">{{ 'searchTitle' | translate }}</h2>
|
||||
<button mat-icon-button color="primary" (click)="iniciarTour()">
|
||||
<mat-icon>help</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
<h2 class="title" i18n="@@searchTitle">Búsqueda avanzada</h2>
|
||||
<div class="container">
|
||||
<div class="header" joyrideStep="filterSelectionStep" text="Selecciona entre los filtros guardados para ajustar los resultados de la búsqueda.">
|
||||
<div class="header">
|
||||
<mat-form-field>
|
||||
<mat-label>{{ 'selectFilterLabel' | translate }}</mat-label>
|
||||
<mat-label i18n="@@selectFilterLabel">Seleccione filtro</mat-label>
|
||||
<mat-select (selectionChange)="loadSelectedFilter($event.value)">
|
||||
<mat-option *ngFor="let savedFilter of savedFilterNames" [value]="savedFilter">
|
||||
{{ savedFilter[0] }}
|
||||
|
@ -15,121 +10,138 @@
|
|||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
<mat-divider class="divider"></mat-divider>
|
||||
|
||||
<div class="view-mode-buttons" joyrideStep="viewModeStep" text="Elige cómo quieres ver los resultados: en cuadrícula o en lista.">
|
||||
<button mat-button (click)="changeViewMode('grid')" [class.active]="viewMode === 'grid'">
|
||||
<mat-icon>grid_view</mat-icon> {{ 'gridViewButton' | translate }}
|
||||
</button>
|
||||
<button mat-button (click)="changeViewMode('list')" [class.active]="viewMode === 'list'">
|
||||
<mat-icon>list</mat-icon> {{ 'listViewButton' | translate }}
|
||||
</button>
|
||||
<button mat-button (click)="toggleSelectAll()">
|
||||
<mat-icon>checkbox</mat-icon> Seleccionar/Deseleccionar Todos</button>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="filters" joyrideStep="filtersStep" text="Aplica filtros específicos para encontrar los resultados exactos que necesitas.">
|
||||
<div class="filters">
|
||||
<mat-form-field>
|
||||
<mat-label>{{ 'selectOptionLabel' | translate }}</mat-label>
|
||||
<mat-label i18n="@@selectOptionLabel">Selecciona una opción</mat-label>
|
||||
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">
|
||||
<mat-option value="ou">{{ 'organizationalUnitsOption' | translate }}</mat-option>
|
||||
<mat-option value="client">{{ 'clientsOption' | translate }}</mat-option>
|
||||
<mat-option value="ou" i18n="@@organizationalUnitsOption">Unidades organizativas</mat-option>
|
||||
<mat-option value="client" i18n="@@clientsOption">Clientes</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field class="example-full-width">
|
||||
<mat-label>{{ 'nameLabel' | translate }}</mat-label>
|
||||
<input matInput placeholder="{{ 'namePlaceholder' | translate }}" (input)="applyFilter()" [(ngModel)]="filterName">
|
||||
<mat-label i18n="@@nameLabel">Nombre</mat-label>
|
||||
<input matInput placeholder="Unidad organizativa" (input)="applyFilter()" [(ngModel)]="filterName"
|
||||
i18n-placeholder="@@namePlaceholder">
|
||||
</mat-form-field>
|
||||
|
||||
<div class="button-group">
|
||||
<button mat-raised-button color="primary" (click)="saveFilters()" i18n="@@saveFiltersButton" joyrideStep="saveFiltersStep" text="Guarda tus filtros seleccionados para usarlos en el futuro.">{{ 'selectAllButton' | translate }}</button>
|
||||
<button mat-raised-button color="accent" (click)="sendActions()" i18n="@@sendFiltersButton" [disabled]="selectedElements.length === 0" joyrideStep="sendActionStep" text="Envía una acción a los elementos seleccionados.">{{ 'saveFiltersButton' | translate }}</button>
|
||||
<button mat-flat-button color="primary" [disabled]="selectedElements.length === 0" (click)="onPxeBootFile()" joyrideStep="addPxeStep" text="Añade un archivo PXE a los elementos seleccionados.">{{ 'addPxeButton' | translate }}</button>
|
||||
<button mat-raised-button color="primary" [matMenuTriggerFor]="menu" [disabled]="selectedFilter1 === 'ou'">
|
||||
Asistentes
|
||||
</button>
|
||||
<mat-menu #menu="matMenu">
|
||||
<button mat-menu-item [disabled]="selectedElements.length > 1 || !selectedElements.length" (click)="onCommandSelect('partition')">Asistente de particionado</button>
|
||||
<button mat-menu-item [disabled]="selectedElements.length > 1 || !selectedElements.length" (click)="onCommandSelect('create-image')">Crear una imagen</button>
|
||||
<button mat-menu-item [disabled]="selectedElements.length > 1 || !selectedElements.length" (click)="onCommandSelect('deploy-image')">Desplegar una imagen</button>
|
||||
</mat-menu>
|
||||
</div>
|
||||
</div>
|
||||
<ng-container *ngIf="selectedFilter1 === 'ou'">
|
||||
|
||||
<div class="results" joyrideStep="resultsStep" text="Aquí verás los resultados de tu búsqueda filtrada.">
|
||||
<mat-form-field [disabled]="selectedFilter1 === 'ou'">
|
||||
<mat-label i18n="@@unitTypeLabel">Tipo de unidad</mat-label>
|
||||
<mat-select [(value)]="selectedFilter2" (selectionChange)="applyFilter()">
|
||||
<mat-option value="organizational-unit" i18n="@@organizationalUnitOption">Unidad organizativa</mat-option>
|
||||
<mat-option value="classroom-group" i18n="@@classroomsGroupOption">Grupos de aulas</mat-option>
|
||||
<mat-option value="classroom" i18n="@@classroomOption">Aulas</mat-option>
|
||||
<mat-option value="client-group" i18n="@@clientGroupOption">Grupos de clientes</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field>
|
||||
<mat-label i18n="@@floorLabel" class="temp_filter">Planta</mat-label>
|
||||
<mat-select [(value)]="selectedFilter1">
|
||||
<mat-option value="none" i18n="@@noneOption">Ninguno</mat-option>
|
||||
<mat-option value="option1" i18n="@@option1">Planta 1</mat-option>
|
||||
<mat-option value="option2" i18n="@@option2">Planta 2</mat-option>
|
||||
<mat-option value="option3" i18n="@@option3">Planta 3</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
</ng-container>
|
||||
|
||||
<!-- FILTROS CLIENTES -->
|
||||
|
||||
<ng-container *ngIf="selectedFilter1 === 'client'">
|
||||
|
||||
<mat-form-field>
|
||||
<mat-label i18n="@@selectAnotherOptionLabel" class="temp_filter">Sistema Operativo</mat-label>
|
||||
<mat-select multiple [(value)]="selectedFilterOS">
|
||||
<mat-option value="none" i18n="@@noneOption">Ninguno</mat-option>
|
||||
<mat-option value="Windows 10 Education 1803 64 bits">Windows 10 Education 1803 64 bits</mat-option>
|
||||
<mat-option value="Ubuntu 18.04.1 LTS 64 bits">Ubuntu 18.04.1 LTS 64 bits</mat-option>
|
||||
<mat-option value="Ubuntu 16.04.4 LTS 64 bits">Ubuntu 16.04.4 LTS 64 bits</mat-option>
|
||||
<mat-option value="DATA">RESTO DE OPCIONES TBI</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
|
||||
<mat-form-field>
|
||||
<mat-label i18n="@@selectStateLabel" class="temp_filter">Estado</mat-label>
|
||||
<mat-select multiple [(value)]="selectedFilterStatus">
|
||||
<mat-option value="off" i18n="@@offOption">off</mat-option>
|
||||
<mat-option value="initializing" i18n="@@initializingOption">initializing</mat-option>
|
||||
<mat-option value="oglive" i18n="@@ogliveOption">oglive</mat-option>
|
||||
<mat-option value="busy" i18n="@@busyOption">busy</mat-option>
|
||||
<mat-option value="linux" i18n="@@linuxOption">linux</mat-option>
|
||||
<mat-option value="linux_session" i18n="@@linuxSessionOption">linux_session</mat-option>
|
||||
<mat-option value="macos" i18n="@@macosOption">macos</mat-option>
|
||||
<mat-option value="windows" i18n="@@windowsOption">windows</mat-option>
|
||||
<mat-option value="windows_session" i18n="@@windowsSessionOption">windows_session</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field class="example-full-width">
|
||||
<mat-label class="temp_filter">IP</mat-label>
|
||||
<input matInput placeholder="Dírección IP" (input)="applyFilter()" i18n [(ngModel)]="filterIP">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field class="example-full-width">
|
||||
<mat-label class="temp_filter">MAC</mat-label>
|
||||
<input matInput placeholder="Dírección IP" (input)="applyFilter()" i18n [(ngModel)]="filterMAC">
|
||||
</mat-form-field>
|
||||
|
||||
</ng-container>
|
||||
|
||||
<button mat-raised-button color="primary" (click)="toggleSelectAll()">Seleccionar/Deseleccionar Todos</button>
|
||||
<button mat-raised-button color="primary" (click)="saveFilters()" i18n="@@saveFiltersButton">Guardar
|
||||
Filtros</button>
|
||||
<button mat-raised-button color="accent" (click)="sendActions()" i18n="@@sendFiltersButton"
|
||||
[disabled]="selectedElements.length === 0">Enviar Acción</button>
|
||||
<button mat-flat-button color="primary" [disabled]="selectedElements.length === 0"
|
||||
(click)="onPxeBootFile()">Añadir fichero PXE</button>
|
||||
</div>
|
||||
<div class="results">
|
||||
<ng-container *ngIf="filteredResults && filteredResults.length > 0; else noResults">
|
||||
<ng-container *ngIf="viewMode === 'grid'">
|
||||
<mat-grid-list cols="8" rowHeight="1:1" >
|
||||
<mat-grid-tile *ngFor="let result of filteredResults">
|
||||
<mat-card
|
||||
class="result-card small-card"
|
||||
[ngClass]="{
|
||||
'card-og-live': result.status === 'og-live',
|
||||
'card-busy': result.status === 'busy',
|
||||
'card-windows': result.status === 'windows' || result.status === 'windows-session',
|
||||
'card-linux': result.status === 'linux' || result.status === 'linux-session',
|
||||
<mat-grid-list cols="6">
|
||||
<mat-grid-tile *ngFor="let result of filteredResults">
|
||||
<div class="result-container" (dblclick)="onDobleClick($event, result.uuid, result.type)" [ngClass]="{
|
||||
'card-og-live': result.status === 'og-live',
|
||||
'card-busy': result.status === 'busy',
|
||||
'card-windows': result.status === 'windows' || result.status === 'windows-session',
|
||||
'card-linux': result.status === 'linux' || result.status === 'linux-session',
|
||||
'card-macos': result.status === 'macos',
|
||||
'card-off': result.status === 'off'
|
||||
}"
|
||||
matTooltip="{{ result.status }}"
|
||||
>
|
||||
<div class="card-content-wrapper">
|
||||
<mat-checkbox
|
||||
[checked]="isSelected(result.name)"
|
||||
(change)="onCheckboxChange($event, result.name, result['@id'])"
|
||||
class="result-checkbox"
|
||||
>
|
||||
</mat-checkbox>
|
||||
<div class="text-content">
|
||||
<mat-card-title class="result-title">{{ result.name }}</mat-card-title>
|
||||
<mat-card-content class="result-content">
|
||||
<p class="result-type">{{ result.type !== 'client' ? result.type : '' }}</p>
|
||||
<p class="result-ip" *ngIf="result.type === 'client'">{{ result.ip }}</p>
|
||||
<p class="result-mac" *ngIf="result.type === 'client'">{{ result.mac }}</p>
|
||||
<p class="result-status" *ngIf="result.type === 'client'">{{ result.status }}</p>
|
||||
<p *ngIf="result.type !== 'client'" class="result-internal-units">
|
||||
{{ 'internalUnits' | translate }}: {{ result.children.length }}
|
||||
</p>
|
||||
<p *ngIf="result.type !== 'client'" class="result-clients">
|
||||
{{ 'clients' | translate }}: {{ result.clients.length }}
|
||||
</p>
|
||||
</mat-card-content>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card>
|
||||
|
||||
</mat-grid-tile>
|
||||
</mat-grid-list>
|
||||
</ng-container>
|
||||
|
||||
|
||||
<ng-container *ngIf="viewMode === 'list'">
|
||||
<div class="result-list" *ngFor="let result of filteredResults">
|
||||
<mat-card class="result-card-list">
|
||||
<mat-checkbox [checked]="isSelected(result.name)" (change)="onCheckboxChange($event, result.name, result['@id'])" class="result-checkbox"></mat-checkbox>
|
||||
<mat-card-title class="result-title">{{ result.name }}</mat-card-title>
|
||||
<mat-card-content class="result-content">
|
||||
}" matTooltip="{{ result.status }}">
|
||||
<input type="checkbox" [checked]="isSelected(result.name)"
|
||||
(change)="onCheckboxChange($event, result.name, result['@id'])" class="result-checkbox" />
|
||||
<h3 class="result-title">{{ result.name }}</h3>
|
||||
<div class="result-content">
|
||||
<p class="result-type">{{ result.type !== 'client' ? result.type : '' }}</p>
|
||||
<p class="result-ip" *ngIf="result.type === 'client'">{{ result.ip }}</p>
|
||||
<p class="result-mac" *ngIf="result.type === 'client'">{{ result.mac }}</p>
|
||||
<p class="result-status" *ngIf="result.type === 'client'">{{ result.status }}</p>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
</ng-container>
|
||||
<p *ngIf="result.type !== 'client'" i18n="@@internalUnits" class="result-internal-units">
|
||||
Unidades internas: {{ result.children.length }}
|
||||
</p>
|
||||
<p *ngIf="result.type !== 'client'" i18n="@@clients" class="result-clients">
|
||||
Clientes: {{ result.clients.length }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</mat-grid-tile>
|
||||
</mat-grid-list>
|
||||
<div class="paginator-container">
|
||||
<mat-paginator [length]="length" [pageSize]="itemsPerPage" [pageIndex]="page" [pageSizeOptions]="pageSizeOptions" (page)="onPageChange($event)">
|
||||
<mat-paginator [length]="length" [pageSize]="itemsPerPage" [pageIndex]="page"
|
||||
[pageSizeOptions]="pageSizeOptions" (page)="onPageChange($event)">
|
||||
</mat-paginator>
|
||||
</div>
|
||||
</ng-container>
|
||||
|
||||
<ng-template #noResults>
|
||||
<p>{{ 'noResultsMessage' | translate }}</p>
|
||||
<p i18n="@@noResultsMessage">No hay resultados para mostrar.</p>
|
||||
</ng-template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,6 +1,22 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CreateImageComponent } from './create-image.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatPaginatorModule } from '@angular/material/paginator';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { MatTabsModule } from '@angular/material/tabs';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { of } from 'rxjs';
|
||||
import { DataService } from '../../client-tab-view/data.service';
|
||||
|
||||
describe('CreateImageComponent', () => {
|
||||
let component: CreateImageComponent;
|
||||
|
@ -8,7 +24,47 @@ describe('CreateImageComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [CreateImageComponent]
|
||||
imports: [
|
||||
CreateImageComponent,
|
||||
ReactiveFormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
MatTabsModule,
|
||||
MatTableModule,
|
||||
MatPaginatorModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: ActivatedRoute,
|
||||
useValue: {
|
||||
snapshot: {
|
||||
paramMap: {
|
||||
get: (key: string) => 'valorSimulado'
|
||||
}
|
||||
},
|
||||
params: of({ id: 'valorSimulado' })
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<div class="select-container">
|
||||
<div class="option-container">
|
||||
<mat-radio-group [(ngModel)]="selectedOption" aria-label="Selecciona una opcion">
|
||||
<mat-radio-group [(ngModel)]="selectedOption" name="selectedOption" aria-label="Selecciona una opcion">
|
||||
<mat-radio-button value="update-cache">Actualizar cache</mat-radio-button>
|
||||
<mat-radio-button value="deploy-image">Deploy imagen</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
@ -17,14 +17,14 @@
|
|||
<div class="deploy-container">
|
||||
<mat-form-field appearance="fill" class="full-width">
|
||||
<mat-label>Seleccione imagen</mat-label>
|
||||
<mat-select [(ngModel)]="selectedImage">
|
||||
<mat-select [(ngModel)]="selectedImage" name="selectedImage">
|
||||
<mat-option *ngFor="let image of images" [value]="image['@id']">{{ image.name }}</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="fill" class="full-width">
|
||||
<mat-label>Seleccione método de deploy</mat-label>
|
||||
<mat-select [(ngModel)]="selectedMethod">
|
||||
<mat-select [(ngModel)]="selectedMethod" name="selectedMethod">
|
||||
<mat-option *ngFor="let method of deployMethods" [value]="method">{{ method }}</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
@ -35,7 +35,7 @@
|
|||
<ng-container matColumnDef="select">
|
||||
<th mat-header-cell *matHeaderCellDef i18n="@@columnActions" style="text-align: start">Seleccionar partición</th>
|
||||
<td mat-cell *matCellDef="let row">
|
||||
<mat-radio-group [(ngModel)]="selectedPartition">
|
||||
<mat-radio-group [(ngModel)]="selectedPartition" name="selectedPartition">
|
||||
<mat-radio-button [value]="row">
|
||||
</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
@ -59,17 +59,17 @@
|
|||
<div *ngIf="isMethod('multicast')" class="input-group">
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Puerto</mat-label>
|
||||
<input matInput [(ngModel)]="mcastPort">
|
||||
<input matInput [(ngModel)]="mcastPort" name="mcastPort">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Dirección</mat-label>
|
||||
<input matInput [(ngModel)]="mcastIp">
|
||||
<input matInput [(ngModel)]="mcastIp" name="mcastIp">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label i18n="@@mcastModeLabel">Modo Multicast</mat-label>
|
||||
<mat-select [(ngModel)]="mcastMode">
|
||||
<mat-select [(ngModel)]="mcastMode" name="mcastMode">
|
||||
<mat-option *ngFor="let option of multicastModeOptions" [value]="option.value">
|
||||
{{ option.name }}
|
||||
</mat-option>
|
||||
|
@ -78,24 +78,24 @@
|
|||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Velocidad</mat-label>
|
||||
<input matInput [(ngModel)]="mcastSpeed">
|
||||
<input matInput [(ngModel)]="mcastSpeed" name="mcastSpeed">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Máximo Clientes</mat-label>
|
||||
<input matInput [(ngModel)]="mcastMaxClients">
|
||||
<input matInput [(ngModel)]="mcastMaxClients" name="mcastMaxClients">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Tiempo Máximo de Espera</mat-label>
|
||||
<input matInput [(ngModel)]="mcastMaxTime">
|
||||
<input matInput [(ngModel)]="mcastMaxTime" name="mcastMaxTime">
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
<div *ngIf="isMethod('torrent')" class="input-group">
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label i18n="@@p2pModeLabel">Modo P2P</mat-label>
|
||||
<mat-select [(ngModel)]="p2pMode">
|
||||
<mat-select [(ngModel)]="p2pMode" name="p2pMode">
|
||||
<mat-option *ngFor="let option of p2pModeOptions" [value]="option.value">
|
||||
{{ option.name }}
|
||||
</mat-option>
|
||||
|
@ -104,6 +104,6 @@
|
|||
|
||||
<mat-form-field appearance="fill" class="input-field">
|
||||
<mat-label>Semilla</mat-label>
|
||||
<input matInput [(ngModel)]="p2pTime">
|
||||
<input matInput [(ngModel)]="p2pTime" name="p2pTime">
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,23 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { DeployImageComponent } from './deploy-image.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { MatDividerModule } from '@angular/material/divider';
|
||||
import { MatRadioModule } from '@angular/material/radio'; // Importar MatRadioModule
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../../client-tab-view/data.service';
|
||||
import { provideRouter } from '@angular/router';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
|
||||
describe('DeployImageComponent', () => {
|
||||
let component: DeployImageComponent;
|
||||
|
@ -8,7 +25,39 @@ describe('DeployImageComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [DeployImageComponent]
|
||||
declarations: [DeployImageComponent],
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
FormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
MatTableModule,
|
||||
MatDividerModule,
|
||||
MatRadioModule,
|
||||
MatSelectModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
provideRouter([]),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
|
|
|
@ -2,11 +2,12 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|||
import { LoginComponent } from './login.component';
|
||||
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { ToastrModule } from 'ngx-toastr'; // Importa el módulo de Toastr
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; // Importa el módulo de animaciones
|
||||
import { MatFormFieldModule } from '@angular/material/form-field'; // Importa MatFormFieldModule
|
||||
import { MatInputModule } from '@angular/material/input'; // Importa MatInputModule
|
||||
import { MatIconModule } from '@angular/material/icon'; // Importa MatIconModule
|
||||
import { ToastrModule } from 'ngx-toastr';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('LoginComponent', () => {
|
||||
let component: LoginComponent;
|
||||
|
@ -21,7 +22,8 @@ describe('LoginComponent', () => {
|
|||
BrowserAnimationsModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatIconModule
|
||||
MatIconModule,
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [provideHttpClient(withInterceptorsFromDi())]
|
||||
})
|
||||
|
|
|
@ -16,6 +16,8 @@ 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 { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
describe('OgbootStatusComponent', () => {
|
||||
let component: OgbootStatusComponent;
|
||||
let fixture: ComponentFixture<OgbootStatusComponent>;
|
||||
|
@ -41,7 +43,9 @@ describe('OgbootStatusComponent', () => {
|
|||
MatDialogModule,
|
||||
ReactiveFormsModule,
|
||||
MatSelectModule,
|
||||
NgxChartsModule
|
||||
NgxChartsModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: {} },
|
||||
|
|
|
@ -12,6 +12,8 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|||
import { FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('PxeBootFilesComponent', () => {
|
||||
let component: PxeBootFilesComponent;
|
||||
|
@ -37,7 +39,9 @@ describe('PxeBootFilesComponent', () => {
|
|||
FormsModule,
|
||||
MatInputModule,
|
||||
MatTableModule,
|
||||
ReactiveFormsModule
|
||||
ReactiveFormsModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [NgControl]
|
||||
})
|
||||
|
|
|
@ -13,6 +13,8 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|||
import { FormsModule } from '@angular/forms';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('PXEimagesComponent', () => {
|
||||
let component: PXEimagesComponent;
|
||||
|
@ -39,7 +41,10 @@ describe('PXEimagesComponent', () => {
|
|||
BrowserAnimationsModule,
|
||||
FormsModule,
|
||||
MatInputModule,
|
||||
MatTableModule, ],
|
||||
MatTableModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{ provide: ToastrService, useValue: mockToastrService }
|
||||
]
|
||||
|
|
|
@ -20,6 +20,7 @@ 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';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('AddClientsToPxeComponent', () => {
|
||||
let component: AddClientsToPxeComponent;
|
||||
|
@ -47,7 +48,8 @@ describe('AddClientsToPxeComponent', () => {
|
|||
MatSelectModule,
|
||||
MatTabsModule,
|
||||
MatAutocompleteModule,
|
||||
MatListModule
|
||||
MatListModule,
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: {} },
|
||||
|
|
|
@ -28,7 +28,6 @@ export class AddClientsToPxeComponent {
|
|||
) {}
|
||||
|
||||
ngOnInit(): void {
|
||||
console.log('Selected subnet UUID:', this.data);
|
||||
this.loading = true;
|
||||
|
||||
this.loadClients();
|
||||
|
|
|
@ -20,6 +20,7 @@ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/materia
|
|||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { MatListModule } from '@angular/material/list';
|
||||
import { MatTabsModule } from '@angular/material/tabs';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('ClientsComponent', () => {
|
||||
let component: ClientsComponent;
|
||||
|
@ -47,7 +48,8 @@ describe('ClientsComponent', () => {
|
|||
MatSelectModule,
|
||||
MatTabsModule,
|
||||
MatAutocompleteModule,
|
||||
MatListModule
|
||||
MatListModule,
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: {} },
|
||||
|
|
|
@ -21,6 +21,8 @@ import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
|
|||
import { FormsModule } from '@angular/forms';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
describe('PxeComponent', () => {
|
||||
let component: PxeComponent;
|
||||
let fixture: ComponentFixture<PxeComponent>;
|
||||
|
@ -45,7 +47,9 @@ describe('PxeComponent', () => {
|
|||
MatSelect,
|
||||
MatOption,
|
||||
MatPaginator,
|
||||
ToastrModule.forRoot()
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
DatePipe,
|
||||
|
|
|
@ -14,6 +14,8 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|||
import { FormsModule } from '@angular/forms';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('OgDhcpSubnetsComponent', () => {
|
||||
let component: OgDhcpSubnetsComponent;
|
||||
|
@ -45,7 +47,9 @@ describe('OgDhcpSubnetsComponent', () => {
|
|||
BrowserAnimationsModule,
|
||||
FormsModule,
|
||||
MatInputModule,
|
||||
MatTableModule,
|
||||
MatTableModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialog, useValue: mockDialog },
|
||||
|
|
|
@ -18,6 +18,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
|||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { ToastrModule } from 'ngx-toastr';
|
||||
import { NgxChartsModule } from '@swimlane/ngx-charts';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('StatusComponent', () => {
|
||||
let component: StatusComponent;
|
||||
|
@ -44,7 +46,9 @@ describe('StatusComponent', () => {
|
|||
ReactiveFormsModule,
|
||||
MatSelectModule,
|
||||
MatDialogModule,
|
||||
NgxChartsModule
|
||||
NgxChartsModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: {} },
|
||||
|
|
|
@ -14,6 +14,8 @@ 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 { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('OperativeSystemComponent', () => {
|
||||
let component: OperativeSystemComponent;
|
||||
|
@ -35,7 +37,9 @@ describe('OperativeSystemComponent', () => {
|
|||
MatPaginatorModule,
|
||||
MatTooltipModule,
|
||||
FormsModule,
|
||||
MatProgressSpinner
|
||||
MatProgressSpinner,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CreateRepositoryComponent } from './create-repository.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../../calendar/data.service';
|
||||
|
||||
describe('CreateRepositoryComponent', () => {
|
||||
let component: CreateRepositoryComponent;
|
||||
|
@ -8,9 +20,33 @@ describe('CreateRepositoryComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [CreateRepositoryComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(CreateRepositoryComponent);
|
||||
component = fixture.componentInstance;
|
||||
|
|
|
@ -1,6 +1,21 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { MainRepositoryViewComponent } from './main-repository-view.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormBuilder, FormsModule } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../../calendar/data.service';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { provideRouter } from '@angular/router';
|
||||
|
||||
describe('MainRepositoryViewComponent', () => {
|
||||
let component: MainRepositoryViewComponent;
|
||||
|
@ -8,10 +23,39 @@ describe('MainRepositoryViewComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [MainRepositoryViewComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
declarations: [MainRepositoryViewComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
ReactiveFormsModule,
|
||||
FormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot()
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
provideRouter([]),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
],
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(MainRepositoryViewComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
|
|
|
@ -1,6 +1,24 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { RepositoriesComponent } from './repositories.component';
|
||||
import { provideHttpClient } from '@angular/common/http';
|
||||
import { provideHttpClientTesting } from '@angular/common/http/testing';
|
||||
import { ReactiveFormsModule, FormsModule, FormBuilder } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatTableModule } from '@angular/material/table';
|
||||
import { MatPaginatorModule } from '@angular/material/paginator';
|
||||
import { MatDividerModule } from '@angular/material/divider';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ToastrModule, ToastrService } from 'ngx-toastr';
|
||||
import { DataService } from '../calendar/data.service';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
describe('RepositoriesComponent', () => {
|
||||
let component: RepositoriesComponent;
|
||||
|
@ -8,9 +26,41 @@ describe('RepositoriesComponent', () => {
|
|||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [RepositoriesComponent]
|
||||
})
|
||||
.compileComponents();
|
||||
declarations: [RepositoriesComponent],
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
FormsModule,
|
||||
MatDialogModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
MatCheckboxModule,
|
||||
MatButtonModule,
|
||||
MatTableModule,
|
||||
MatPaginatorModule,
|
||||
MatDividerModule,
|
||||
MatIconModule,
|
||||
BrowserAnimationsModule,
|
||||
ToastrModule.forRoot(),
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
CommonModule
|
||||
],
|
||||
providers: [
|
||||
FormBuilder,
|
||||
ToastrService,
|
||||
DataService,
|
||||
provideHttpClient(),
|
||||
provideHttpClientTesting(),
|
||||
{
|
||||
provide: MatDialogRef,
|
||||
useValue: {}
|
||||
},
|
||||
{
|
||||
provide: MAT_DIALOG_DATA,
|
||||
useValue: {}
|
||||
}
|
||||
]
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(RepositoriesComponent);
|
||||
component = fixture.componentInstance;
|
||||
|
|
|
@ -10,24 +10,32 @@ 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 { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { ToastrModule } from 'ngx-toastr';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('SoftwareProfileComponent', () => {
|
||||
let component: SoftwareProfileComponent;
|
||||
let fixture: ComponentFixture<SoftwareProfileComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
Object.defineProperty(window, 'getComputedStyle', {
|
||||
value: () => ({
|
||||
getPropertyValue: (prop: string) => '',
|
||||
}),
|
||||
});
|
||||
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [SoftwareProfileComponent],
|
||||
imports: [
|
||||
HttpClientTestingModule,
|
||||
ToastrModule.forRoot(),
|
||||
BrowserAnimationsModule,
|
||||
NoopAnimationsModule,
|
||||
MatDividerModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
|
@ -37,10 +45,12 @@ describe('SoftwareProfileComponent', () => {
|
|||
MatPaginatorModule,
|
||||
MatTooltipModule,
|
||||
FormsModule,
|
||||
MatProgressSpinner,
|
||||
MatProgressSpinnerModule,
|
||||
MatOptionModule,
|
||||
ReactiveFormsModule,
|
||||
MatSelectModule
|
||||
MatSelectModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
|
|
@ -16,6 +16,8 @@ import { ToastrModule } from 'ngx-toastr';
|
|||
import { MatOptionModule } from '@angular/material/core';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { JoyrideModule } from 'ngx-joyride';
|
||||
|
||||
describe('SoftwareComponent', () => {
|
||||
let component: SoftwareComponent;
|
||||
|
@ -40,7 +42,9 @@ describe('SoftwareComponent', () => {
|
|||
MatProgressSpinner,
|
||||
MatOptionModule,
|
||||
ReactiveFormsModule,
|
||||
MatSelectModule
|
||||
MatSelectModule,
|
||||
TranslateModule.forRoot(),
|
||||
JoyrideModule.forRoot(),
|
||||
]
|
||||
})
|
||||
.compileComponents();
|
||||
|
|
|
@ -1,167 +1,167 @@
|
|||
<mat-nav-list>
|
||||
<mat-list-item disabled>
|
||||
<span class="user-logged" matTooltip="Bienvenido, {{username}}" matTooltipShowDelay="1000">
|
||||
<span i18n="@@welcomeUser">Bienvenido {{username}}</span>
|
||||
<span class="user-logged" matTooltip="{{ 'TOOLTIP_WELCOME_USER' | translate }}" matTooltipShowDelay="1000">
|
||||
<span>{{ 'welcomeUser' | translate:{username: username} }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-divider></mat-divider>
|
||||
|
||||
<mat-list-item routerLink="/groups" matTooltip="Gestionar grupos de usuarios" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/groups" matTooltip="{{ 'TOOLTIP_GROUPS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">apartment</mat-icon>
|
||||
<span i18n="@@groups">Grupos</span>
|
||||
<span>{{ 'groups' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item (click)="toggleCommandSub()" matTooltip="Ver y ejecutar acciones predefinidas" matTooltipShowDelay="1000">
|
||||
<mat-list-item (click)="toggleCommandSub()" matTooltip="{{ 'TOOLTIP_ACTIONS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">playlist_play</mat-icon>
|
||||
<span i18n="@@actions">Acciones</span>
|
||||
<span>{{ 'actions' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<!-- Submenu items for commands -->
|
||||
<mat-nav-list *ngIf="showCommandSub" style="padding-left: 20px;">
|
||||
<mat-list-item routerLink="/commands" matTooltip="Lista de comandos disponibles" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/commands" matTooltip="{{ 'TOOLTIP_COMMANDS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">chevron_right</mat-icon>
|
||||
<span i18n="@@gallery">Comandos</span>
|
||||
<span>{{ 'commands' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/commands-groups" matTooltip="Gestionar grupos de comandos" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/commands-groups" matTooltip="{{ 'TOOLTIP_COMMAND_GROUPS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">chevron_right</mat-icon>
|
||||
<span i18n="@@gallery">Grupos</span>
|
||||
<span>{{ 'commandGroups' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/commands-task" matTooltip="Ver y gestionar tareas programadas" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/commands-task" matTooltip="{{ 'TOOLTIP_TASKS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">chevron_right</mat-icon>
|
||||
<span i18n="@@gallery">Tareas</span>
|
||||
<span>{{ 'tasks' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
||||
<mat-list-item (click)="toggleOgDhcpSub()" matTooltip="Configurar y administrar DHCP" matTooltipShowDelay="1000">
|
||||
<mat-list-item (click)="toggleOgDhcpSub()" matTooltip="{{ 'TOOLTIP_DHCP' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">settings_ethernet</mat-icon>
|
||||
<span i18n="@@images">DHCP</span>
|
||||
<span>{{ 'dhcp' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<!-- Submenu items ogdhcp -->
|
||||
<!-- Submenu items for DHCP -->
|
||||
<mat-nav-list *ngIf="showOgDhcpSub" style="padding-left: 20px;">
|
||||
<mat-list-item routerLink="/ogdhcp-status" matTooltip="Estado actual del servicio DHCP" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/ogdhcp-status" matTooltip="{{ 'TOOLTIP_DHCP_STATUS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">analytics</mat-icon>
|
||||
<span i18n="@@gallery">Estado</span>
|
||||
<span>{{ 'status' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/subnets" matTooltip="Gestionar y crea subredes" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/subnets" matTooltip="{{ 'TOOLTIP_SUBNETS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">lan</mat-icon>
|
||||
<span i18n="@@gallery">Subredes</span>
|
||||
<span>{{ 'subnets' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
||||
<mat-list-item (click)="toggleOgBootSub()" matTooltip="Configurar y administrar opciones de arranque" matTooltipShowDelay="1000">
|
||||
<mat-list-item (click)="toggleOgBootSub()" matTooltip="{{ 'TOOLTIP_BOOT' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">desktop_windows</mat-icon>
|
||||
<span i18n="@@images">Boot</span>
|
||||
<span>{{ 'boot' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<!-- Submenu items for ogBoot -->
|
||||
<!-- Submenu items for Boot -->
|
||||
<mat-nav-list *ngIf="showOgBootSub" style="padding-left: 20px;">
|
||||
<mat-list-item routerLink="/ogboot-status" matTooltip="Estado del servicio de arranque" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/ogboot-status" matTooltip="{{ 'TOOLTIP_BOOT_STATUS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">analytics</mat-icon>
|
||||
<span i18n="@@gallery">Estado</span>
|
||||
<span>{{ 'status' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/pxe-images" matTooltip="Ver imágenes disponibles para arranque PXE" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/pxe-images" matTooltip="{{ 'TOOLTIP_PXE_IMAGES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">album</mat-icon>
|
||||
<span i18n="@@gallery">ogLive</span>
|
||||
<span>{{ 'ogLive' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/pxe" matTooltip="Gestionar plantillas de arranque PXE" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/pxe" matTooltip="{{ 'TOOLTIP_PXE_TEMPLATES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">assignment</mat-icon>
|
||||
<span i18n="@@upload">Plantillas PXE</span>
|
||||
<span>{{ 'pxeTemplates' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/pxe-boot-file" matTooltip="Configurar archivos de arranque PXE" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/pxe-boot-file" matTooltip="{{ 'TOOLTIP_PXE_BOOT_FILES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">save</mat-icon>
|
||||
<span i18n="@@upload">Arranque PXE</span>
|
||||
<span>{{ 'pxeBootFiles' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
||||
<mat-list-item routerLink="/calendars" matTooltip="Gestionar calendarios de remotePC" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/calendars" matTooltip="{{ 'TOOLTIP_CALENDARS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">calendar_month</mat-icon>
|
||||
<span i18n="@@calendars">Calendarios</span>
|
||||
<span>{{ 'calendars' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item (click)="toggleSoftwareSub()" matTooltip="Administrar configuraciones de software" matTooltipShowDelay="1000">
|
||||
<mat-list-item (click)="toggleSoftwareSub()" matTooltip="{{ 'TOOLTIP_SOFTWARE' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">terminal</mat-icon>
|
||||
<span i18n="@@images">Software</span>
|
||||
<span>{{ 'software' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<!-- Submenu items ogdhcp -->
|
||||
<!-- Submenu items for Software -->
|
||||
<mat-nav-list *ngIf="showSoftwareSub" style="padding-left: 20px;">
|
||||
<mat-list-item routerLink="/software" matTooltip="Ver lista de software disponible" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/software" matTooltip="{{ 'TOOLTIP_SOFTWARE_LIST' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">list</mat-icon>
|
||||
<span i18n="@@gallery">Listado</span>
|
||||
<span>{{ 'softwareList' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/software-profiles" matTooltip="Gestionar perfiles de software" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/software-profiles" matTooltip="{{ 'TOOLTIP_SOFTWARE_PROFILES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">folder_shared</mat-icon>
|
||||
<span i18n="@@gallery">Perfiles</span>
|
||||
<span>{{ 'softwareProfiles' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
<mat-list-item routerLink="/operative-systems" matTooltip="Configurar sistemas operativos" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/operative-systems" matTooltip="{{ 'TOOLTIP_OPERATIVE_SYSTEMS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">terminal</mat-icon>
|
||||
<span i18n="@@gallery">S. Operativos</span>
|
||||
<span>{{ 'operativeSystems' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
||||
<mat-list-item routerLink="/images" matTooltip="Gestionar imágenes del sistema" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/images" matTooltip="{{ 'TOOLTIP_IMAGES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">photo</mat-icon>
|
||||
<span i18n="@@images">Imágenes</span>
|
||||
<span>{{ 'images' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item routerLink="/repositories" matTooltip="Ver y gestionar repositorios de software" matTooltipShowDelay="1000">
|
||||
<mat-list-item routerLink="/repositories" matTooltip="{{ 'TOOLTIP_REPOSITORIES' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">warehouse</mat-icon>
|
||||
<span i18n="@@repositories">Repositorios</span>
|
||||
<span>{{ 'repositories' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item class="disabled" matTooltip="Gestión de menús (opción deshabilitada)" matTooltipShowDelay="1000">
|
||||
<mat-list-item class="disabled" matTooltip="{{ 'TOOLTIP_MENUS' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">list</mat-icon>
|
||||
<span i18n="@@menus">Menús</span>
|
||||
<span>{{ 'menus' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item class="disabled" matTooltip="Función de búsqueda (opción deshabilitada)" matTooltipShowDelay="1000">
|
||||
<mat-list-item class="disabled" matTooltip="{{ 'TOOLTIP_SEARCH' | translate }}" matTooltipShowDelay="1000">
|
||||
<span class="entry">
|
||||
<mat-icon class="icon">search</mat-icon>
|
||||
<span i18n="@@search">Buscar</span>
|
||||
<span>{{ 'search' | translate }}</span>
|
||||
</span>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
|
|
@ -375,5 +375,48 @@
|
|||
"selectUnitDescription": "Select the organizational unit to which the clients belong.",
|
||||
"selectClassDescription": "Select the classroom to which the clients belong.",
|
||||
"applyToAllDescription": "Select a template to apply to all clients.",
|
||||
"saveButtonDescription": "Save the changes made."
|
||||
"saveButtonDescription": "Save the changes made.",
|
||||
"welcomeUser": "Welcome {{username}}",
|
||||
"TOOLTIP_WELCOME_USER": "Welcome, {{username}}",
|
||||
"groups": "Groups",
|
||||
"TOOLTIP_GROUPS": "Manage user groups",
|
||||
"actions": "Actions",
|
||||
"TOOLTIP_ACTIONS": "View and execute predefined actions",
|
||||
"commands": "Commands",
|
||||
"TOOLTIP_COMMANDS": "List of available commands",
|
||||
"commandGroups": "Groups",
|
||||
"TOOLTIP_COMMAND_GROUPS": "Manage command groups",
|
||||
"tasks": "Tasks",
|
||||
"TOOLTIP_TASKS": "View and manage scheduled tasks",
|
||||
"dhcp": "DHCP",
|
||||
"TOOLTIP_DHCP": "Configure and manage DHCP",
|
||||
"TOOLTIP_DHCP_STATUS": "Current status of the DHCP service",
|
||||
"subnets": "Subnets",
|
||||
"TOOLTIP_SUBNETS": "Manage and create subnets",
|
||||
"boot": "Boot",
|
||||
"TOOLTIP_BOOT": "Configure and manage boot options",
|
||||
"ogLive": "ogLive",
|
||||
"TOOLTIP_PXE_IMAGES": "View available PXE boot images",
|
||||
"pxeTemplates": "PXE Templates",
|
||||
"TOOLTIP_PXE_TEMPLATES": "Manage PXE boot templates",
|
||||
"pxeBootFiles": "PXE Boot Files",
|
||||
"TOOLTIP_PXE_BOOT_FILES": "Configure PXE boot files",
|
||||
"calendars": "Calendars",
|
||||
"TOOLTIP_CALENDARS": "Manage remotePC calendars",
|
||||
"software": "Software",
|
||||
"TOOLTIP_SOFTWARE": "Manage software configurations",
|
||||
"softwareList": "List",
|
||||
"TOOLTIP_SOFTWARE_LIST": "View list of available software",
|
||||
"softwareProfiles": "Profiles",
|
||||
"TOOLTIP_SOFTWARE_PROFILES": "Manage software profiles",
|
||||
"operativeSystems": "Operating Systems",
|
||||
"TOOLTIP_OPERATIVE_SYSTEMS": "Configure operating systems",
|
||||
"images": "Images",
|
||||
"TOOLTIP_IMAGES": "Manage system images",
|
||||
"repositories": "Repositories",
|
||||
"TOOLTIP_REPOSITORIES": "View and manage software repositories",
|
||||
"menus": "Menus",
|
||||
"TOOLTIP_MENUS": "Menu management (option disabled)",
|
||||
"search": "Search",
|
||||
"TOOLTIP_SEARCH": "Search function (option disabled)"
|
||||
}
|
||||
|
|
|
@ -376,5 +376,48 @@
|
|||
"selectUnitDescription": "Selecciona la unidad organizativa a la que pertenecen los clientes.",
|
||||
"selectClassDescription": "Selecciona el aula a la que pertenecen los clientes.",
|
||||
"applyToAllDescription": "Selecciona una plantilla para aplicar a todos los clientes.",
|
||||
"saveButtonDescription": "Guarda los cambios realizados."
|
||||
"saveButtonDescription": "Guarda los cambios realizados.",
|
||||
"welcomeUser": "Bienvenido {{username}}",
|
||||
"TOOLTIP_WELCOME_USER": "Bienvenido, {{username}}",
|
||||
"groups": "Grupos",
|
||||
"TOOLTIP_GROUPS": "Gestionar grupos de usuarios",
|
||||
"actions": "Acciones",
|
||||
"TOOLTIP_ACTIONS": "Ver y ejecutar acciones predefinidas",
|
||||
"commands": "Comandos",
|
||||
"TOOLTIP_COMMANDS": "Lista de comandos disponibles",
|
||||
"commandGroups": "Grupos",
|
||||
"TOOLTIP_COMMAND_GROUPS": "Gestionar grupos de comandos",
|
||||
"tasks": "Tareas",
|
||||
"TOOLTIP_TASKS": "Ver y gestionar tareas programadas",
|
||||
"dhcp": "DHCP",
|
||||
"TOOLTIP_DHCP": "Configurar y administrar DHCP",
|
||||
"TOOLTIP_DHCP_STATUS": "Estado actual del servicio DHCP",
|
||||
"subnets": "Subredes",
|
||||
"TOOLTIP_SUBNETS": "Gestionar y crear subredes",
|
||||
"boot": "Boot",
|
||||
"TOOLTIP_BOOT": "Configurar y administrar opciones de arranque",
|
||||
"ogLive": "ogLive",
|
||||
"TOOLTIP_PXE_IMAGES": "Ver imágenes disponibles para arranque PXE",
|
||||
"pxeTemplates": "Plantillas PXE",
|
||||
"TOOLTIP_PXE_TEMPLATES": "Gestionar plantillas de arranque PXE",
|
||||
"pxeBootFiles": "Arranque PXE",
|
||||
"TOOLTIP_PXE_BOOT_FILES": "Configurar archivos de arranque PXE",
|
||||
"calendars": "Calendarios",
|
||||
"TOOLTIP_CALENDARS": "Gestionar calendarios de remotePC",
|
||||
"software": "Software",
|
||||
"TOOLTIP_SOFTWARE": "Administrar configuraciones de software",
|
||||
"softwareList": "Listado",
|
||||
"TOOLTIP_SOFTWARE_LIST": "Ver lista de software disponible",
|
||||
"softwareProfiles": "Perfiles",
|
||||
"TOOLTIP_SOFTWARE_PROFILES": "Gestionar perfiles de software",
|
||||
"operativeSystems": "S. Operativos",
|
||||
"TOOLTIP_OPERATIVE_SYSTEMS": "Configurar sistemas operativos",
|
||||
"images": "Imágenes",
|
||||
"TOOLTIP_IMAGES": "Gestionar imágenes del sistema",
|
||||
"repositories": "Repositorios",
|
||||
"TOOLTIP_REPOSITORIES": "Ver y gestionar repositorios de software",
|
||||
"menus": "Menús",
|
||||
"TOOLTIP_MENUS": "Gestión de menús (opción deshabilitada)",
|
||||
"search": "Buscar",
|
||||
"TOOLTIP_SEARCH": "Función de búsqueda (opción deshabilitada)"
|
||||
}
|
||||
|
|
|
@ -1,46 +1,535 @@
|
|||
<?xml version="1.0"?>
|
||||
<testsuite name="Chrome Headless 130.0.0.0 (Linux x86_64)" package="" timestamp="2024-10-29T10:46:18" id="0" hostname="alvaro-Latitude-3420" tests="31" errors="0" failures="0" time="0.938">
|
||||
<testsuite name="Chrome Headless 131.0.0.0 (Linux x86_64)" package="" timestamp="2024-11-19T13:35:34" id="0" hostname="alvaro-Latitude-3420" tests="38" errors="0" failures="32" time="0.486">
|
||||
<properties>
|
||||
<property name="browser.fullName" value="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.0.0 Safari/537.36"/>
|
||||
<property name="browser.fullName" value="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/131.0.0.0 Safari/537.36"/>
|
||||
</properties>
|
||||
<testcase name="CreateSoftwareComponent should create" time="0.127" classname="CreateSoftwareComponent"/>
|
||||
<testcase name="UsersComponent should create" time="0.039" classname="UsersComponent"/>
|
||||
<testcase name="CommandsComponent should create" time="0.054" classname="CommandsComponent"/>
|
||||
<testcase name="AppComponent should create the app" time="0.004" classname="AppComponent"/>
|
||||
<testcase name="AddClientsToPxeComponent should create" time="0.031" classname="AddClientsToPxeComponent"/>
|
||||
<testcase name="CreateCommandComponent should create" time="0.029" classname="CreateCommandComponent"/>
|
||||
<testcase name="OgbootStatusComponent should create the component" time="0.03" classname="OgbootStatusComponent"/>
|
||||
<testcase name="ServerInfoDialogComponent should create" time="0.016" classname="ServerInfoDialogComponent"/>
|
||||
<testcase name="AdminComponent debería crear el componente" time="0.015" classname="AdminComponent"/>
|
||||
<testcase name="AdminComponent el segundo botón debería tener el texto "Roles"" time="0.008" classname="AdminComponent"/>
|
||||
<testcase name="AdminComponent el primer botón debería tener el texto "Usuarios"" time="0.006" classname="AdminComponent"/>
|
||||
<testcase name="AdminComponent debería contener dos botones" time="0.005" classname="AdminComponent"/>
|
||||
<testcase name="AdminComponent el segundo botón debería tener el routerLink correcto" time="0.007" classname="AdminComponent"/>
|
||||
<testcase name="AdminComponent el primer botón debería tener el routerLink correcto" time="0.005" classname="AdminComponent"/>
|
||||
<testcase name="DashboardComponent should create the component" time="0.004" classname="DashboardComponent"/>
|
||||
<testcase name="PXEimagesComponent should create" time="0.071" classname="PXEimagesComponent"/>
|
||||
<testcase name="CalendarComponent should create" time="0.033" classname="CalendarComponent"/>
|
||||
<testcase name="OgDhcpSubnetsComponent should create" time="0.054" classname="OgDhcpSubnetsComponent"/>
|
||||
<testcase name="OgdhcpComponent should create" time="0.005" classname="OgdhcpComponent"/>
|
||||
<testcase name="StatusComponent should create" time="0.017" classname="StatusComponent"/>
|
||||
<testcase name="CreateOperativeSystemComponent should create" time="0.015" classname="CreateOperativeSystemComponent"/>
|
||||
<testcase name="LoginComponent should create" time="0.027" classname="LoginComponent"/>
|
||||
<testcase name="SoftwareComponent should create" time="0.04" classname="SoftwareComponent"/>
|
||||
<testcase name="OperativeSystemComponent should create" time="0.032" classname="OperativeSystemComponent"/>
|
||||
<testcase name="CreateSoftwareProfileComponent should create" time="0.105" classname="CreateSoftwareProfileComponent"/>
|
||||
<testcase name="SoftwareProfileComponent should create" time="0.031" classname="SoftwareProfileComponent"/>
|
||||
<testcase name="ClientsComponent should create" time="0.014" classname="ClientsComponent"/>
|
||||
<testcase name="PxeComponent should create the component" time="0.034" classname="PxeComponent"/>
|
||||
<testcase name="PxeBootFilesComponent should create" time="0.036" classname="PxeBootFilesComponent"/>
|
||||
<testcase name="RolesComponent should create" time="0.015" classname="RolesComponent"/>
|
||||
<testcase name="CommandsTaskComponent should create" time="0.029" classname="CommandsTaskComponent"/>
|
||||
<testcase name="CreateOperativeSystemComponent should create" time="0.071" classname="CreateOperativeSystemComponent"/>
|
||||
<testcase name="AddClientsToPxeComponent should create" time="0.016" classname="AddClientsToPxeComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AddClientsToPxeComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AddClientsToPxeComponent_Template (ng:///AddClientsToPxeComponent.js:70:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="ClientsComponent should create" time="0.011" classname="ClientsComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'ClientsComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at ClientsComponent_Template (ng:///ClientsComponent.js:77:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="SoftwareComponent should create" time="0.019" classname="SoftwareComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.SoftwareComponent_Factory [as factory] (ng:///SoftwareComponent/ɵfac.js:6:52)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="OgDhcpSubnetsComponent should create" time="0.02" classname="OgDhcpSubnetsComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.OgDhcpSubnetsComponent_Factory [as factory] (ng:///OgDhcpSubnetsComponent/ɵfac.js:6:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="CreateCommandComponent should create" time="0.012" classname="CreateCommandComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'CreateCommandComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at CreateCommandComponent_Template (ng:///CreateCommandComponent.js:15:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="RepositoriesComponent should create" time="0.012" classname="RepositoriesComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[HttpClient -> HttpClient]:
|
||||
NullInjectorError: No provider for HttpClient!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'HttpClient', 'HttpClient' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for HttpClient!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.RepositoriesComponent_Factory [as factory] (ng:///RepositoriesComponent/ɵfac.js:5:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="PXEimagesComponent should create" time="0.024" classname="PXEimagesComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.PXEimagesComponent_Factory [as factory] (ng:///PXEimagesComponent/ɵfac.js:6:52)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="ExecuteCommandComponent should create" time="0.008" classname="ExecuteCommandComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[MatDialogRef -> MatDialogRef]:
|
||||
NullInjectorError: No provider for MatDialogRef!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'MatDialogRef', 'MatDialogRef' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for MatDialogRef!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.ExecuteCommandComponent_Factory [as factory] (ng:///ExecuteCommandComponent/ɵfac.js:4:51)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="OperativeSystemComponent should create" time="0.012" classname="OperativeSystemComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.OperativeSystemComponent_Factory [as factory] (ng:///OperativeSystemComponent/ɵfac.js:6:52)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="PxeBootFilesComponent should create" time="0.015" classname="PxeBootFilesComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.PxeBootFilesComponent_Factory [as factory] (ng:///PxeBootFilesComponent/ɵfac.js:6:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="ServerInfoDialogComponent should create" time="0.008" classname="ServerInfoDialogComponent"/>
|
||||
<testcase name="EnvVarsComponent should create" time="0.005" classname="EnvVarsComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[HttpClient -> HttpClient]:
|
||||
NullInjectorError: No provider for HttpClient!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'HttpClient', 'HttpClient' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for HttpClient!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.EnvVarsComponent_Factory [as factory] (ng:///EnvVarsComponent/ɵfac.js:4:44)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="StatusComponent should create" time="0.013" classname="StatusComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.StatusComponent_Factory [as factory] (ng:///StatusComponent/ɵfac.js:5:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="SoftwareProfileComponent should create" time="0.011" classname="SoftwareProfileComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.SoftwareProfileComponent_Factory [as factory] (ng:///SoftwareProfileComponent/ɵfac.js:6:52)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="CalendarComponent should create" time="0.013" classname="CalendarComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.CalendarComponent_Factory [as factory] (ng:///CalendarComponent/ɵfac.js:6:52)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent el primer botón debería tener el routerLink correcto" time="0.008" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent el segundo botón debería tener el routerLink correcto" time="0.003" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent debería contener dos botones" time="0.002" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent debería crear el componente" time="0.002" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent el segundo botón debería tener el texto "Roles"" time="0.002" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AdminComponent el primer botón debería tener el texto "Usuarios"" time="0.002" classname="AdminComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'AdminComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at AdminComponent_Template (ng:///AdminComponent.js:13:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="AppComponent should create the app" time="0.002" classname="AppComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[TranslateService -> TranslateStore -> TranslateStore]:
|
||||
NullInjectorError: No provider for TranslateStore!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'TranslateService', 'TranslateStore', 'TranslateStore' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for TranslateStore!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at injectInjectorOnly (http://localhost:9876/_karma_webpack_/vendor.js:76056:36)
|
||||
at Module.ɵɵinject (http://localhost:9876/_karma_webpack_/vendor.js:76062:59)
|
||||
at Object.TranslateService_Factory [as factory] (http://localhost:9876/_karma_webpack_/vendor.js:163478:94)
|
||||
at http://localhost:9876/_karma_webpack_/vendor.js:78093:35
|
||||
at runInInjectorProfilerContext (http://localhost:9876/_karma_webpack_/vendor.js:75827:5)
|
||||
at R3Injector.hydrate (http://localhost:9876/_karma_webpack_/vendor.js:78092:11)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77966:23)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="UsersComponent should create" time="0.008" classname="UsersComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'UsersComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at UsersComponent_Template (ng:///UsersComponent.js:133:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="PxeComponent should create the component" time="0.019" classname="PxeComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.PxeComponent_Factory [as factory] (ng:///PxeComponent/ɵfac.js:6:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="DeployImageComponent should create" time="0.017" classname="DeployImageComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[HttpClient -> HttpClient]:
|
||||
NullInjectorError: No provider for HttpClient!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'HttpClient', 'HttpClient' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for HttpClient!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.DeployImageComponent_Factory [as factory] (ng:///DeployImageComponent/ɵfac.js:4:48)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="OgdhcpComponent should create" time="0.003" classname="OgdhcpComponent"/>
|
||||
<testcase name="CreateSoftwareProfileComponent should create" time="0.054" classname="CreateSoftwareProfileComponent"/>
|
||||
<testcase name="OgbootStatusComponent should create the component" time="0.013" classname="OgbootStatusComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.OgbootStatusComponent_Factory [as factory] (ng:///OgbootStatusComponent/ɵfac.js:5:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="LoginComponent should create" time="0.009" classname="LoginComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[TranslateService -> TranslateStore -> TranslateStore]:
|
||||
NullInjectorError: No provider for TranslateStore!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'TranslateService', 'TranslateStore', 'TranslateStore' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for TranslateStore!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at injectInjectorOnly (http://localhost:9876/_karma_webpack_/vendor.js:76056:36)
|
||||
at Module.ɵɵinject (http://localhost:9876/_karma_webpack_/vendor.js:76062:59)
|
||||
at Object.TranslateService_Factory [as factory] (http://localhost:9876/_karma_webpack_/vendor.js:163478:94)
|
||||
at http://localhost:9876/_karma_webpack_/vendor.js:78093:35
|
||||
at runInInjectorProfilerContext (http://localhost:9876/_karma_webpack_/vendor.js:75827:5)
|
||||
at R3Injector.hydrate (http://localhost:9876/_karma_webpack_/vendor.js:78092:11)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77966:23)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="RolesComponent should create" time="0.009" classname="RolesComponent">
|
||||
<failure type="">Error: NG0302: The pipe 'translate' could not be found in the 'RolesComponent' component. Verify that it is declared or imported in this module. Find more at https://angular.dev/errors/NG0302
|
||||
error properties: Object({ code: -302 })
|
||||
at getPipeDef (http://localhost:9876/_karma_webpack_/vendor.js:103465:11)
|
||||
at ɵɵpipe (http://localhost:9876/_karma_webpack_/vendor.js:103408:15)
|
||||
at RolesComponent_Template (ng:///RolesComponent.js:138:9)
|
||||
at executeTemplate (http://localhost:9876/_karma_webpack_/vendor.js:86203:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87365:7)
|
||||
at renderComponent (http://localhost:9876/_karma_webpack_/vendor.js:87311:3)
|
||||
at renderChildComponents (http://localhost:9876/_karma_webpack_/vendor.js:87411:5)
|
||||
at renderView (http://localhost:9876/_karma_webpack_/vendor.js:87393:7)
|
||||
at ComponentFactory.create (http://localhost:9876/_karma_webpack_/vendor.js:91476:9)
|
||||
at initComponent (http://localhost:9876/_karma_webpack_/vendor.js:116898:45)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="CreateSoftwareComponent should create" time="0.017" classname="CreateSoftwareComponent"/>
|
||||
<testcase name="CommandsComponent should create" time="0.012" classname="CommandsComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.CommandsComponent_Factory [as factory] (ng:///CommandsComponent/ɵfac.js:6:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="CreateRepositoryComponent should create" time="0.005" classname="CreateRepositoryComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[HttpClient -> HttpClient]:
|
||||
NullInjectorError: No provider for HttpClient!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'HttpClient', 'HttpClient' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for HttpClient!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.CreateRepositoryComponent_Factory [as factory] (ng:///CreateRepositoryComponent/ɵfac.js:5:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="DashboardComponent should create the component" time="0.003" classname="DashboardComponent"/>
|
||||
<testcase name="CommandsTaskComponent should create" time="0.011" classname="CommandsTaskComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[JoyrideService -> JoyrideService]:
|
||||
NullInjectorError: No provider for JoyrideService!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'JoyrideService', 'JoyrideService' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for JoyrideService!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.CommandsTaskComponent_Factory [as factory] (ng:///CommandsTaskComponent/ɵfac.js:6:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="CreateImageComponent should create" time="0.001" classname="CreateImageComponent">
|
||||
<failure type="">Error: Unexpected "CreateImageComponent" found in the "declarations" array of the "TestBed.configureTestingModule" call, "CreateImageComponent" is marked as standalone and can't be declared in any NgModule - did you intend to import it instead (by adding it to the "imports" array)?
|
||||
at http://localhost:9876/_karma_webpack_/vendor.js:115668:15
|
||||
at Array.forEach (<anonymous>)
|
||||
at assertNoStandaloneComponents (http://localhost:9876/_karma_webpack_/vendor.js:115664:9)
|
||||
at TestBedCompiler.configureTestingModule (http://localhost:9876/_karma_webpack_/vendor.js:115738:7)
|
||||
at TestBedImpl.configureTestingModule (http://localhost:9876/_karma_webpack_/vendor.js:116819:19)
|
||||
at TestBedImpl.configureTestingModule (http://localhost:9876/_karma_webpack_/vendor.js:116648:33)
|
||||
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/main.js:3164:70)
|
||||
at Generator.next (<anonymous>)
|
||||
at asyncGeneratorStep (http://localhost:9876/_karma_webpack_/vendor.js:203145:17)
|
||||
at _next (http://localhost:9876/_karma_webpack_/vendor.js:203159:9)
|
||||
</failure>
|
||||
</testcase>
|
||||
<testcase name="MainRepositoryViewComponent should create" time="0.014" classname="MainRepositoryViewComponent">
|
||||
<failure type="">NullInjectorError: R3InjectorError(DynamicTestModule)[HttpClient -> HttpClient]:
|
||||
NullInjectorError: No provider for HttpClient!
|
||||
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'HttpClient', 'HttpClient' ] })
|
||||
NullInjectorError: NullInjectorError: No provider for HttpClient!
|
||||
at NullInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:76593:21)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at R3Injector.get (http://localhost:9876/_karma_webpack_/vendor.js:77975:27)
|
||||
at ChainedInjector.get (http://localhost:9876/_karma_webpack_/vendor.js:80243:32)
|
||||
at lookupTokenUsingModuleInjector (http://localhost:9876/_karma_webpack_/vendor.js:80586:31)
|
||||
at getOrCreateInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80632:10)
|
||||
at ɵɵdirectiveInject (http://localhost:9876/_karma_webpack_/vendor.js:85998:17)
|
||||
at NodeInjectorFactory.MainRepositoryViewComponent_Factory [as factory] (ng:///MainRepositoryViewComponent/ɵfac.js:5:7)
|
||||
at getNodeInjectable (http://localhost:9876/_karma_webpack_/vendor.js:80826:38)
|
||||
at createRootComponent (http://localhost:9876/_karma_webpack_/vendor.js:91610:31)
|
||||
</failure>
|
||||
</testcase>
|
||||
<system-out>
|
||||
<![CDATA[Chrome Headless 130.0.0.0 (Linux x86_64) LOG: 'Selected subnet UUID:', Object{}
|
||||
,Chrome Headless 130.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 Headless 130.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 Headless 130.0.0.0 (Linux x86_64) LOG: Object{}
|
||||
,Chrome Headless 130.0.0.0 (Linux x86_64) LOG: Object{}
|
||||
|
||||
<![CDATA[
|
||||
]]>
|
||||
</system-out>
|
||||
<system-err/>
|
||||
|
|
Loading…
Reference in New Issue