浏览代码

FD3-295 fix merge

Guillermo Espinoza 7 年之前
父节点
当前提交
01dfbbdca9

+ 7 - 1
app/config/config.yml

@@ -86,12 +86,18 @@ doctrine:
         naming_strategy: doctrine.orm.naming_strategy.underscore
         auto_mapping: true
         filters:
-            tenancy_filter: Base\AdminBundle\Filter\TenancyFilter
+            soft_deleteable:
+              class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
+              enabled: true
+            tenancy_filter:
+              class: Base\AdminBundle\Filter\TenancyFilter
+              enabled: true
 
 stof_doctrine_extensions:
     orm:
         default:
             timestampable: true
+            softdeleteable: true
 
 # Swiftmailer Configuration
 swiftmailer:

+ 26 - 6
app/config/routing.yml

@@ -23,11 +23,6 @@ homepage:
         path: /admin/dashboard
         permanent: true
 
-ftth_onu_api:
-    resource: "@FTTHBundle/Controller/ONURESTController.php"
-    type:   rest
-    prefix:   /api
-
 webservice:
     resource: "@WebserviceBundle/Resources/config/routing.yml"
     prefix:   /
@@ -69,7 +64,32 @@ audit:
 base_admin:
     resource: "@BaseAdminBundle/Resources/config/routing.yml"
 
+ftth_onu_api:
+    resource: "@FTTHBundle/Controller/REST/ONURESTController.php"
+    type:   rest
+    prefix:   /api
+
 ftth_profile_api:
-    resource: "@FTTHBundle/Controller/ProfileRESTController.php"
+    resource: "@FTTHBundle/Controller/REST/ProfileRESTController.php"
     type:   rest
     prefix:   /api
+
+ftth_onu_model_api:
+    resource: "@FTTHBundle/Controller/REST/ONUModelRESTController.php"
+    type:   rest
+    prefix:   /api
+
+ftth_olt_model_api:
+    resource: "@FTTHBundle/Controller/REST/OLTModelRESTController.php"
+    type:   rest
+    prefix:   /api
+
+ftth_nap_api:
+    resource: "@FTTHBundle/Controller/REST/NAPRESTController.php"
+    type:   rest
+    prefix:   /api
+
+ftth_olt_api:
+    resource: "@FTTHBundle/Controller/REST/OLTRESTController.php"
+    type:   rest
+    prefix:   /api

+ 5 - 3
composer.json

@@ -124,6 +124,9 @@
         "doctrine/doctrine-migrations-bundle": "^1.2",
         "doctrine/instantiator": "^1.0.5",
         "doctrine/orm": "^2.5",
+        "evence/soft-deleteable-extension-bundle": "^1.3",
+        "gedmo/doctrine-extensions": "^2.4",
+        "hwi/oauth-bundle": "^0.5.3",
         "ik/audit-bundle": "dev-master",
         "ik/auth-bundle": "dev-master",
         "ik/base-admin-bundle": "dev-master",
@@ -133,15 +136,14 @@
         "ik/map-bundle": "dev-master",
         "ik/migrations-bundle": "dev-master",
         "ik/oauthclient-bundle": "dev-master",
-        "ik/webservice-bundle": "dev-master",
-        "hwi/oauth-bundle": "^0.5.3",
         "ik/owner-voter-bundle": "dev-master",
         "ik/template-bundle": "dev-master",
+        "ik/webservice-bundle": "dev-master",
         "ik/workflow-bundle": "dev-master",
         "incenteev/composer-parameter-handler": "^2.0",
+        "jdorn/sql-formatter": "^1.2.17",
         "jms/serializer": "^1.9.0",
         "jms/serializer-bundle": "^1.5.0",
-        "jdorn/sql-formatter": "^1.2.17",
         "php-amqplib/rabbitmq-bundle": "^1.12",
         "samsonasik/package-versions": "1.1.0",
         "sensio/distribution-bundle": "^5.0.21",

文件差异内容过多而无法显示
+ 1023 - 634
composer.lock


