added ability to revert (#21)

This commit is contained in:
undergroundwires
2020-07-15 19:04:56 +01:00
parent 57028987f1
commit 9c063d59de
58 changed files with 1448 additions and 265 deletions

View File

@@ -1,15 +1,15 @@
import { IApplication, ICategory, IScript } from '@/domain/IApplication';
export class ApplicationStub implements IApplication {
public readonly totalScripts = 0;
public readonly totalCategories = 0;
public totalScripts = 0;
public totalCategories = 0;
public readonly name = 'StubApplication';
public readonly repositoryUrl = 'https://privacy.sexy';
public readonly version = '0.1.0';
public readonly categories = new Array<ICategory>();
public readonly actions = new Array<ICategory>();
public withCategory(category: ICategory): IApplication {
this.categories.push(category);
public withAction(category: ICategory): IApplication {
this.actions.push(category);
return this;
}
public findCategory(categoryId: number): ICategory {
@@ -19,12 +19,51 @@ export class ApplicationStub implements IApplication {
throw new Error('Method not implemented.');
}
public findScript(scriptId: string): IScript {
throw new Error('Method not implemented.');
return this.getAllScripts().find((script) => scriptId === script.id);
}
public getAllScripts(): ReadonlyArray<IScript> {
throw new Error('Method not implemented.');
const scripts = [];
for (const category of this.actions) {
const categoryScripts = getScriptsRecursively(category);
scripts.push(...categoryScripts);
}
return scripts;
}
public getAllCategories(): ReadonlyArray<ICategory> {
throw new Error('Method not implemented.');
const categories = [];
categories.push(...this.actions);
for (const category of this.actions) {
const subCategories = getSubCategoriesRecursively(category);
categories.push(...subCategories);
}
return categories;
}
}
function getSubCategoriesRecursively(category: ICategory): ReadonlyArray<ICategory> {
const subCategories = [];
if (category.subCategories) {
for (const subCategory of category.subCategories) {
subCategories.push(subCategory);
subCategories.push(...getSubCategoriesRecursively(subCategory));
}
}
return subCategories;
}
function getScriptsRecursively(category: ICategory): ReadonlyArray<IScript> {
const categoryScripts = [];
if (category.scripts) {
for (const script of category.scripts) {
categoryScripts.push(script);
}
}
if (category.subCategories) {
for (const subCategory of category.subCategories) {
const subCategoryScripts = getScriptsRecursively(subCategory);
categoryScripts.push(...subCategoryScripts);
}
}
return categoryScripts;
}

View File

@@ -1,9 +1,9 @@
import { ScriptStub } from './ScriptStub';
import { BaseEntity } from '@/infrastructure/Entity/BaseEntity';
import { ICategory, IScript } from '@/domain/ICategory';
import { ScriptStub } from './ScriptStub';
export class CategoryStub extends BaseEntity<number> implements ICategory {
public readonly name = `category-with-id-${this.id}`;
public name = `category-with-id-${this.id}`;
public readonly subCategories = new Array<ICategory>();
public readonly scripts = new Array<IScript>();
public readonly documentationUrls = new Array<string>();
@@ -13,14 +13,22 @@ export class CategoryStub extends BaseEntity<number> implements ICategory {
}
public withScriptIds(...scriptIds: string[]): CategoryStub {
for (const scriptId of scriptIds) {
this.scripts.push(new ScriptStub(scriptId));
this.withScript(new ScriptStub(scriptId));
}
return this;
}
public withScripts(...scripts: IScript[]): CategoryStub {
for (const script of scripts) {
this.scripts.push(script);
this.withScript(script);
}
return this;
}
public withScript(script: IScript): CategoryStub {
this.scripts.push(script);
return this;
}
public withName(categoryName: string) {
this.name = categoryName;
return this;
}
}

View File

@@ -1,7 +1,12 @@
import { BaseEntity } from '@/infrastructure/Entity/BaseEntity';
export class NumericEntityStub extends BaseEntity<number> {
public customProperty = 'customProperty';
constructor(id: number) {
super(id);
}
public withCustomProperty(value: string): NumericEntityStub {
this.customProperty = value;
return this;
}
}

View File

@@ -1,18 +1,34 @@
import { BaseEntity } from '@/infrastructure/Entity/BaseEntity';
import { IScript } from './../../../src/domain/IScript';
import { IScript } from '@/domain/IScript';
export class ScriptStub extends BaseEntity<string> implements IScript {
public readonly name = `name${this.id}`;
public readonly code = `name${this.id}`;
public name = `name${this.id}`;
public code = `REM code${this.id}`;
public revertCode = `REM revertCode${this.id}`;
public readonly documentationUrls = new Array<string>();
public isRecommended = false;
constructor(public readonly id: string) {
super(id);
}
public canRevert(): boolean {
return Boolean(this.revertCode);
}
public withIsRecommended(value: boolean): ScriptStub {
this.isRecommended = value;
return this;
}
public withCode(value: string): ScriptStub {
this.code = value;
return this;
}
public withName(name: string): ScriptStub {
this.name = name;
return this;
}
public withRevertCode(revertCode: string): ScriptStub {
this.revertCode = revertCode;
return this;
}
}