Browse Source

Tests simplified

pull/107/head
Sebastian Stehle 9 years ago
parent
commit
6f965686c7
  1. 12
      src/Squidex/app/features/content/shared/assets-editor.component.ts
  2. 12
      src/Squidex/app/features/content/shared/references-editor.component.ts
  3. 12
      src/Squidex/app/framework/angular/autocomplete.component.ts
  4. 22
      src/Squidex/app/framework/angular/date-time-editor.component.ts
  5. 12
      src/Squidex/app/framework/angular/dropdown.component.ts
  6. 12
      src/Squidex/app/framework/angular/geolocation-editor.component.ts
  7. 12
      src/Squidex/app/framework/angular/indeterminate-value.directive.ts
  8. 12
      src/Squidex/app/framework/angular/jscript-editor.component.ts
  9. 12
      src/Squidex/app/framework/angular/json-editor.component.ts
  10. 18
      src/Squidex/app/framework/angular/lowercase-input.directive.ts
  11. 12
      src/Squidex/app/framework/angular/markdown-editor.component.ts
  12. 12
      src/Squidex/app/framework/angular/rich-editor.component.ts
  13. 12
      src/Squidex/app/framework/angular/slider.component.ts
  14. 18
      src/Squidex/app/framework/angular/stars.component.ts
  15. 14
      src/Squidex/app/framework/angular/tag-editor.component.ts
  16. 14
      src/Squidex/app/framework/angular/toggle.component.ts
  17. 28
      src/Squidex/app/shared/services/assets.service.spec.ts
  18. 38
      src/Squidex/app/shared/services/contents.service.spec.ts
  19. 120
      src/Squidex/app/shared/services/schemas.service.spec.ts
  20. 2
      src/Squidex/app/shared/services/schemas.service.ts
  21. 12
      src/Squidex/app/shared/services/webhooks.service.spec.ts
  22. 2
      src/Squidex/tsconfig.json

12
src/Squidex/app/features/content/shared/assets-editor.component.ts

@ -35,8 +35,8 @@ export const SQX_ASSETS_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
}) })
export class AssetsEditorComponent extends AppComponentBase implements ControlValueAccessor, OnDestroy, OnInit { export class AssetsEditorComponent extends AppComponentBase implements ControlValueAccessor, OnDestroy, OnInit {
private assetUpdatedSubscription: Subscription; private assetUpdatedSubscription: Subscription;
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
public newAssets = ImmutableArray.empty<File>(); public newAssets = ImmutableArray.empty<File>();
public oldAssets = ImmutableArray.empty<AssetDto>(); public oldAssets = ImmutableArray.empty<AssetDto>();
@ -83,11 +83,11 @@ export class AssetsEditorComponent extends AppComponentBase implements ControlVa
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public addFiles(files: FileList) { public addFiles(files: FileList) {
@ -142,7 +142,7 @@ export class AssetsEditorComponent extends AppComponentBase implements ControlVa
ids = null; ids = null;
} }
this.onTouched(); this.callTouched();
this.onChange(ids); this.callChange(ids);
} }
} }

12
src/Squidex/app/features/content/shared/references-editor.component.ts