+ 8 - 5
src/FTTHBundle/Admin/OLTAdmin.php

@@ -37,6 +37,7 @@ class OLTAdmin extends WorkflowBaseAdmin
             ->add('snmpCommunity')
             ->add('sshUser')
             ->add('sshPass')
+            ->add('enable')
 //            ->add('workflow')
             ->add('currentState','string', array('template' => 'WorkflowBundle:Workflow:base_list_field_current_state.html.twig'))
             ->add('_action', 'with-workflow-action', array(
@@ -58,16 +59,17 @@ class OLTAdmin extends WorkflowBaseAdmin
         $formMapper
                 ->tab('default')
                     ->with('')
-            ->add('name')
-            ->add('model')
+                        ->add('name')
+                        ->add('model')
                     ->end()
                 ->end()
                 ->tab('configuration')
                     ->with('OLT')
-            ->add('ip')
-            ->add('snmpCommunity')
-            ->add('sshUser')
+                        ->add('ip')
+                        ->add('snmpCommunity')
+                        ->add('sshUser')
                         ->add('sshPass')
+                        ->add('enable')
                     ->end()
                 ->end()
                 ->tab('stats')
@@ -96,6 +98,7 @@ class OLTAdmin extends WorkflowBaseAdmin
                     ->add('snmpCommunity')
                     ->add('sshUser')
                     ->add('sshPass')
+                    ->add('enable')
                 ->end()
             ->end()   
             ->tab('Log')

+ 16 - 0
src/FTTHBundle/Admin/ONUAdmin.php

@@ -169,4 +169,20 @@ class ONUAdmin extends WorkflowBaseAdmin
         $this->setTemplate('create', 'FTTHBundle:ONU:form.html.twig');
         $this->setTemplate('edit', 'FTTHBundle:ONU:form.html.twig');
     }
+
+    public function create($object){
+	    $em = $this->get("doctrine.orm.entity_manager");
+	    $em->getFilters()->disable('soft_deleteable');
+	    $alt = $em->getRepository("FTTHBundle:ONU")->findOneBy(array('ponSerialNumber' => $object->getPonSerialNumber()));
+	    if($alt and $alt->isDeleted()){
+		    $object->setId($alt->getId());
+		    $object->setDeletedAt(NULL);
+		    $object->setCreated(new \DateTime());
+		    $object->setUpdated(new \DateTime());
+		    $object = $em->merge($object);
+	    }
+
+	    $em->getFilters()->enable('soft_deleteable');
+	    return parent::create($object);
+    }
 }

+ 32 - 0
src/FTTHBundle/Controller/REST/NAPRESTController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace FTTHBundle\Controller\REST;
+
+use FOS\RestBundle\Controller\Annotations\RouteResource;
+use FTTHBundle\Form\NAPType;
+use WebserviceBundle\Controller\RESTController;
+
+/**
+ * NAP controller.
+ * @RouteResource("NAP")
+ */
+class NAPRESTController extends RESTController
+{
+    
+    /**
+     * @return string Retorna el nombre de la Entity de trabajo.
+     */
+    public function getRepository()
+    {
+        return 'FTTHBundle:NAP';
+    }
+
+    /**
+     * @return string Retorna el tipo de la clase.
+     */
+    public function getFormEntityType()
+    {
+        return get_class(new NAPType());
+    }
+    
+}

+ 32 - 0
src/FTTHBundle/Controller/REST/OLTModelRESTController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace FTTHBundle\Controller\REST;
+
+use FOS\RestBundle\Controller\Annotations\RouteResource;
+use FTTHBundle\Form\OLTModelType;
+use WebserviceBundle\Controller\RESTController;
+
+/**
+ * OLTModel controller.
+ * @RouteResource("OLTModel")
+ */
+class OLTModelRESTController extends RESTController
+{
+    
+    /**
+     * @return string Retorna el nombre de la Entity de trabajo.
+     */
+    public function getRepository()
+    {
+        return 'FTTHBundle:OLTModel';
+    }
+
+    /**
+     * @return string Retorna el tipo de la clase.
+     */
+    public function getFormEntityType()
+    {
+        return get_class(new OLTModelType());
+    }
+    
+}

