public function testSubscriptionLoadFromJson()
 {
     $obj = new Subscription();
     $obj->loadFromJson(json_encode($this->testArray));
     $this->assertEquals($this->testArray['object'], $obj->getObject());
     $this->assertEquals($this->testArray['callback_url'], $obj->getCallbackUrl());
     $this->assertEquals($this->testArray['fields'], $obj->getFields());
     $this->assertEquals($this->testArray['active'], $obj->getActive());
 }
 /**
  * Add a realtime callback subscription to the Application
  *
  * @param mixed $data Subscription object or JSON or associative array
  *
  * @return $this
  * @throws DuplicateObjectException thrown if this subscription is already stored
  * @throws InvalidArgumentException thrown if the data is not valid
  */
 public function addSubscription($data)
 {
     if (is_array($data)) {
         $subscription = new Subscription();
         $subscription->loadFromArray($data);
     } elseif ($arr = json_decode($data, true)) {
         $subscription = new Subscription();
         $subscription->loadFromJson($data);
     } elseif ($data instanceof Subscription) {
         $subscription = $data;
     }
     if (isset($subscription) && $subscription instanceof Subscription) {
         if ($subscription->valid() && $this->duplicateSubscription($subscription)) {
             throw new DuplicateObjectException(sprintf('Duplicate Object for %s', $subscription));
         } elseif (!$subscription->valid()) {
             throw new InvalidArgumentException('Empty or invalid subscription object passed to ' . __METHOD__);
         }
         $this->subscriptions[] = $subscription;
     } else {
         throw new InvalidArgumentException(sprintf('%s expects valid Subscription object or valid JSON or valid array', __METHOD__));
     }
     return $this;
 }