From 7b49508b1188866202b86a7d71343a9e73de83a1 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Tue, 25 Apr 2017 22:06:10 -0400 Subject: [PATCH] Send verification email if needed, return 202 if ticket needs to be verified --- .../Tickets/CreatedTicketModel.php | 17 ++++++ api/BusinessLogic/Tickets/TicketCreator.php | 8 ++- .../Tickets/CustomerTicketController.php | 2 +- .../CreateTicketForCustomerTest.php | 56 +++++++++---------- 4 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 api/BusinessLogic/Tickets/CreatedTicketModel.php diff --git a/api/BusinessLogic/Tickets/CreatedTicketModel.php b/api/BusinessLogic/Tickets/CreatedTicketModel.php new file mode 100644 index 00000000..daeee757 --- /dev/null +++ b/api/BusinessLogic/Tickets/CreatedTicketModel.php @@ -0,0 +1,17 @@ +ticket = $ticket; + $this->emailVerified = $emailVerified; + } +} \ No newline at end of file diff --git a/api/BusinessLogic/Tickets/TicketCreator.php b/api/BusinessLogic/Tickets/TicketCreator.php index 2aed0579..1c0c0818 100644 --- a/api/BusinessLogic/Tickets/TicketCreator.php +++ b/api/BusinessLogic/Tickets/TicketCreator.php @@ -75,7 +75,7 @@ class TicketCreator { * @param $ticketRequest CreateTicketByCustomerModel * @param $heskSettings array HESK settings * @param $userContext - * @return Ticket The newly created ticket + * @return CreatedTicketModel The newly created ticket along with if the email is verified or not * @throws ValidationException When a required field in $ticket_request is missing * @throws \Exception When the default status for new tickets is not found */ @@ -143,8 +143,10 @@ class TicketCreator { $addressees = new Addressees(); $addressees->to = $this->getAddressees($ticket->email); - if ($ticketRequest->sendEmailToCustomer) { + if ($ticketRequest->sendEmailToCustomer && $emailVerified) { $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_TICKET, $ticketRequest->language, $addressees, $ticket, $heskSettings, $modsForHeskSettings); + } else if ($modsForHeskSettings[''] && !$emailVerified) { + $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::VERIFY_EMAIL, $ticketRequest->language, $addressees, $ticket, $heskSettings, $modsForHeskSettings); } if ($ticket->ownerId !== null) { @@ -166,7 +168,7 @@ class TicketCreator { } } - return $ticket; + return new CreatedTicketModel($ticket, $emailVerified); } private function getAddressees($emailAddress) { diff --git a/api/Controllers/Tickets/CustomerTicketController.php b/api/Controllers/Tickets/CustomerTicketController.php index a8b05b9b..7b9d455e 100644 --- a/api/Controllers/Tickets/CustomerTicketController.php +++ b/api/Controllers/Tickets/CustomerTicketController.php @@ -33,7 +33,7 @@ class CustomerTicketController { $ticket = $ticketCreator->createTicketByCustomer($this->buildTicketRequestFromJson($jsonRequest), $hesk_settings, $userContext); - return output($ticket, 201); + return output($ticket->ticket, $ticket->emailVerified ? 201 : 202); } /** diff --git a/api/Tests/BusinessLogic/Tickets/TicketCreatorTests/CreateTicketForCustomerTest.php b/api/Tests/BusinessLogic/Tickets/TicketCreatorTests/CreateTicketForCustomerTest.php index 29b88a2b..a0a3ea07 100644 --- a/api/Tests/BusinessLogic/Tickets/TicketCreatorTests/CreateTicketForCustomerTest.php +++ b/api/Tests/BusinessLogic/Tickets/TicketCreatorTests/CreateTicketForCustomerTest.php @@ -164,7 +164,7 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->trackingId, self::equalTo('123-456-7890')); + self::assertThat($ticket->ticket->trackingId, self::equalTo('123-456-7890')); } function testItSetsTheNextUserForAutoassign() { @@ -183,7 +183,7 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->ownerId, self::equalTo(1)); + self::assertThat($ticket->ticket->ownerId, self::equalTo(1)); } function testItDoesntCallTheAutoassignerWhenDisabledInHesk() { @@ -194,7 +194,7 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->ownerId, self::equalTo(null)); + self::assertThat($ticket->ticket->ownerId, self::equalTo(null)); } function testItTransformsTheBasicProperties() { @@ -221,20 +221,20 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->name, self::equalTo($this->ticketRequest->name)); - self::assertThat($ticket->email, self::equalTo($this->ticketRequest->email)); - self::assertThat($ticket->priorityId, self::equalTo($this->ticketRequest->priority)); - self::assertThat($ticket->categoryId, self::equalTo($this->ticketRequest->category)); - self::assertThat($ticket->subject, self::equalTo($this->ticketRequest->subject)); - self::assertThat($ticket->message, self::equalTo($this->ticketRequest->message)); - self::assertThat($ticket->usesHtml, self::equalTo($this->ticketRequest->html)); - self::assertThat($ticket->customFields[1], self::equalTo($this->ticketRequest->customFields[1])); - self::assertThat($ticket->location, self::equalTo($this->ticketRequest->location)); - self::assertThat($ticket->suggestedArticles, self::equalTo($this->ticketRequest->suggestedKnowledgebaseArticleIds)); - self::assertThat($ticket->userAgent, self::equalTo($this->ticketRequest->userAgent)); - self::assertThat($ticket->screenResolution, self::equalTo($this->ticketRequest->screenResolution)); - self::assertThat($ticket->ipAddress, self::equalTo($this->ticketRequest->ipAddress)); - self::assertThat($ticket->language, self::equalTo($this->ticketRequest->language)); + self::assertThat($ticket->ticket->name, self::equalTo($this->ticketRequest->name)); + self::assertThat($ticket->ticket->email, self::equalTo($this->ticketRequest->email)); + self::assertThat($ticket->ticket->priorityId, self::equalTo($this->ticketRequest->priority)); + self::assertThat($ticket->ticket->categoryId, self::equalTo($this->ticketRequest->category)); + self::assertThat($ticket->ticket->subject, self::equalTo($this->ticketRequest->subject)); + self::assertThat($ticket->ticket->message, self::equalTo($this->ticketRequest->message)); + self::assertThat($ticket->ticket->usesHtml, self::equalTo($this->ticketRequest->html)); + self::assertThat($ticket->ticket->customFields[1], self::equalTo($this->ticketRequest->customFields[1])); + self::assertThat($ticket->ticket->location, self::equalTo($this->ticketRequest->location)); + self::assertThat($ticket->ticket->suggestedArticles, self::equalTo($this->ticketRequest->suggestedKnowledgebaseArticleIds)); + self::assertThat($ticket->ticket->userAgent, self::equalTo($this->ticketRequest->userAgent)); + self::assertThat($ticket->ticket->screenResolution, self::equalTo($this->ticketRequest->screenResolution)); + self::assertThat($ticket->ticket->ipAddress, self::equalTo($this->ticketRequest->ipAddress)); + self::assertThat($ticket->ticket->language, self::equalTo($this->ticketRequest->language)); } function testItReturnsTheGeneratedPropertiesOnTheTicket() { @@ -248,9 +248,9 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->dateCreated, self::equalTo($this->ticketGatewayGeneratedFields->dateCreated)); - self::assertThat($ticket->lastChanged, self::equalTo($this->ticketGatewayGeneratedFields->dateModified)); - self::assertThat($ticket->id, self::equalTo($this->ticketGatewayGeneratedFields->id)); + self::assertThat($ticket->ticket->dateCreated, self::equalTo($this->ticketGatewayGeneratedFields->dateCreated)); + self::assertThat($ticket->ticket->lastChanged, self::equalTo($this->ticketGatewayGeneratedFields->dateModified)); + self::assertThat($ticket->ticket->id, self::equalTo($this->ticketGatewayGeneratedFields->id)); } function testItSetsTheDefaultStatus() { @@ -261,7 +261,7 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->statusId, self::equalTo(1)); + self::assertThat($ticket->ticket->statusId, self::equalTo(1)); } function testItSetsTheDefaultProperties() { @@ -272,13 +272,13 @@ class CreateTicketTest extends TestCase { $ticket = $this->ticketCreator->createTicketByCustomer($this->ticketRequest, $this->heskSettings, $this->userContext); //-- Assert - self::assertThat($ticket->archived, self::isFalse()); - self::assertThat($ticket->locked, self::isFalse()); - self::assertThat($ticket->openedBy, self::equalTo(0)); - self::assertThat($ticket->numberOfReplies, self::equalTo(0)); - self::assertThat($ticket->numberOfStaffReplies, self::equalTo(0)); - self::assertThat($ticket->timeWorked, self::equalTo('00:00:00')); - self::assertThat($ticket->lastReplier, self::equalTo(0)); + self::assertThat($ticket->ticket->archived, self::isFalse()); + self::assertThat($ticket->ticket->locked, self::isFalse()); + self::assertThat($ticket->ticket->openedBy, self::equalTo(0)); + self::assertThat($ticket->ticket->numberOfReplies, self::equalTo(0)); + self::assertThat($ticket->ticket->numberOfStaffReplies, self::equalTo(0)); + self::assertThat($ticket->ticket->timeWorked, self::equalTo('00:00:00')); + self::assertThat($ticket->ticket->lastReplier, self::equalTo(0)); } function testItChecksIfTheEmailIsVerified() {