+ 32 - 0
src/FTTHBundle/Controller/REST/OLTRESTController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace FTTHBundle\Controller\REST;
+
+use FOS\RestBundle\Controller\Annotations\RouteResource;
+use FTTHBundle\Form\OLTType;
+use WebserviceBundle\Controller\RESTController;
+
+/**
+ * OLT controller.
+ * @RouteResource("OLT")
+ */
+class OLTRESTController extends RESTController
+{
+    
+    /**
+     * @return string Retorna el nombre de la Entity de trabajo.
+     */
+    public function getRepository()
+    {
+        return 'FTTHBundle:OLT';
+    }
+
+    /**
+     * @return string Retorna el tipo de la clase.
+     */
+    public function getFormEntityType()
+    {
+        return get_class(new OLTType());
+    }
+    
+}

+ 32 - 0
src/FTTHBundle/Controller/REST/ONUModelRESTController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace FTTHBundle\Controller\REST;
+
+use FOS\RestBundle\Controller\Annotations\RouteResource;
+use FTTHBundle\Form\ONUModelType;
+use WebserviceBundle\Controller\RESTController;
+
+/**
+ * ONUModel controller.
+ * @RouteResource("ONUModel")
+ */
+class ONUModelRESTController extends RESTController
+{
+    
+    /**
+     * @return string Retorna el nombre de la Entity de trabajo.
+     */
+    public function getRepository()
+    {
+        return 'FTTHBundle:ONUModel';
+    }
+
+    /**
+     * @return string Retorna el tipo de la clase.
+     */
+    public function getFormEntityType()
+    {
+        return get_class(new ONUModelType());
+    }
+    
+}

+ 1 - 1
src/FTTHBundle/Controller/ONURESTController.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace FTTHBundle\Controller;
+namespace FTTHBundle\Controller\REST;
 
 use FTTHBundle\Entity\ONU;
 use FTTHBundle\Form\ONUType;

+ 1 - 5
src/FTTHBundle/Controller/ProfileRESTController.php

@@ -1,16 +1,12 @@
 <?php
 
-namespace FTTHBundle\Controller;
+namespace FTTHBundle\Controller\REST;
 
-use FTTHBundle\Entity\ONU;
-use FTTHBundle\Form\ONUType;
 use FOS\RestBundle\Controller\Annotations\RouteResource;
 use FOS\RestBundle\Controller\Annotations\View;
-use FOS\RestBundle\Util\Codes;
 use FOS\RestBundle\View\View as FOSView;
 use FTTHBundle\Form\ProfileType;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
 use WebserviceBundle\Controller\RESTController;
 use FOS\RestBundle\Controller\Annotations as Rest;
 

+ 4 - 0
src/FTTHBundle/Entity/NAP.php

@@ -48,11 +48,15 @@ class NAP implements TenancyIdTraitInterface, LocationInterface
 
     /**
      * @ORM\ManyToOne(targetEntity="NAP", fetch="EXTRA_LAZY")
+     * 
+     * @JMS\MaxDepth(1)
      */
     protected $parent;
 
     /**
      * @ORM\OneToMany(targetEntity="ONU", mappedBy="nap", fetch="EXTRA_LAZY")
+     * 
+     * @JMS\MaxDepth(2)
      */
     protected $onus;
 

+ 34 - 2
src/FTTHBundle/Entity/OLT.php

@@ -6,6 +6,7 @@ use Base\AdminBundle\Traits\TenancyIdTrait;
 use Base\AdminBundle\Traits\TenancyIdTraitInterface;
 use Doctrine\ORM\Mapping as ORM;
 use ExtraDataBundle\Entity\Traits\ExtraDataTrait;
+use JMS\Serializer\Annotation as JMS;
 use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\Workflow\Exception\ExceptionInterface;