@ -34,8 +34,8 @@ export const SQX_REFERENCES_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_REFERENCES_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_REFERENCES_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class ReferencesEditorComponent extends AppComponentBase implements ControlValueAccessor, OnInit { export class ReferencesEditorComponent extends AppComponentBase implements ControlValueAccessor, OnInit {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
@Input() @Input()
public schemaId: string; public schemaId: string;
@ -91,11 +91,11 @@ export class ReferencesEditorComponent extends AppComponentBase implements Contr
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public canDrop() { public canDrop() {
@ -137,8 +137,8 @@ export class ReferencesEditorComponent extends AppComponentBase implements Contr
ids = null; ids = null;
} }
this.onTouched(); this.callTouched();
this.onChange(ids); this.callChange(ids);
} }
private loadFields() { private loadFields() {

12
src/Squidex/app/framework/angular/autocomplete.component.ts

@ -30,8 +30,8 @@ export const SQX_AUTOCOMPLETE_CONTROL_VALUE_ACCESSOR: any = {
}) })
export class AutocompleteComponent implements ControlValueAccessor, OnDestroy, OnInit { export class AutocompleteComponent implements ControlValueAccessor, OnDestroy, OnInit {
private subscription: Subscription; private subscription: Subscription;
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
@Input() @Input()
public source: AutocompleteSource; public source: AutocompleteSource;
@ -78,11 +78,11 @@ export class AutocompleteComponent implements ControlValueAccessor, OnDestroy, O
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngOnDestroy() { public ngOnDestroy() {
@ -134,7 +134,7 @@ export class AutocompleteComponent implements ControlValueAccessor, OnDestroy, O
public blur() { public blur() {
this.reset(); this.reset();
this.onTouched(); this.callTouched();
} }
public selectItem(selection: any | null = null) { public selectItem(selection: any | null = null) {
@ -153,7 +153,7 @@ export class AutocompleteComponent implements ControlValueAccessor, OnDestroy, O
} else { } else {
this.queryInput.setValue(selection.toString(), { emitEvent: false }); this.queryInput.setValue(selection.toString(), { emitEvent: false });
} }
this.onChange(selection); this.callChange(selection);
} finally { } finally {
this.reset(); this.reset();
} }

22
src/Squidex/app/framework/angular/date-time-editor.component.ts

@ -10,6 +10,8 @@ import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/f
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
import * as moment from 'moment'; import * as moment from 'moment';
import { Types } from './../utils/types';
let Pikaday = require('pikaday/pikaday'); let Pikaday = require('pikaday/pikaday');
export const SQX_DATE_TIME_EDITOR_CONTROL_VALUE_ACCESSOR: any = { export const SQX_DATE_TIME_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
@ -29,8 +31,8 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
private timeValue: any | null = null; private timeValue: any | null = null;
private dateValue: any | null = null; private dateValue: any | null = null;
private suppressEvents = false; private suppressEvents = false;
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
@Input() @Input()
public mode: string; public mode: string;
@ -84,8 +86,8 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
}); });
} }
public writeValue(value: any) { public writeValue(value: string) {
if (!value || value.length === 0) { if (!Types.isString(value) || value.length === 0) {
this.timeValue = null; this.timeValue = null;
this.dateValue = null; this.dateValue = null;
} else { } else {
@ -114,11 +116,11 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngAfterViewInit() { public ngAfterViewInit() {
@ -138,7 +140,7 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
} }
public touched() { public touched() {
this.onTouched(); this.callTouched();
} }
public writeNow() { public writeNow() {
@ -157,8 +159,8 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
this.dateValue = null; this.dateValue = null;
this.onChange(null); this.callChange(null);
this.onTouched(); this.callTouched();
return false; return false;
} }
@ -182,7 +184,7 @@ export class DateTimeEditorComponent implements ControlValueAccessor, OnDestroy,
} }
} }
this.onChange(result); this.callChange(result);
} }
private updateControls() { private updateControls() {

12
src/Squidex/app/framework/angular/dropdown.component.ts

@ -26,8 +26,8 @@ export const SQX_DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_DROPDOWN_CONTROL_VALUE_ACCESSOR] providers: [SQX_DROPDOWN_CONTROL_VALUE_ACCESSOR]
}) })
export class DropdownComponent implements AfterContentInit, ControlValueAccessor { export class DropdownComponent implements AfterContentInit, ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
@Input() @Input()
public items: any[] = []; public items: any[] = [];
@ -68,11 +68,11 @@ export class DropdownComponent implements AfterContentInit, ControlValueAccessor
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public onKeyDown(event: KeyboardEvent) { public onKeyDown(event: KeyboardEvent) {
@ -94,7 +94,7 @@ export class DropdownComponent implements AfterContentInit, ControlValueAccessor
public open() { public open() {
this.dropdown.show(); this.dropdown.show();
this.onTouched(); this.callTouched();
} }
public selectIndexAndClose(selectedIndex: number) { public selectIndexAndClose(selectedIndex: number) {
@ -131,7 +131,7 @@ export class DropdownComponent implements AfterContentInit, ControlValueAccessor
this.selectedIndex = selectedIndex; this.selectedIndex = selectedIndex;
this.selectedItem = value; this.selectedItem = value;
this.onChange(value); this.callChange(value);
} }
} }
} }

12
src/Squidex/app/framework/angular/geolocation-editor.component.ts

@ -31,8 +31,8 @@ interface Geolocation {
providers: [SQX_GEOLOCATION_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_GEOLOCATION_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class GeolocationEditorComponent implements ControlValueAccessor, AfterViewInit { export class GeolocationEditorComponent implements ControlValueAccessor, AfterViewInit {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private marker: any; private marker: any;
private map: any; private map: any;
private value: Geolocation | null = null; private value: Geolocation | null = null;
@ -111,11 +111,11 @@ export class GeolocationEditorComponent implements ControlValueAccessor, AfterVi
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public updateValueByInput() { public updateValueByInput() {
@ -210,8 +210,8 @@ export class GeolocationEditorComponent implements ControlValueAccessor, AfterVi
} }
if (fireEvent) { if (fireEvent) {
this.onChange(this.value); this.callChange(this.value);
this.onTouched(); this.callTouched();
} }
} }
} }

12
src/Squidex/app/framework/angular/indeterminate-value.directive.ts

