public function testSubmitValidData()
 {
     $scale = new Scale();
     $scale->setName('Scale 1');
     $level = new Level();
     $level->setName('Level 1');
     $level->setValue(0);
     $level->setScale($scale);
     $parent = new Competency();
     $parent->setName('Competency 1');
     $parent->setScale($scale);
     $ability = new Ability();
     $ability->setName('Foo');
     $this->om->persist($scale);
     $this->om->persist($level);
     $this->om->persist($parent);
     $this->om->persist($ability);
     $this->om->flush();
     $formData = ['ability' => 'Foo', 'level' => $level->getId()];
     $form = $this->factory->create(new AbilityImportType($this->om), null, ['competency' => $parent]);
     $form->submit($formData);
     $this->assertTrue($form->isSynchronized());
     $this->assertEquals($ability, $form->getData());
     $this->assertEquals($level, $ability->getLevel());
     $this->assertViewIsValid($form, $formData);
 }
Ejemplo n.º 2
0
 public function testCreateLinkReturnsFalseIfLinkExists()
 {
     $activity = new Activity();
     $ability = new Ability();
     $ability->linkActivity($activity);
     $this->assertFalse($this->manager->createLink($activity, $ability));
 }
 /**
  * Returns the association between a competency and an ability.
  *
  * @param Competency $parent
  * @param Ability    $ability
  *
  * @return null|object
  *
  * @throws \Exception if the ability is not linked to the competency
  */
 public function findOneByTerms(Competency $parent, Ability $ability)
 {
     $link = $this->findOneBy(['competency' => $parent, 'ability' => $ability]);
     if (!$link) {
         throw new \RuntimeException("Competency {$parent->getId()} is not linked to ability {$ability->getId()}");
     }
     return $link;
 }
Ejemplo n.º 4
0
 protected function persistAbility($name, $minActivityCount = 1)
 {
     $ability = new Ability();
     $ability->setName($name);
     $ability->setMinActivityCount($minActivityCount);
     $this->om->persist($ability);
     return $ability;
 }
Ejemplo n.º 5
0
 /**
  * @param Ability $ability
  */
 public function setAbility(Ability $ability)
 {
     $this->ability = $ability;
     $this->abilityName = $ability->getName();
 }
Ejemplo n.º 6
0
 private function loadAbility(Ability $ability)
 {
     return ['id' => $ability->getId(), 'name' => $ability->getName(), 'type' => 'ability_', 'paths' => array_map(function ($link) {
         return ['level' => $link->getLevel()->getName(), 'steps' => array_map(function ($step) {
             return $step->getName();
         }, $this->competencyRepo->getPath($link->getCompetency()))];
     }, $ability->getCompetencyAbilities()->toArray())];
 }
 public function testValidAddAbilityAction()
 {
     $request = new Request();
     $parent = new Competency();
     $ability = new Ability();
     $level = new Level();
     $ability->setLevel($level);
     $this->formHandler->expects($this->once())->method('isValid')->with('hevinci_form_ability_import', $request, null, ['competency' => $parent])->willReturn(true);
     $this->formHandler->expects($this->exactly(2))->method('getData')->willReturn($ability);
     $this->manager->expects($this->once())->method('linkAbilityToCompetency')->with($parent, $ability, $level)->willReturn($ability);
     $this->assertEquals(json_encode($ability), $this->controller->addAbilityAction($request, $parent)->getContent());
 }
Ejemplo n.º 8
0
 /**
  * Creates a link between a competency and an existing ability.
  *
  * @param Competency $parent
  * @param Ability $ability
  * @param Level $level
  * @return Ability
  * @throws \LogicException if a link already exists
  */
 public function linkAbilityToCompetency(Competency $parent, Ability $ability, Level $level)
 {
     $link = $this->competencyAbilityRepo->findOneBy(['competency' => $parent, 'ability' => $ability]);
     if ($link) {
         throw new \LogicException("Ability {$ability->getId()} is already linked to competency {$parent->getId()}");
     }
     $link = new CompetencyAbility();
     $link->setCompetency($parent);
     $link->setAbility($ability);
     $link->setLevel($level);
     $this->om->persist($link);
     $this->om->flush();
     return $ability;
 }
Ejemplo n.º 9
0
 private function walkJsonNodes(\stdClass $parentData, Competency $parentCompetency, Scale $scale)
 {
     if (isset($parentData->competencies)) {
         foreach ($parentData->competencies as $competency) {
             $newCompetency = new Competency();
             $newCompetency->setName($competency->name);
             $newCompetency->setParent($parentCompetency, true);
             $this->walkJsonNodes($competency, $newCompetency, $scale);
         }
     } else {
         foreach ($parentData->abilities as $ability) {
             $newAbility = new Ability();
             $newAbility->setName($ability->name);
             $level = null;
             foreach ($scale->getLevels() as $scaleLevel) {
                 if ($scaleLevel->getName() === $ability->level) {
                     $level = $scaleLevel;
                     break;
                 }
             }
             $link = new CompetencyAbility();
             $link->setCompetency($parentCompetency);
             $link->setAbility($newAbility);
             $link->setLevel($level);
         }
     }
     return $parentCompetency;
 }