@@ -85,11 +86,15 @@ class OLT implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
     /**
      * @ORM\ManyToOne(targetEntity="OLTModel", inversedBy="olts", fetch="EXTRA_LAZY")
      * @ORM\JoinColumn(name="model_id", referencedColumnName="id", onDelete="SET NULL")
+     * 
+     * @JMS\MaxDepth(1)
      */
     protected $model;
 
     /**
      * @ORM\OneToMany(targetEntity="ONU", mappedBy="olt", fetch="EXTRA_LAZY")
+     * 
+     * @JMS\MaxDepth(2)
      */
     protected $onus;
 
@@ -106,6 +111,8 @@ class OLT implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
     /**
      * @ORM\ManyToOne(targetEntity="\WorkflowBundle\Entity\Workflow", fetch="EXTRA_LAZY")
      * @ORM\JoinColumn(name="workflow_id", referencedColumnName="id", onDelete="SET NULL")
+     * 
+     * @JMS\MaxDepth(1)
      */
     protected $workflow;
 
@@ -133,7 +140,12 @@ class OLT implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
      * @ORM\Column(type="integer", options={"unsigned":true, "default":5})
      */
     protected $timeOnuStats = 5;
-
+    
+    /**
+     * @ORM\Column(type="string", nullable=true)
+     */
+    protected $enable;
+    
 
     /**
      * @return string
@@ -447,5 +459,25 @@ class OLT implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
     {
         return $this->timePonStats;
     }
+    
+    /**
+     * @return string
+     */
+    public function getEnable() 
+    {
+        return $this->enable;
+    }
+
+    /**
+     * @param string $enable
+     * 
+     * @return $this
+     */
+    public function setEnable($enable) 
+    {
+        $this->enable = $enable;
+        
+        return $this;
+    }   
 
-}
+}

+ 3 - 0
src/FTTHBundle/Entity/OLTModel.php

@@ -6,6 +6,7 @@ use Base\AdminBundle\Traits\TenancyIdTrait;
 use Base\AdminBundle\Traits\TenancyIdTraitInterface;
 use Doctrine\ORM\Mapping as ORM;
 use ExtraDataBundle\Entity\Traits\ExtraDataTrait;
+use JMS\Serializer\Annotation as JMS;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
@@ -36,6 +37,8 @@ class OLTModel implements TenancyIdTraitInterface
     
     /**
      * @ORM\OneToMany(targetEntity="OLT", mappedBy="model", fetch="EXTRA_LAZY")
+     * 
+     * @JMS\MaxDepth(2)
      */
     protected $olts;
 

+ 33 - 2
src/FTTHBundle/Entity/ONU.php

@@ -6,7 +6,6 @@ use Base\AdminBundle\Traits\TenancyIdTrait;
 use Base\AdminBundle\Traits\TenancyIdTraitInterface;
 use Doctrine\ORM\Mapping as ORM;
 use ExtraDataBundle\Entity\Traits\ExtraDataTrait;
-use Gedmo\Mapping\Annotation as Gedmo;
 use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\Workflow\Exception\ExceptionInterface;
@@ -17,6 +16,8 @@ use MapBundle\Entity\Interfaces\LocationInterface;
 use MapBundle\Entity\Traits\LocationTrait;
 use WorkflowBundle\Entity\Interfaces\WorkflowInterface;
 use WorkflowBundle\Entity\Traits\WorkflowTrait;
+use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity as SoftDeleteable;
+use Gedmo\Mapping\Annotation as Gedmo;
 
 /**
  * ONU
@@ -24,6 +25,7 @@ use WorkflowBundle\Entity\Traits\WorkflowTrait;
  * @ORM\Entity(repositoryClass="FTTHBundle\Repository\ONURepository")
  * @UniqueEntity(fields={"ponSerialNumber", "tenancyId"}, message="errors.duplicate_key")
  * @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="unique_idx", columns={"pon_serial_number", "tenancy_id"})})
+ * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=true)
  *
  * @ValidatorAssert\Device
  */
@@ -34,6 +36,7 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
     use TenancyIdTrait;
     use LocationTrait;
     use WorkflowTrait;
