Passed
Push — master ( bc69e6...465240 )
by Jakub
12:35
created

CharacterEffectTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 42
dl 0
loc 52
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testInitiativeEffect() 0 19 1
A testHitpointsEffect() 0 22 1
A generateCharacter() 0 6 1
1
<?php
2
declare(strict_types=1);
3
4
namespace HeroesofAbenez\Combat;
5
6
require __DIR__ . "/../../bootstrap.php";
7
8
use Tester\Assert;
9
10
/**
11
 * @author Jakub Konečný
12
 * @testCase
13
 */
14
final class CharacterEffectTest extends \Tester\TestCase {
15
  protected function generateCharacter(int $id): Character {
16
    $stats = [
17
      "id" => $id, "name" => "Player $id", "level" => 1, "initiativeFormula" => "1d2+DEX/4", "strength" => 10,
18
      "dexterity" => 10, "constitution" => 10, "intelligence" => 10, "charisma" => 10
19
    ];
20
    return new Character($stats);
21
  }
22
  
23
  public function testInitiativeEffect(): void {
24
    $character = $this->generateCharacter(1);
25
    $character->initiativeFormulaParser = new ConstantInitiativeFormulaParser(1);
26
    Assert::same(1, $character->initiative);
27
    Assert::same(1, $character->initiativeBase);
28
    $effect = new CharacterEffect([
29
      "id" => "equipment1bonusEffect",
30
      "type" => "buff",
31
      "stat" => Character::STAT_INITIATIVE,
32
      "value" => 10,
33
      "valueAbsolute" => true,
34
      "duration" => CharacterEffect::DURATION_COMBAT,
35
    ]);
36
    $character->effects[] = $effect;
37
    Assert::same(11, $character->initiative);
38
    Assert::same(1, $character->initiativeBase);
39
    $character->effects->removeByFilter(["id" => $effect->id]);
40
    Assert::same(1, $character->initiative);
41
    Assert::same(1, $character->initiativeBase);
42
  }
43
  
44
  public function testHitpointsEffect(): void {
45
    $character = $this->generateCharacter(1);
46
    $baseHitpoints = $character->constitution * Character::HITPOINTS_PER_CONSTITUTION;
47
    Assert::same($baseHitpoints, $character->maxHitpointsBase);
48
    Assert::same($baseHitpoints, $character->maxHitpoints);
49
    Assert::same($baseHitpoints, $character->hitpoints);
50
    $effect = new CharacterEffect([
51
      "id" => "equipment1bonusEffect",
52
      "type" => "buff",
53
      "stat" => Character::STAT_MAX_HITPOINTS,
54
      "value" => 10,
55
      "valueAbsolute" => true,
56
      "duration" => CharacterEffect::DURATION_COMBAT,
57
    ]);
58
    $character->effects[] = $effect;
59
    Assert::same($baseHitpoints, $character->maxHitpointsBase);
60
    Assert::same(60, $character->maxHitpoints);
61
    Assert::same(60, $character->hitpoints);
62
    $character->effects->removeByFilter(["id" => "equipment1bonusEffect"]);
63
    Assert::same($baseHitpoints, $character->maxHitpointsBase);
64
    Assert::same($baseHitpoints, $character->maxHitpoints);
65
    Assert::same($baseHitpoints, $character->hitpoints);
66
  }
67
}
68
69
$test = new CharacterEffectTest();
70
$test->run();
71
?>