diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 0fb5dfa2..74e82e1a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -71,6 +71,7 @@ import { SnapshotsComponent } from './components/snapshots/snapshots.component'; import { SnapshotMenuItemComponent } from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component'; import { MATERIAL_IMPORTS } from './material.imports'; import { DrawingService } from './services/drawing.service'; +import { ProjectNameValidator } from './components/projects/models/projectNameValidator'; if (environment.production) { @@ -155,7 +156,8 @@ if (environment.production) { InRectangleHelper, DrawingsDataSource, ServerErrorHandler, - ServerDatabase + ServerDatabase, + ProjectNameValidator ], entryComponents: [ AddServerDialogComponent, diff --git a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts index e38f4196..88e57816 100644 --- a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts +++ b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.spec.ts @@ -1,11 +1,9 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { AddBlankProjectDialogComponent } from "./add-blank-project-dialog.component"; import { Server } from "../../../models/server"; -import { FormBuilder, ReactiveFormsModule, FormsModule, Validators, FormControl } from '@angular/forms'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { MatDialogModule, MatInputModule, MatFormFieldModule, MatDialogRef, MAT_DIALOG_DATA, MatSnackBarModule } from '@angular/material'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { DebugElement } from '@angular/core'; -import { Validator } from '../models/validator'; import { ProjectService } from '../../../services/project.service'; import { ToasterService } from '../../../services/toaster.service'; import { of } from 'rxjs/internal/observable/of'; @@ -30,11 +28,11 @@ export class MockedProjectService { snap_to_grid: false, }]; - list(server: Server) { + list() { return of(this.projects); } - add(server: Server, projectname: string, uuid: string){ + add(){ return of(this.projects.pop); } } @@ -43,7 +41,6 @@ describe('AddBlankProjectDialogComponent', () => { let component: AddBlankProjectDialogComponent; let fixture: ComponentFixture; let server: Server; - let formBuilder: FormBuilder; beforeEach(async(() => { TestBed.configureTestingModule({ @@ -69,16 +66,12 @@ describe('AddBlankProjectDialogComponent', () => { server = new Server(); server.ip = "localhost"; server.port = 80; - formBuilder = new FormBuilder(); })); beforeEach(() => { fixture = TestBed.createComponent(AddBlankProjectDialogComponent); component = fixture.componentInstance; component.server = server; - component.projectNameForm = formBuilder.group({ - projectName: new FormControl(null, [Validators.required, Validator.projectNameValidator]) - }); component.projectNameForm.controls['projectName'].setValue("ValidName"); fixture.detectChanges(); }) diff --git a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts index 7eb74d3a..e9d60f5d 100644 --- a/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts +++ b/src/app/components/projects/add-blank-project-dialog/add-blank-project-dialog.component.ts @@ -6,13 +6,14 @@ import { Server } from '../../../models/server'; import { ProjectService } from '../../../services/project.service'; import { v4 as uuid } from 'uuid'; import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component'; -import { Validator } from '../models/validator'; +import { ProjectNameValidator } from '../models/projectNameValidator'; import { ToasterService } from '../../../services/toaster.service'; @Component({ selector: 'app-add-blank-project-dialog', templateUrl: './add-blank-project-dialog.component.html', - styleUrls: ['./add-blank-project-dialog.component.css'] + styleUrls: ['./add-blank-project-dialog.component.css'], + providers: [ProjectNameValidator] }) export class AddBlankProjectDialogComponent implements OnInit { server: Server; @@ -23,9 +24,10 @@ export class AddBlankProjectDialogComponent implements OnInit { private dialog: MatDialog, private projectService: ProjectService, private toasterService: ToasterService, - private formBuilder: FormBuilder) { + private formBuilder: FormBuilder, + private projectNameValidator: ProjectNameValidator) { this.projectNameForm = this.formBuilder.group({ - projectName: new FormControl(null, [Validators.required, Validator.projectNameValidator]) + projectName: new FormControl(null, [Validators.required, projectNameValidator.get]) }); } diff --git a/src/app/components/projects/import-project-dialog/import-project-dialog.component.spec.ts b/src/app/components/projects/import-project-dialog/import-project-dialog.component.spec.ts index b85ba4d8..9840cdeb 100644 --- a/src/app/components/projects/import-project-dialog/import-project-dialog.component.spec.ts +++ b/src/app/components/projects/import-project-dialog/import-project-dialog.component.spec.ts @@ -4,14 +4,13 @@ import { Server } from "../../../models/server"; import { MatInputModule, MatIconModule, MatSortModule, MatTableModule, MatTooltipModule, MatDialogModule, MatFormFieldModule, MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; import { RouterTestingModule } from "@angular/router/testing"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; -import { FileUploadModule, FileSelectDirective, FileItem, FileUploader, ParsedResponseHeaders } from "ng2-file-upload"; -import { FormsModule, ReactiveFormsModule, FormBuilder, FormControl, Validators } from '@angular/forms'; +import { FileUploadModule, FileSelectDirective, FileItem, ParsedResponseHeaders } from "ng2-file-upload"; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; import { ProjectService } from '../../../services/project.service'; import { of } from 'rxjs/internal/observable/of'; import { Project } from '../../../models/project'; -import { Validator } from '../models/validator'; export class MockedProjectService { public projects: Project[] = [{ @@ -32,7 +31,7 @@ export class MockedProjectService { snap_to_grid: false, }]; - list(server: Server) { + list() { return of(this.projects); } } @@ -43,7 +42,6 @@ describe('ImportProjectDialogComponent', () => { let server: Server; let debugElement: DebugElement; let fileSelectDirective: FileSelectDirective; - let formBuilder: FormBuilder; beforeEach(async(() => { TestBed.configureTestingModule({ @@ -73,7 +71,6 @@ describe('ImportProjectDialogComponent', () => { server = new Server(); server.ip = "localhost"; server.port = 80; - formBuilder = new FormBuilder(); })); beforeEach(() => { @@ -81,15 +78,12 @@ describe('ImportProjectDialogComponent', () => { debugElement = fixture.debugElement; component = fixture.componentInstance; component.server = server; - component.projectNameForm = formBuilder.group({ - projectName: new FormControl(null, [Validators.required, Validator.projectNameValidator]) - }); component.projectNameForm.controls['projectName'].setValue("ValidName"); fixture.detectChanges(); debugElement = fixture.debugElement.query(By.directive(FileSelectDirective)); fileSelectDirective = debugElement.injector.get(FileSelectDirective) as FileSelectDirective; - component.uploader.onErrorItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {}; + component.uploader.onErrorItem = () => {}; }); it('should be created', () => { diff --git a/src/app/components/projects/import-project-dialog/import-project-dialog.component.ts b/src/app/components/projects/import-project-dialog/import-project-dialog.component.ts index 38172050..67daa81e 100644 --- a/src/app/components/projects/import-project-dialog/import-project-dialog.component.ts +++ b/src/app/components/projects/import-project-dialog/import-project-dialog.component.ts @@ -8,12 +8,13 @@ import { ProjectService } from '../../../services/project.service'; import { Project } from '../../../models/project'; import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component'; import { ServerResponse } from '../../../models/serverResponse'; -import { Validator } from '../models/validator'; +import { ProjectNameValidator } from '../models/projectNameValidator'; @Component({ selector: 'app-import-project-dialog', templateUrl: 'import-project-dialog.component.html', - styleUrls: ['import-project-dialog.component.css'] + styleUrls: ['import-project-dialog.component.css'], + providers: [ProjectNameValidator] }) export class ImportProjectDialogComponent implements OnInit { uploader: FileUploader; @@ -31,9 +32,10 @@ export class ImportProjectDialogComponent implements OnInit { public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, private formBuilder: FormBuilder, - private projectService: ProjectService){ + private projectService: ProjectService, + private projectNameValidator: ProjectNameValidator){ this.projectNameForm = this.formBuilder.group({ - projectName: new FormControl(null, [Validators.required, Validator.projectNameValidator]) + projectName: new FormControl(null, [Validators.required, projectNameValidator.get]) }); } diff --git a/src/app/components/projects/models/validator.ts b/src/app/components/projects/models/projectNameValidator.ts similarity index 61% rename from src/app/components/projects/models/validator.ts rename to src/app/components/projects/models/projectNameValidator.ts index 2c756885..38725ac8 100644 --- a/src/app/components/projects/models/validator.ts +++ b/src/app/components/projects/models/projectNameValidator.ts @@ -1,5 +1,8 @@ -export class Validator { - static projectNameValidator(projectName) { +import { Injectable } from "@angular/core"; + +@Injectable() +export class ProjectNameValidator { + get(projectName) { var pattern = new RegExp(/[~`!#$%\^&*+=\[\]\\';,/{}|\\":<>\?]/); if(!pattern.test(projectName.value)) {