+    use SoftDeleteable;
 
     /**
      * @var int
@@ -149,8 +152,8 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
      * @ORM\Column(type="integer", nullable=false, options={"default": "0"})
      */
     private $position = 0;
-    
 
+    
     /**
      * @return string
      */
@@ -169,6 +172,20 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
         return $this->id;
     }
 
+    /**
+     * Get id
+     *
+     * @param int
+     *
+     * @return ONU
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+	return $this;
+    }
+
     /**
      * Set ip
      *
@@ -299,6 +316,20 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
         return $this->created;
     }
 
+    /**
+     * Set created
+     *
+     * @param \DateTime
+     *
+     * @return ONU
+     */
+    public function setCreated($d)
+    {
+        $this->created = $d;
+	return $this;
+    }
+
+
     /**
      * Get updated
      *

+ 4 - 0
src/FTTHBundle/Entity/ONUModel.php

@@ -6,6 +6,7 @@ use Base\AdminBundle\Traits\TenancyIdTrait;
 use Base\AdminBundle\Traits\TenancyIdTraitInterface;
 use Doctrine\ORM\Mapping as ORM;
 use ExtraDataBundle\Entity\Traits\ExtraDataTrait;
+use JMS\Serializer\Annotation as JMS;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
@@ -38,9 +39,12 @@ class ONUModel implements TenancyIdTraitInterface
 
     /**
      * @ORM\OneToMany(targetEntity="ONU", mappedBy="model")
+     * 
+     * @JMS\MaxDepth(2)
      */
     protected $onus;
 
+    
     /**
      * @return string
      */

+ 33 - 0
src/FTTHBundle/Form/NAPType.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace FTTHBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class NAPType extends AbstractType
+{
+    /**
+     * @param FormBuilderInterface $builder
+     * @param array $options
+     */
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->add('name')
+            ->add('extraData')
+            ->add('tenancyId')
+        ;
+    }
+    
+    /**
+     * @param OptionsResolver $resolver
+     */
+    public function configureOptions(OptionsResolver $resolver)
+    {
+        $resolver->setDefaults(array(
+            'data_class' => 'FTTHBundle\Entity\NAP'
+        ));
+    }
+}

+ 36 - 0
src/FTTHBundle/Form/OLTModelType.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace FTTHBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class OLTModelType extends AbstractType
+{
+    /**
+     * @param FormBuilderInterface $builder
+     * @param array $options
+     */
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->add('name')
+            ->add('props')
+            ->add('mark')
+            ->add('library')
+            ->add('extraData')
+            ->add('tenancyId')
+        ;
+    }
+    
+    /**
+     * @param OptionsResolver $resolver
+     */
+    public function configureOptions(OptionsResolver $resolver)
+    {
+        $resolver->setDefaults(array(
+            'data_class' => 'FTTHBundle\Entity\OLTModel'
+        ));
+    }
+}

+ 46 - 0
src/FTTHBundle/Form/OLTType.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace FTTHBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class OLTType extends AbstractType
+{
+    /**
+     * @param FormBuilderInterface $builder
+     * @param array $options
+     */
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->add('name')
+            ->add('ip')
+            ->add('snmpCommunity')
+            ->add('sshUser')
+            ->add('sshPass')
+            ->add('libraryVersion')
+            ->add('currentState')
+            ->add('transitionState')
+            ->add('executeSnmp')
+            ->add('timeScan')
+            ->add('timeOltOctets')
+            ->add('timePonStats')
+            ->add('timeOnuStats')
+            ->add('extraData')
+            ->add('tenancyId')
+            ->add('enable')
+        ;
+    }
+    
+    /**
+     * @param OptionsResolver $resolver
+     */
+    public function configureOptions(OptionsResolver $resolver)
+    {
+        $resolver->setDefaults(array(
+            'data_class' => 'FTTHBundle\Entity\OLT'
+        ));
+    }
+}