@ -19,8 +19,8 @@ export const SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR] providers: [SQX_INDETERMINATE_VALUE_CONTROL_VALUE_ACCESSOR]
}) })
export class IndeterminateValueDirective implements ControlValueAccessor { export class IndeterminateValueDirective implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
constructor( constructor(
private readonly renderer: Renderer, private readonly renderer: Renderer,
@ -30,12 +30,12 @@ export class IndeterminateValueDirective implements ControlValueAccessor {
@HostListener('change', ['$event.target.value']) @HostListener('change', ['$event.target.value'])
public onChange(value: any) { public onChange(value: any) {
this.onChange(value); this.callChange(value);
} }
@HostListener('blur') @HostListener('blur')
public onTouched() { public onTouched() {
this.onTouched(); this.callTouched();
} }
public writeValue(value: boolean | number | undefined) { public writeValue(value: boolean | number | undefined) {
@ -51,10 +51,10 @@ export class IndeterminateValueDirective implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
} }

12
src/Squidex/app/framework/angular/jscript-editor.component.ts

@ -26,8 +26,8 @@ export const SQX_JSCRIPT_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_JSCRIPT_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_JSCRIPT_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class JscriptEditorComponent implements ControlValueAccessor, AfterViewInit { export class JscriptEditorComponent implements ControlValueAccessor, AfterViewInit {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private valueChanged = new Subject(); private valueChanged = new Subject();
private aceEditor: any; private aceEditor: any;
private value: string; private value: string;
@ -58,11 +58,11 @@ export class JscriptEditorComponent implements ControlValueAccessor, AfterViewIn
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngAfterViewInit() { public ngAfterViewInit() {
@ -82,7 +82,7 @@ export class JscriptEditorComponent implements ControlValueAccessor, AfterViewIn
this.aceEditor.on('blur', () => { this.aceEditor.on('blur', () => {
this.changeValue(); this.changeValue();
this.onTouched(); this.callTouched();
}); });
this.aceEditor.on('change', () => { this.aceEditor.on('change', () => {
@ -95,7 +95,7 @@ export class JscriptEditorComponent implements ControlValueAccessor, AfterViewIn
const newValue = this.aceEditor.getValue(); const newValue = this.aceEditor.getValue();
if (this.value !== newValue) { if (this.value !== newValue) {
this.onChange(newValue); this.callChange(newValue);
} }
this.value = newValue; this.value = newValue;

12
src/Squidex/app/framework/angular/json-editor.component.ts

@ -24,8 +24,8 @@ export const SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_JSON_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class JsonEditorComponent implements ControlValueAccessor, AfterViewInit { export class JsonEditorComponent implements ControlValueAccessor, AfterViewInit {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private valueChanged = new Subject(); private valueChanged = new Subject();
private aceEditor: any; private aceEditor: any;
private value: any; private value: any;
@ -63,11 +63,11 @@ export class JsonEditorComponent implements ControlValueAccessor, AfterViewInit
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngAfterViewInit() { public ngAfterViewInit() {
@ -87,7 +87,7 @@ export class JsonEditorComponent implements ControlValueAccessor, AfterViewInit
this.aceEditor.on('blur', () => { this.aceEditor.on('blur', () => {
this.changeValue(); this.changeValue();
this.onTouched(); this.callTouched();
}); });
this.aceEditor.on('change', () => { this.aceEditor.on('change', () => {
@ -112,7 +112,7 @@ export class JsonEditorComponent implements ControlValueAccessor, AfterViewInit
const newValueString = JSON.stringify(newValue); const newValueString = JSON.stringify(newValue);
if (this.valueString !== newValueString) { if (this.valueString !== newValueString) {
this.onChange(newValue); this.callChange(newValue);
} }
this.value = newValue; this.value = newValue;

18
src/Squidex/app/framework/angular/lowercase-input.directive.ts

@ -8,6 +8,8 @@
import { Directive, forwardRef, ElementRef, HostListener, Renderer } from '@angular/core'; import { Directive, forwardRef, ElementRef, HostListener, Renderer } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { Types } from './../utils/types';
export const SQX_LOWERCASE_INPUT_VALUE_ACCESSOR: any = { export const SQX_LOWERCASE_INPUT_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => LowerCaseInputDirective), multi: true provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => LowerCaseInputDirective), multi: true
}; };
@ -17,8 +19,8 @@ export const SQX_LOWERCASE_INPUT_VALUE_ACCESSOR: any = {
providers: [SQX_LOWERCASE_INPUT_VALUE_ACCESSOR] providers: [SQX_LOWERCASE_INPUT_VALUE_ACCESSOR]
}) })
export class LowerCaseInputDirective implements ControlValueAccessor { export class LowerCaseInputDirective implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
constructor( constructor(
private readonly element: ElementRef, private readonly element: ElementRef,
@ -31,16 +33,16 @@ export class LowerCaseInputDirective implements ControlValueAccessor {
const normalizedValue = (value == null ? '' : value.toString()).toLowerCase(); const normalizedValue = (value == null ? '' : value.toString()).toLowerCase();
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue);
this.onChange(normalizedValue); this.callChange(normalizedValue);
} }
@HostListener('blur') @HostListener('blur')
public onTouched() { public onTouched() {
this.onTouched(); this.callTouched();
} }
public writeValue(value: any) { public writeValue(value: string) {
const normalizedValue = value ? '' : value.toString().toLowerCase(); const normalizedValue = Types.isString(value) ? value.toLowerCase() : '';
this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue); this.renderer.setElementProperty(this.element.nativeElement, 'value', normalizedValue);
} }
@ -50,10 +52,10 @@ export class LowerCaseInputDirective implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
} }

12
src/Squidex/app/framework/angular/markdown-editor.component.ts

@ -25,8 +25,8 @@ export const SQX_MARKDOWN_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_MARKDOWN_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_MARKDOWN_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class MarkdownEditorComponent implements ControlValueAccessor, AfterViewInit { export class MarkdownEditorComponent implements ControlValueAccessor, AfterViewInit {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private simplemde: any; private simplemde: any;
private value: string; private value: string;
private isDisabled = false; private isDisabled = false;
@ -65,11 +65,11 @@ export class MarkdownEditorComponent implements ControlValueAccessor, AfterViewI
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngAfterViewInit() { public ngAfterViewInit() {
@ -84,12 +84,12 @@ export class MarkdownEditorComponent implements ControlValueAccessor, AfterViewI
if (this.value !== value) { if (this.value !== value) {
this.value = value; this.value = value;
this.onChange(value); this.callChange(value);
} }
}); });
this.simplemde.codemirror.on('blur', () => { this.simplemde.codemirror.on('blur', () => {
this.onTouched(); this.callTouched();
}); });
this.simplemde.codemirror.on('refresh', () => { this.simplemde.codemirror.on('refresh', () => {

12
src/Squidex/app/framework/angular/rich-editor.component.ts

@ -25,8 +25,8 @@ export const SQX_RICH_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_RICH_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_RICH_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class RichEditorComponent implements ControlValueAccessor, AfterViewInit, OnDestroy { export class RichEditorComponent implements ControlValueAccessor, AfterViewInit, OnDestroy {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private tinyEditor: any; private tinyEditor: any;
private value: string; private value: string;
private isDisabled = false; private isDisabled = false;
@ -56,11 +56,11 @@ export class RichEditorComponent implements ControlValueAccessor, AfterViewInit,
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public ngAfterViewInit() { public ngAfterViewInit() {
@ -78,12 +78,12 @@ export class RichEditorComponent implements ControlValueAccessor, AfterViewInit,
if (this.value !== value) { if (this.value !== value) {
this.value = value; this.value = value;
self.onChange(value); self.callChange(value);
} }
}); });
self.tinyEditor.on('blur', () => { self.tinyEditor.on('blur', () => {
self.onTouched(); self.callTouched();
}); });
setTimeout(() => { setTimeout(() => {

12
src/Squidex/app/framework/angular/slider.component.ts

@ -21,8 +21,8 @@ export const SQX_SLIDER_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_SLIDER_CONTROL_VALUE_ACCESSOR] providers: [SQX_SLIDER_CONTROL_VALUE_ACCESSOR]
}) })
export class SliderComponent implements ControlValueAccessor { export class SliderComponent implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private mouseMoveSubscription: Function | null = null; private mouseMoveSubscription: Function | null = null;
private mouseUpSubscription: Function | null = null; private mouseUpSubscription: Function | null = null;
private centerStartOffset = 0; private centerStartOffset = 0;
@ -61,11 +61,11 @@ export class SliderComponent implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public onBarMouseClick(event: MouseEvent): boolean { public onBarMouseClick(event: MouseEvent): boolean {
@ -157,14 +157,14 @@ export class SliderComponent implements ControlValueAccessor {
} }
private updateTouched() { private updateTouched() {
this.onTouched(); this.callTouched();
} }
private updateValue() { private updateValue() {
if (this.lastValue !== this.value) { if (this.lastValue !== this.value) {
this.lastValue = this.value; this.lastValue = this.value;
this.onChange(this.value); this.callChange(this.value);
} }
} }

18
src/Squidex/app/framework/angular/stars.component.ts

@ -21,8 +21,8 @@ export const SQX_STARS_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_STARS_CONTROL_VALUE_ACCESSOR] providers: [SQX_STARS_CONTROL_VALUE_ACCESSOR]
}) })
export class StarsComponent implements ControlValueAccessor { export class StarsComponent implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
private maximumStarsValue = 5; private maximumStarsValue = 5;
@Input() @Input()
@ -53,7 +53,7 @@ export class StarsComponent implements ControlValueAccessor {
public writeValue(value: number | null | undefined) { public writeValue(value: number | null | undefined) {
if (Types.isNumber(value)) { if (Types.isNumber(value)) {
this.value = this.stars = value!; this.value = this.stars = value || 0;
} else { } else {
this.value = null; this.value = null;
this.stars = 0; this.stars = 0;
@ -65,11 +65,11 @@ export class StarsComponent implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public setPreview(value: number) { public setPreview(value: number) {
@ -97,8 +97,8 @@ export class StarsComponent implements ControlValueAccessor {
this.value = null; this.value = null;
this.stars = 0; this.stars = 0;
this.onChange(this.value); this.callChange(this.value);
this.onTouched(); this.callTouched();
} }
return false; return false;
@ -112,8 +112,8 @@ export class StarsComponent implements ControlValueAccessor {
if (this.value !== value) { if (this.value !== value) {
this.value = this.stars = value; this.value = this.stars = value;
this.onChange(this.value); this.callChange(this.value);
this.onTouched(); this.callTouched();
} }
return false; return false;

14
src/Squidex/app/framework/angular/tag-editor.component.ts

@ -72,8 +72,8 @@ export const SQX_TAG_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_TAG_EDITOR_CONTROL_VALUE_ACCESSOR] providers: [SQX_TAG_EDITOR_CONTROL_VALUE_ACCESSOR]
}) })
export class TagEditorComponent implements ControlValueAccessor { export class TagEditorComponent implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
@Input() @Input()
public converter: Converter = new StringConverter(); public converter: Converter = new StringConverter();
@ -107,11 +107,11 @@ export class TagEditorComponent implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public remove(index: number) { public remove(index: number) {
@ -119,7 +119,7 @@ export class TagEditorComponent implements ControlValueAccessor {
} }
public markTouched() { public markTouched() {
this.onTouched(); this.callTouched();
} }
private resetForm() { private resetForm() {
@ -146,9 +146,9 @@ export class TagEditorComponent implements ControlValueAccessor {
this.items = items; this.items = items;
if (items.length === 0 && this.useDefaultValue) { if (items.length === 0 && this.useDefaultValue) {
this.onChange(undefined); this.callChange(undefined);
} else { } else {
this.onChange(this.items); this.callChange(this.items);
} }
} }
} }

14
src/Squidex/app/framework/angular/toggle.component.ts

@ -21,14 +21,14 @@ export const SQX_TOGGLE_CONTROL_VALUE_ACCESSOR: any = {
providers: [SQX_TOGGLE_CONTROL_VALUE_ACCESSOR] providers: [SQX_TOGGLE_CONTROL_VALUE_ACCESSOR]
}) })
export class ToggleComponent implements ControlValueAccessor { export class ToggleComponent implements ControlValueAccessor {
private onChange = (v: any) => { /* NOOP */ }; private callChange = (v: any) => { /* NOOP */ };
private onTouched = () => { /* NOOP */ }; private callTouched = () => { /* NOOP */ };
public isChecked: boolean | null = null; public isChecked: boolean | null = null;
public isDisabled = false; public isDisabled = false;
public writeValue(value: boolean | null | undefined) { public writeValue(value: boolean | null | undefined) {
this.isChecked = Types.isBoolean(value) ? value! : null; this.isChecked = Types.isBoolean(value) ? value || null : null;
} }
public setDisabledState(isDisabled: boolean): void { public setDisabledState(isDisabled: boolean): void {
@ -36,11 +36,11 @@ export class ToggleComponent implements ControlValueAccessor {
} }
public registerOnChange(fn: any) { public registerOnChange(fn: any) {
this.onChange = fn; this.callChange = fn;
} }
public registerOnTouched(fn: any) { public registerOnTouched(fn: any) {
this.onTouched = fn; this.callTouched = fn;
} }
public changeState() { public changeState() {
@ -50,7 +50,7 @@ export class ToggleComponent implements ControlValueAccessor {
this.isChecked = !(this.isChecked === true); this.isChecked = !(this.isChecked === true);
this.onChange(this.isChecked); this.callChange(this.isChecked);
this.onTouched(); this.callTouched();
} }
} }

28
src/Squidex/app/shared/services/assets.service.spec.ts

@ -21,24 +21,26 @@ import {
} from './../'; } from './../';
describe('AssetDto', () => { describe('AssetDto', () => {
it('should update name property and user info when renaming', () => { const creation = DateTime.today();
const now = DateTime.now(); const creator = 'not-me';
const modified = DateTime.now();
const modifier = 'me';
const version = new Version('2');
const asset_1 = new AssetDto('1', 'other', 'other', DateTime.today(), DateTime.today(), 'name.png', 'png', 1, 1, 'image/png', false, 1, 1, new Version('1')); it('should update name property and user info when renaming', () => {
const asset_2 = asset_1.rename('new-name.png', 'me', now); const asset_1 = new AssetDto('1', creator, creator, creation, creation, 'name.png', 'png', 1, 1, 'image/png', false, 1, 1, version);
const asset_2 = asset_1.rename('new-name.png', modifier, modified);
expect(asset_2.fileName).toEqual('new-name.png'); expect(asset_2.fileName).toEqual('new-name.png');
expect(asset_2.lastModified).toEqual(now); expect(asset_2.lastModified).toEqual(modified);
expect(asset_2.lastModifiedBy).toEqual('me'); expect(asset_2.lastModifiedBy).toEqual(modifier);
}); });
it('should update file properties when uploading', () => { it('should update file properties when uploading', () => {
const now = DateTime.now(); const update = new AssetReplacedDto(2, 2, 'image/jpeg', true, 2, 2, new Version('2'));
const update = new AssetReplacedDto(2, 2, 'image/jpeg', true, 2, 2, new Version('1'));
const asset_1 = new AssetDto('1', 'other', 'other', DateTime.today(), DateTime.today(), 'name.png', 'png', 1, 1, 'image/png', false, 1, 1, new Version('1')); const asset_1 = new AssetDto('1', creator, creator, creation, creation, 'name.png', 'png', 1, 1, 'image/png', false, 1, 1, version);
const asset_2 = asset_1.update(update, 'me', now); const asset_2 = asset_1.update(update, modifier, modified);
expect(asset_2.fileSize).toEqual(2); expect(asset_2.fileSize).toEqual(2);
expect(asset_2.fileVersion).toEqual(2); expect(asset_2.fileVersion).toEqual(2);
@ -46,8 +48,8 @@ describe('AssetDto', () => {
expect(asset_2.isImage).toBeTruthy(); expect(asset_2.isImage).toBeTruthy();
expect(asset_2.pixelWidth).toEqual(2); expect(asset_2.pixelWidth).toEqual(2);
expect(asset_2.pixelHeight).toEqual(2); expect(asset_2.pixelHeight).toEqual(2);
expect(asset_2.lastModified).toEqual(now); expect(asset_2.lastModified).toEqual(modified);
expect(asset_2.lastModifiedBy).toEqual('me'); expect(asset_2.lastModifiedBy).toEqual(modifier);
expect(asset_2.version).toEqual(update); expect(asset_2.version).toEqual(update);
}); });
}); });

38
src/Squidex/app/shared/services/contents.service.spec.ts

@ -19,43 +19,43 @@ import {
} from './../'; } from './../';
describe('ContentDto', () => { describe('ContentDto', () => {
it('should update data property and user info when updating', () => { const creation = DateTime.today();
const now = DateTime.now(); const creator = 'not-me';
const modified = DateTime.now();
const modifier = 'me';
const version = new Version('1');
const content_1 = new ContentDto('1', false, false, 'other', 'other', DateTime.now(), DateTime.now(), { data: 1 }, new Version('1')); it('should update data property and user info when updating', () => {
const content_2 = content_1.update({ data: 2 }, 'me', now); const content_1 = new ContentDto('1', false, false, creator, creator, creation, creation, { data: 1 }, version);
const content_2 = content_1.update({ data: 2 }, modifier, modified);
expect(content_2.data).toEqual({ data: 2 }); expect(content_2.data).toEqual({ data: 2 });
expect(content_2.lastModified).toEqual(now); expect(content_2.lastModified).toEqual(modified);
expect(content_2.lastModifiedBy).toEqual('me'); expect(content_2.lastModifiedBy).toEqual(modifier);
}); });
it('should update isPublished property and user info when publishing', () => { it('should update isPublished property and user info when publishing', () => {
const now = DateTime.now(); const content_1 = new ContentDto('1', false, false, creator, creator, creation, creation, { data: 1 }, version);
const content_2 = content_1.publish(modifier, modified);
const content_1 = new ContentDto('1', false, false, 'other', 'other', DateTime.now(), DateTime.now(), { data: 1 }, new Version('1'));
const content_2 = content_1.publish('me', now);
expect(content_2.isPublished).toBeTruthy(); expect(content_2.isPublished).toBeTruthy();
expect(content_2.lastModified).toEqual(now); expect(content_2.lastModified).toEqual(modified);
expect(content_2.lastModifiedBy).toEqual('me'); expect(content_2.lastModifiedBy).toEqual(modifier);
}); });
it('should update isPublished property and user info when unpublishing', () => { it('should update isPublished property and user info when unpublishing', () => {
const now = DateTime.now(); const content_1 = new ContentDto('1', true, false, creator, creator, creation, creation, { data: 1 }, version);
const content_2 = content_1.unpublish(modifier, modified);
const content_1 = new ContentDto('1', true, false, 'other', 'other', DateTime.now(), DateTime.now(), { data: 1 }, new Version('1'));
const content_2 = content_1.unpublish('me', now);
expect(content_2.isPublished).toBeFalsy(); expect(content_2.isPublished).toBeFalsy();
expect(content_2.lastModified).toEqual(now); expect(content_2.lastModified).toEqual(modified);
expect(content_2.lastModifiedBy).toEqual('me'); expect(content_2.lastModifiedBy).toEqual(modifier);
}); });
it('should update data property when setting data', () => { it('should update data property when setting data', () => {
const newData = {}; const newData = {};
const content_1 = new ContentDto('1', true, false, 'other', 'other', DateTime.now(), DateTime.now(), { data: 1 }, new Version('1')); const content_1 = new ContentDto('1', true, false, creator, creator, creation, creation, { data: 1 }, version);
const content_2 = content_1.setData(newData); const content_2 = content_1.setData(newData);
expect(content_2.data).toBe(newData); expect(content_2.data).toBe(newData);

120
src/Squidex/app/shared/services/schemas.service.spec.ts

@ -28,40 +28,39 @@ import {
describe('SchemaDto', () => { describe('SchemaDto', () => {
const properties = new SchemaPropertiesDto('Name'); const properties = new SchemaPropertiesDto('Name');
const creation = DateTime.today();
const creator = 'not-me';
const modified = DateTime.now();
const modifier = 'me';
const version = new Version('1');
it('should update isPublished property and user info when publishing', () => { it('should update isPublished property and user info when publishing', () => {
const now = DateTime.now(); const schema_1 = new SchemaDto('1', 'name', properties, false, creator, creator, creation, creation, version);
const schema_2 = schema_1.publish(modifier, modified);
const schema_1 = new SchemaDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'));
const schema_2 = schema_1.publish('me', now);
expect(schema_2.isPublished).toBeTruthy(); expect(schema_2.isPublished).toBeTruthy();
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update isPublished property and user info when unpublishing', () => { it('should update isPublished property and user info when unpublishing', () => {
const now = DateTime.now(); const schema_1 = new SchemaDto('1', 'name', properties, false, creator, creator, creation, creation, version);
const schema_2 = schema_1.unpublish(modifier, modified);
const schema_1 = new SchemaDto('1', 'name', properties, true, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'));
const schema_2 = schema_1.unpublish('me', now);
expect(schema_2.isPublished).toBeFalsy(); expect(schema_2.isPublished).toBeFalsy();
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update properties property and user info when updating', () => { it('should update properties property and user info when updating', () => {
const newProperties = new SchemaPropertiesDto('New Name'); const newProperties = new SchemaPropertiesDto('New Name');
const now = DateTime.now(); const schema_1 = new SchemaDto('1', 'name', properties, false, creator, creator, creation, creation, version);
const schema_2 = schema_1.update(newProperties, modifier, modified);
const schema_1 = new SchemaDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'));
const schema_2 = schema_1.update(newProperties, 'me', now);
expect(schema_2.properties).toEqual(newProperties); expect(schema_2.properties).toEqual(newProperties);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update scripts properties and user info when configure scripts', () => { it('should update scripts properties and user info when configure scripts', () => {
@ -74,10 +73,8 @@ describe('SchemaDto', () => {
'<script-publish>', '<script-publish>',
'<script-unpublish>'); '<script-unpublish>');
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, []);
const schema_2 = schema_1.configureScripts(newScripts, modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), []);
const schema_2 = schema_1.configureScripts(newScripts, 'me', now);
expect(schema_2.scriptQuery).toEqual('<script-query>'); expect(schema_2.scriptQuery).toEqual('<script-query>');
expect(schema_2.scriptCreate).toEqual('<script-create>'); expect(schema_2.scriptCreate).toEqual('<script-create>');
@ -85,89 +82,82 @@ describe('SchemaDto', () => {
expect(schema_2.scriptDelete).toEqual('<script-delete>'); expect(schema_2.scriptDelete).toEqual('<script-delete>');
expect(schema_2.scriptPublish).toEqual('<script-publish>'); expect(schema_2.scriptPublish).toEqual('<script-publish>');
expect(schema_2.scriptUnpublish).toEqual('<script-unpublish>'); expect(schema_2.scriptUnpublish).toEqual('<script-unpublish>');
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
}); });
describe('SchemaDetailsDto', () => { describe('SchemaDetailsDto', () => {
const properties = new SchemaPropertiesDto('Name'); const properties = new SchemaPropertiesDto('Name');
const creation = DateTime.today();
const creator = 'not-me';
const modified = DateTime.now();
const modifier = 'me';
const version = new Version('1');
it('should update isPublished property and user info when publishing', () => { it('should update isPublished property and user info when publishing', () => {
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, []);
const schema_2 = schema_1.publish(modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), []);
const schema_2 = schema_1.publish('me', now);
expect(schema_2.isPublished).toBeTruthy(); expect(schema_2.isPublished).toBeTruthy();
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update isPublished property and user info when unpublishing', () => { it('should update isPublished property and user info when unpublishing', () => {
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, true, creator, creator, creation, creation, version, []);
const schema_2 = schema_1.unpublish(modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, true, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), []);
const schema_2 = schema_1.unpublish('me', now);
expect(schema_2.isPublished).toBeFalsy(); expect(schema_2.isPublished).toBeFalsy();
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update properties property and user info when updating', () => { it('should update properties property and user info when updating', () => {
const newProperties = new SchemaPropertiesDto('New Name'); const newProperties = new SchemaPropertiesDto('New Name');
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, []);
const schema_2 = schema_1.update(newProperties, modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), []);
const schema_2 = schema_1.update(newProperties, 'me', now);
expect(schema_2.properties).toEqual(newProperties); expect(schema_2.properties).toEqual(newProperties);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update fields property and user info when adding field', () => { it('should update fields property and user info when adding field', () => {
const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String')); const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String'));
const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number')); const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number'));
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, [field1]);
const schema_2 = schema_1.addField(field2, modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), [field1]);
const schema_2 = schema_1.addField(field2, 'me', now);
expect(schema_2.fields).toEqual([field1, field2]); expect(schema_2.fields).toEqual([field1, field2]);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update fields property and user info when removing field', () => { it('should update fields property and user info when removing field', () => {
const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String')); const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String'));
const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number')); const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number'));
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, [field1, field2]);
const schema_2 = schema_1.removeField(field1, modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), [field1, field2]);
const schema_2 = schema_1.removeField(field1, 'me', now);
expect(schema_2.fields).toEqual([field2]); expect(schema_2.fields).toEqual([field2]);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update fields property and user info when replacing fields', () => { it('should update fields property and user info when replacing fields', () => {
const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String')); const field1 = new FieldDto(1, '1', false, false, false, 'l', createProperties('String'));
const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number')); const field2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number'));
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, [field1, field2]);
const schema_2 = schema_1.replaceFields([field2, field1], modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), [field1, field2]);
const schema_2 = schema_1.replaceFields([field2, field1], 'me', now);
expect(schema_2.fields).toEqual([field2, field1]); expect(schema_2.fields).toEqual([field2, field1]);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
it('should update fields property and user info when updating field', () => { it('should update fields property and user info when updating field', () => {
@ -175,14 +165,12 @@ describe('SchemaDetailsDto', () => {
const field2_1 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number')); const field2_1 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Number'));
const field2_2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Boolean')); const field2_2 = new FieldDto(2, '2', false, false, false, 'l', createProperties('Boolean'));
const now = DateTime.now(); const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, creator, creator, creation, creation, version, [field1_0, field2_1]);
const schema_2 = schema_1.updateField(field2_2, modifier, modified);
const schema_1 = new SchemaDetailsDto('1', 'name', properties, false, 'other', 'other', DateTime.now(), DateTime.now(), new Version('1'), [field1_0, field2_1]);
const schema_2 = schema_1.updateField(field2_2, 'me', now);
expect(schema_2.fields).toEqual([field1_0, field2_2]); expect(schema_2.fields).toEqual([field1_0, field2_2]);
expect(schema_2.lastModified).toEqual(now); expect(schema_2.lastModified).toEqual(modifier);
expect(schema_2.lastModifiedBy).toEqual('me'); expect(schema_2.lastModifiedBy).toEqual(modified);
}); });
}); });

2
src/Squidex/app/shared/services/schemas.service.ts

@ -797,7 +797,7 @@ export class SchemasService {
user, user,
now, now,
now, now,
version || new Version('0'), version,
dto.fields || [], dto.fields || [],
response.scriptQuery, response.scriptQuery,
response.scriptCreate, response.scriptCreate,

12
src/Squidex/app/shared/services/webhooks.service.spec.ts

@ -23,21 +23,25 @@ import {
} from './../'; } from './../';
describe('WebhookDto', () => { describe('WebhookDto', () => {
const now = DateTime.now(); const creation = DateTime.today();
const user = 'me'; const creator = 'not-me';
const modified = DateTime.now();
const modifier = 'me';
const version = new Version('1'); const version = new Version('1');
it('should update url and schemas', () => { it('should update url and schemas', () => {
const webhook_1 = new WebhookDto('id1', 'token1', user, user, now, now, version, [], 'http://squidex.io/hook', 1, 2, 3, 4); const webhook_1 = new WebhookDto('id1', 'token1', creator, creator, creation, creation, version, [], 'http://squidex.io/hook', 1, 2, 3, 4);
const webhook_2 = const webhook_2 =
webhook_1.update(new UpdateWebhookDto('http://squidex.io/hook2', webhook_1.update(new UpdateWebhookDto('http://squidex.io/hook2',
[ [
new WebhookSchemaDto('1', true, true, true, true, true), new WebhookSchemaDto('1', true, true, true, true, true),
new WebhookSchemaDto('2', true, true, true, true, true) new WebhookSchemaDto('2', true, true, true, true, true)
]), user, now); ]), modifier, modified);
expect(webhook_2.url).toEqual('http://squidex.io/hook2'); expect(webhook_2.url).toEqual('http://squidex.io/hook2');
expect(webhook_2.schemas.length).toEqual(2); expect(webhook_2.schemas.length).toEqual(2);
expect(webhook_2.lastModified).toEqual(modified);
expect(webhook_2.lastModifiedBy).toEqual(modifier);
}); });
}); });

2
src/Squidex/tsconfig.json

@ -9,7 +9,7 @@
"noUnusedParameters": false, "noUnusedParameters": false,
"removeComments": false, "removeComments": false,
"sourceMap": true, "sourceMap": true,
"strictNullChecks": true, "strictNullChecks": false,
"suppressImplicitAnyIndexErrors": true, "suppressImplicitAnyIndexErrors": true,
"target": "es5", "target": "es5",
"paths": { "paths": {

Loading…
Cancel
Save