setName('Darragh Oakwanderer') ->setPlayerName('PH') ->setRace('Halfling, stout') ->setCharacterClass('Ranger') ->setLevel(2) ->setBackground('Urchin') ->setAlignment('CN') ->setArmorClass(15) ->setInitiative(3) ->setSpeed('25 ft.') ->setHitDice('2d10') ->setStrength(12)->setDexterity(17)->setConstitution(14) ->setIntelligence(12)->setWisdom(13)->setCharisma(8) ->setSavingThrowProficiencies(['Strength', 'Dexterity']) ->setSkillProficiencies(['Sleight of Hand', 'Stealth']) ->setAttacks([['name' => 'Dart', 'bonus' => '+5', 'damage' => '1d4+5', 'range' => '20/60 ft.']]) ->setFeaturesTraits("Stout Resilience\nLucky") ->setPersonalityTraits('I eat like a pig and have bad manners'); (new \ReflectionProperty(Character::class, 'id'))->setValue($c, 1); return $c; } private function pushRequestWithSession(): void { $request = Request::create('/characters/1'); $request->setSession(new Session(new MockArraySessionStorage())); self::getContainer()->get('request_stack')->push($request); } public function testShowPageRenders(): void { self::bootKernel(); $this->pushRequestWithSession(); $c = self::getContainer(); $character = $this->darragh(); $form = $c->get('form.factory')->create(CharacterGameNotesType::class, $character); $html = $c->get('twig')->render('characters/show.html.twig', [ 'character' => $character, 'form' => $form->createView(), ]); self::assertStringContainsString('Darragh Oakwanderer', $html); self::assertStringContainsString('Halfling, stout Ranger 2', $html); self::assertStringContainsString('Stealth', $html); self::assertStringContainsString('Dart', $html); self::assertStringContainsString('Game notes', $html); } public function testEditPageRendersForNewAndExisting(): void { self::bootKernel(); $this->pushRequestWithSession(); $c = self::getContainer(); foreach ([true, false] as $isNew) { $character = $isNew ? new Character() : $this->darragh(); $form = $c->get('form.factory')->create(CharacterType::class, $character); $html = $c->get('twig')->render('characters/edit.html.twig', [ 'character' => $character, 'form' => $form->createView(), 'is_new' => $isNew, ]); self::assertStringContainsString($isNew ? 'New character' : 'Edit Darragh Oakwanderer', $html); self::assertStringContainsString('attacks[0][name]', $html); } } public function testIndexPageRendersEmptyAndPopulated(): void { self::bootKernel(); $this->pushRequestWithSession(); $twig = self::getContainer()->get('twig'); $empty = $twig->render('characters/index.html.twig', ['characters' => []]); self::assertStringContainsString('No party members yet', $empty); $populated = $twig->render('characters/index.html.twig', ['characters' => [$this->darragh()]]); self::assertStringContainsString('Darragh Oakwanderer', $populated); } }