+ 33 - 0
src/FTTHBundle/Form/ONUModelType.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace FTTHBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class ONUModelType extends AbstractType
+{
+    /**
+     * @param FormBuilderInterface $builder
+     * @param array $options
+     */
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder
+            ->add('name')
+            ->add('extraData')
+            ->add('tenancyId')
+        ;
+    }
+    
+    /**
+     * @param OptionsResolver $resolver
+     */
+    public function configureOptions(OptionsResolver $resolver)
+    {
+        $resolver->setDefaults(array(
+            'data_class' => 'FTTHBundle\Entity\ONUModel'
+        ));
+    }
+}

+ 4 - 1
src/FTTHBundle/Resources/translations/FTTHBundle.es.yml

@@ -105,7 +105,8 @@ form:
     label_client: Cliente
     label_slot: Slot
     label_link: Link
-        
+    label_enable: Enable
+
 list:
     label_id: Id
     label_ip: Ip
@@ -142,6 +143,7 @@ list:
     label_library: Librería
     label_slot: Slot
     label_link: Link
+    label_enable: Enable
 
 show:
     label_id: Id
@@ -179,6 +181,7 @@ show:
     label_library: Librería
     label_slot: Slot
     label_link: Link
+    label_enable: Enable
     
 helps:
     check_address: Verifique la dirección para el cálculo de distancias.

+ 207 - 0
src/FTTHBundle/tests/Controller/REST/OLTModelRESTControllerTest.php

