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 {ScriptAccount} from "./scriptAccounts/ScriptAccount";
 | 
			
		||||
 | 
			
		||||
export class GameModel {
 | 
			
		||||
  private readonly _gameModelName: string
 | 
			
		||||
 | 
			
		||||
  private _gamesystems: Gamesystem[] = [];
 | 
			
		||||
  private _scriptAccounts: ScriptAccount[] = [];
 | 
			
		||||
 | 
			
		||||
  constructor(gameModelName: string) {
 | 
			
		||||
    this._gameModelName = gameModelName;
 | 
			
		||||
@ -16,6 +18,9 @@ export class GameModel {
 | 
			
		||||
  get gamesystems(): Gamesystem[] {
 | 
			
		||||
    return this._gamesystems;
 | 
			
		||||
  }
 | 
			
		||||
  get scriptAccounts(): ScriptAccount[] {
 | 
			
		||||
    return this._scriptAccounts;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addGamesystem(gamesystem: Gamesystem) {
 | 
			
		||||
    if(!this.gamesystems.includes(gamesystem)) {
 | 
			
		||||
@ -26,4 +31,20 @@ export class GameModel {
 | 
			
		||||
  removeGamesystem(gamesystem : 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