/** * @dataProvider bulkSetterProvider */ public function testSetAll(array $data, $success = true) { $keys = array_keys($data); $getters = array(); foreach ($keys as $key) { $getters[$key] = 'get' . implode('', array_map('ucfirst', explode('_', $key))); } $data = (object) $data; // cast to object if ($success !== true) { //not successful, probably expecting exceptions to be thrown: try { $constructor = new Ticket($data); } catch (\Exception $e) { $this->assertEquals($success, get_class($e)); } $ticket = new Ticket(); try { $ticket->setAll($data); } catch (\Exception $e) { $this->assertEquals($success, get_class($e)); } $this->setExpectedException($success); $ticket->setAll($data); return; } $constructor = new Ticket($data); $ticket = new Ticket($data); $this->assertEquals($constructor->toJsonData(), $ticket->toJsonData(), sprintf('expected %s and %s to match, but it would seem they do not', $ticket->toJsonData(), $constructor->toJsonData())); foreach ($data as $key => $value) { $getter = $getters[$key]; $this->assertEquals($value, $ticket->{$getter}(), sprintf('TICKET: Expected %s (via %s->%s) to be "%s", instead say "%s"', $key, get_class($ticket), $getter, $value, $ticket->{$getter}())); $this->assertEquals($value, $constructor->{$getter}(), sprintf('CONSTRUCTOR: Expected %s (via %s->%s) to be "%s", instead say "%s"', $key, get_class($constructor), $getter, $value, $constructor->{$getter}())); } }
/** * Test ticket by id method => uses tickets.json data */ public function testSingleTicket() { $ticket = new TicketM($this->data->singleTicket); $target = new TicketM(array('displayId' => $ticket->getDisplayId())); $this->restMock->method('restCall')->willReturn(json_encode($this->data->singleTicket)); $this->restMock->getTicketById($target->getDisplayId(), $target); $this->assertTrue(count($ticket->getNotes()) === count($target->getNotes())); $this->assertEquals($ticket, $target); $this->assertTrue($ticket->getDescription() === $target->getDescription()); $this->assertTrue($ticket->getSubject() === $target->getSubject()); $this->assertTrue($ticket->getStatus() === $target->getStatus()); $this->assertTrue($ticket->getStatusName() === $target->getStatusName()); $this->assertTrue($ticket->getId() === $target->getId()); $this->assertTrue($ticket->getDeleted() === $target->getDeleted()); $this->assertEquals($ticket->toJsonData(), $target->toJsonData()); if ($ticket->getNotes()) { $this->assertNotEmpty($target->getNotes()); $expected = $ticket->getNotes(); $notes = $target->getNotes(); /** @var Freshdesk\Model\Note $note */ foreach ($notes as $k => $note) { $this->assertInstanceOf(get_class($expected[$k]), $note); $this->assertTrue($expected[$k]->getDeleted() === $note->getDeleted()); $this->assertEquals($expected[$k]->toJsonData(), $note->toJsonData()); } } }
/** * Assign given ticket to responder by id * @param TicketM $ticket * @param int $responder * @return TicketM * @throws \InvalidArgumentException */ public function assignTicket(TicketM $ticket, $responder) { if (!is_numeric($responder) || $responder < 1) { throw new \InvalidArgumentException(sprintf('Failed to assign ticket #%d to "%s", responder must be a positive numeric value', $ticket->getDisplayId(), $responder)); } $url = sprintf('/helpdesk/tickets/%d/assign.json?responder_id=%d', $ticket->getDisplayId(), (int) $responder); $response = json_decode($this->restCall($url, self::METHOD_PUT)); if (is_array($response)) { //again, the docs on freshdesk.com/api are unclear. This call seems to be returning an array $response = $response[0]; } return $ticket->setAll($response); }