issue-2-scriptAccounts #4
							
								
								
									
										73
									
								
								e2e/game-model/scriptAccounts/ScriptAccountTest.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								e2e/game-model/scriptAccounts/ScriptAccountTest.spec.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					import { BrowserContext, ElectronApplication, Page, _electron as electron } from 'playwright';
 | 
				
			||||||
 | 
					import { test, expect } from '@playwright/test';
 | 
				
			||||||
 | 
					import * as PATH from 'path';
 | 
				
			||||||
 | 
					import {GameModel} from "../../../src/app/game-model/GameModel";
 | 
				
			||||||
 | 
					import {Gamesystem} from "../../src/app/game-model/gamesystems/Gamesystem";
 | 
				
			||||||
 | 
					import {ScriptAccount} from "../../../src/app/game-model/scriptAccounts/ScriptAccount";
 | 
				
			||||||
 | 
					import {ModelComponentType} from "../../../src/app/game-model/ModelComponentType";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test.describe('Test ScriptAccounts', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test("Test ScriptAccount Creation", async () => {
 | 
				
			||||||
 | 
					    const scriptAccunt = new ScriptAccount("ScriptAccount", "Description");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(scriptAccunt.componentName).toEqual("ScriptAccount");
 | 
				
			||||||
 | 
					    expect(scriptAccunt.componentDescription).toEqual("Description");
 | 
				
			||||||
 | 
					    expect(scriptAccunt.type).toEqual(ModelComponentType.SCRIPTACCOUNT);
 | 
				
			||||||
 | 
					    expect(scriptAccunt.minValue).toEqual(0);
 | 
				
			||||||
 | 
					    expect(scriptAccunt.maxValue).toEqual(100);
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test("Test Adding ScriptAccounts", async () => {
 | 
				
			||||||
 | 
					    const gameModel: GameModel = new GameModel("GameModel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const scriptAccount = new ScriptAccount("ScriptAccount", "Description");
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.includes(scriptAccount)).toBeTruthy();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Test for duplicates
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Test for adding null value
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(null);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(undefined);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Test adding scriptAccount with already existing name
 | 
				
			||||||
 | 
					    const scriptAccount2 = new ScriptAccount("ScriptAccount", "");
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount2);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.includes(scriptAccount2)).toBeFalsy();
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test("test Removing ScriptAccounts", async () => {
 | 
				
			||||||
 | 
					    const gameModel: GameModel = new GameModel("GameModel");
 | 
				
			||||||
 | 
					    const scriptAccount = new ScriptAccount("ScriptAccount", "Description");
 | 
				
			||||||
 | 
					    const scriptAccount2 = new ScriptAccount("ScriptAccount 2", "Description");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.removeScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    gameModel.removeScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.removeScriptAccount(undefined);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.removeScriptAccount(null);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    gameModel.addScriptAccount(scriptAccount2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gameModel.removeScriptAccount(scriptAccount);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.length).toEqual(1);
 | 
				
			||||||
 | 
					    expect(gameModel.scriptAccounts.includes(scriptAccount2)).toBeTruthy();
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -1,9 +1,11 @@
 | 
				
			|||||||
import {Gamesystem} from "./gamesystems/Gamesystem";
 | 
					import {Gamesystem} from "./gamesystems/Gamesystem";
 | 
				
			||||||
 | 
					import {ScriptAccount} from "./scriptAccounts/ScriptAccount";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class GameModel {
 | 
					export class GameModel {
 | 
				
			||||||
  private readonly _gameModelName: string
 | 
					  private readonly _gameModelName: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private _gamesystems: Gamesystem[] = [];
 | 
					  private _gamesystems: Gamesystem[] = [];
 | 
				
			||||||
 | 
					  private _scriptAccounts: ScriptAccount[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(gameModelName: string) {
 | 
					  constructor(gameModelName: string) {
 | 
				
			||||||
    this._gameModelName = gameModelName;
 | 
					    this._gameModelName = gameModelName;
 | 
				
			||||||
@ -16,6 +18,9 @@ export class GameModel {
 | 
				
			|||||||
  get gamesystems(): Gamesystem[] {
 | 
					  get gamesystems(): Gamesystem[] {
 | 
				
			||||||
    return this._gamesystems;
 | 
					    return this._gamesystems;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  get scriptAccounts(): ScriptAccount[] {
 | 
				
			||||||
 | 
					    return this._scriptAccounts;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  addGamesystem(gamesystem: Gamesystem) {
 | 
					  addGamesystem(gamesystem: Gamesystem) {
 | 
				
			||||||
    if(!this.gamesystems.includes(gamesystem)) {
 | 
					    if(!this.gamesystems.includes(gamesystem)) {
 | 
				
			||||||
@ -26,4 +31,20 @@ export class GameModel {
 | 
				
			|||||||
  removeGamesystem(gamesystem : Gamesystem) {
 | 
					  removeGamesystem(gamesystem : Gamesystem) {
 | 
				
			||||||
    this._gamesystems = this._gamesystems.filter(g => g !== gamesystem);
 | 
					    this._gamesystems = this._gamesystems.filter(g => g !== gamesystem);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  addScriptAccount(scriptAccount: ScriptAccount) {
 | 
				
			||||||
 | 
					    if(scriptAccount != undefined && !this.scriptAccounts.includes(scriptAccount)) {
 | 
				
			||||||
 | 
					      const searchedScriptAccount = this.scriptAccounts.find(s => s.componentName === scriptAccount.componentName);
 | 
				
			||||||
 | 
					      if(searchedScriptAccount == undefined) {
 | 
				
			||||||
 | 
					        this.scriptAccounts.push(scriptAccount);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  removeScriptAccount(scriptAccount: ScriptAccount) {
 | 
				
			||||||
 | 
					    if(scriptAccount != undefined) {
 | 
				
			||||||
 | 
					      this._scriptAccounts = this.scriptAccounts.filter(s => s != scriptAccount);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/app/game-model/ModelComponent.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/app/game-model/ModelComponent.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					import {ModelComponentType} from "./ModelComponentType";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export abstract class ModelComponent {
 | 
				
			||||||
 | 
					  componentName: string
 | 
				
			||||||
 | 
					  componentDescription: string
 | 
				
			||||||
 | 
					  type: ModelComponentType
 | 
				
			||||||
 | 
					  constructor(componentName: string, componentDescription: string, type: ModelComponentType) {
 | 
				
			||||||
 | 
					    this.componentName = componentName;
 | 
				
			||||||
 | 
					    this.componentDescription = componentDescription;
 | 
				
			||||||
 | 
					    this.type = type;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/app/game-model/ModelComponentType.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/app/game-model/ModelComponentType.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					export enum ModelComponentType {
 | 
				
			||||||
 | 
					  SCRIPTACCOUNT
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								src/app/game-model/scriptAccounts/ScriptAccount.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/app/game-model/scriptAccounts/ScriptAccount.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					import {ModelComponent} from "../ModelComponent";
 | 
				
			||||||
 | 
					import {ModelComponentType} from "../ModelComponentType";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class ScriptAccount extends ModelComponent{
 | 
				
			||||||
 | 
					  minValue: number = 0;
 | 
				
			||||||
 | 
					  maxValue: number = 100;
 | 
				
			||||||
 | 
					  constructor(componentName: string, componentDescription: string) {
 | 
				
			||||||
 | 
					    super(componentName, componentDescription, ModelComponentType.SCRIPTACCOUNT);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user