@@ -0,0 +1,207 @@
+<?php
+
+namespace FTTHBundle\tests\Controller\REST;
+
+use WebserviceBundle\tests\WebTestCaseBase;
+use Symfony\Component\HttpFoundation\Response;
+
+/**
+ * @package FTTHBundle\tests\Controller\REST
+ * En caso de modificar las tablas solo se deberia modificar la funcion "obtainData" agregando los campos necesarios.
+ */
+class OLTModelRESTControllerTest extends WebTestCaseBase
+{
+    /**
+     * @return string Retorna la uri a consultar.
+     */
+    protected function getUri()
+    {
+        return '/api/oltmodels.json';
+    }
+
+    /**
+     * @return string Retorna la uri a consultar.
+     */
+    protected function getUriPutDelete()
+    {
+        return '/api/oltmodels/';
+    }
+
+    /**
+     * Contiene los datos que debe retornar el webservice. La key es nombre del webservice y el
+     * value son los datos a retornar.
+     */
+    protected function obtainDataWebService()
+    {
+        $datos = [];
+
+        return $datos;
+    }
+
+    /**
+     * Genera los datos a manipular.
+     * 
+     * @param string $key Contiene la key a buscar en los datos.
+     * 
+     * @return array|string Retorna el array con los datos o el valor de la key pasada como parametro.
+     * 
+     * @throws \Exception Lanza un excepcion en caso de no encontrar la key.
+     */
+    protected function obtainData($key = null)
+    {
+        $datos = [
+            'name' => 'OLT Model',
+            'props' => 'Test',
+            'mark' => 'Test',
+            'library' => 'Test',
+            'extraData' => '',
+            'tenancyId' => '1',
+        ];
+
+        if ($key == null) {
+            return $datos;
+        } else {
+            if (isset($datos[$key])) {
+                return $datos[$key];
+            } else {
+                throw new \Exception("No se seteo la key del dato a obtener. key=" . $key);
+            }
+        }
+    }
+
+    /**
+     * @param string $uri Contiene la direccion.
+     * @param array $data Contiene los filtros a utilizar en la busqueda.
+     * 
+     * @return null|Response Retorna el response.
+     */
+    private function generateGET($uri = null, $data = null)
+    {
+        $this->initDefault();
+        if ($uri == null) {
+            $uri = $this->getUri();
+        }
+        // realizo la consulta
+        if ($data == null) {
+            $data = [   
+                'name' => $this->obtainData('name'), 
+                'tenancyId' => $this->obtainData('tenancyId'),
+            ];
+        }
+        $this->getClient()->request('GET', $uri . $this->generateFilters($data));
+        
+        return $this->getClient()->getResponse();
+    }
+
+    /**
+     * Sobreescribe el device.device_listener
+     */
+    private function setListener()
+    {
+        $webservicemock = $this->getContainerObject('webservice');
+        $listener = $this->getContainerObject('device.device_listener');
+        $listener->setWebservice($webservicemock);
+        //$this->setContainerObject('device.device_listener', $listener);
+        $validator = $this->getContainerObject('device.device_validator');
+        $validator->setWebservice($webservicemock);
+        //$this->setContainerObject('device.device_validator', $validator);
+    }
+
+    /**
+     * Realiza el alta.
+     */
+    public function testPOST()
+    {
+        // inicializo con los datos del webservicemock
+        $this->initDefault($this->obtainDataWebService());
+        // seteo los datos del listener
+        $this->setListener();
+        // hago la inserccion llamando al servicio por post
+        $this->getClient()->request('POST', $this->getUri(), $this->obtainData());
+        // obtengo la respuesta
+        $response = $this->getClient()->getResponse();
+        $this->assertEquals(201, $response->getStatusCode(), "Error en la respuesta http.");
+    }
+
+    /**
+     * Realiza una busqueda.
+     */
+    public function testGET_POST()
+    {
+        // obtengo la respuesta
+        $response = $this->generateGET();
+        // verifco el resultado
+        $this->assertEquals(200, $response->getStatusCode(), "Error en la respuesta http.");
+        $this->assertJson($response->getContent(), "No se obtuvo un objeto json.");
+        $this->assertContains($this->obtainData('name'), $response->getContent(), "Error al buscar");
+    }
+
+    /**
+     * Realiza una modificacion
+     */
+    public function testPUT()
+    {
+        // realizo la consulta
+        $response = $this->generateGET();
+        // busco el id
+        $id = $this->getProperty($response, 'id');
+        // inicializo con los datos del webservicemock
+        $this->initDefault($this->obtainDataWebService());
+        // seteo los datos del listener
+        $this->setListener();
+        // creo el nuevo set de datos a enviar.
+        $data = $this->obtainDataChange($this->obtainData(), [   
+            'name' => 'OLT Model edit', 
+            'id' => $id,
+        ]);
+        // hago la modificacion llamando al servicio por put
+        $this->getClient()->request('PUT', $this->getUriPutDelete() . $id, $data);
+        // obtengo la respuesta
+        $response = $this->getClient()->getResponse();
+        $this->assertEquals(200, $response->getStatusCode(), "Error en la respuesta http.");
+    }
+
+    /**
+     * Realiza una busqueda
+     */
+    public function testGET_PUT()
+    {
+        $response = $this->generateGET();
+        // verifco el resultado
+        $this->assertEquals(200, $response->getStatusCode(), "Error en la respuesta http.");
+        $this->assertJson($response->getContent(), "No se obtuvo un objeto json.");
+        $this->assertContains('OLT Model edit', $response->getContent(), "Error al buscar olt model modificado.");
+    }
+    
+    /**
+     * Realiza una baja
+     */
+    public function testDELETE()
+    {
+        // realizo la consulta
+        $response = $this->generateGET();
+        // obtengo el id de la respuesta de la busqueda
+        $id = $this->getProperty($response, 'id');
+        $this->initDefault();
+        // realizo la consulta
+        $data = [    
+            'tenancy' => 1,
+        ];
+        $this->getClient()->request('DELETE', $this->getUriPutDelete() . $id, $data);
+        // obtengo la respuesta
+        $response = $this->getClient()->getResponse();
+        $this->assertEquals(204, $response->getStatusCode(), "Error en la respuesta http.");
+    }
+
+    /**
+     * Realiza una busqueda
+     */
+    public function testGET_DELETE()
+    {
+        $response = $this->generateGET();
+        // verifco el resultado
+        $this->assertEquals(200, $response->getStatusCode(), "Error en la respuesta http.");
+        $this->assertJson($response->getContent(), "No se obtuvo un objeto json.");
+    }
+
+}