diff --git a/features/bootstrap/ApiContext.php b/features/bootstrap/ApiContext.php index 8deb023851..53f1405c3b 100644 --- a/features/bootstrap/ApiContext.php +++ b/features/bootstrap/ApiContext.php @@ -548,12 +548,9 @@ public function iWantToConfirmTheContextEmailWithToken($context, $token) $context = $this->getContext($context); $module = $this->getModuleName($context); $request = '\Commercetools\Core\Request\\' . $module . '\\' . $context . 'EmailConfirmRequest'; - $requestContext = $context . 'Request'; - $id = $this->objects[$requestContext]['id']; - $version = $this->objects[$requestContext]['version']; $this->request = call_user_func_array( - $request. '::ofIdVersionAndToken', - [$id, $version, $token] + $request. '::ofToken', + [$token] ); } diff --git a/features/request/Customer/CustomerEmailConfirmation.feature b/features/request/Customer/CustomerEmailConfirmation.feature index 687b0e73f4..b2e63e0129 100644 --- a/features/request/Customer/CustomerEmailConfirmation.feature +++ b/features/request/Customer/CustomerEmailConfirmation.feature @@ -14,15 +14,12 @@ Feature: I want to confirm a customer's email """ Scenario: Confirm Token for email change - Given a "customer" is identified by "id" and version 1 Given i want to confirm the "Customer" email with token "token" Then the path should be "customers/email/confirm" And the method should be "POST" And the request should be """ { - "id": "id", - "version": 1, "tokenValue": "token" } """ diff --git a/src/Request/Customers/CustomerEmailConfirmRequest.php b/src/Request/Customers/CustomerEmailConfirmRequest.php index 6b4ad33c9a..0dc8e90248 100644 --- a/src/Request/Customers/CustomerEmailConfirmRequest.php +++ b/src/Request/Customers/CustomerEmailConfirmRequest.php @@ -9,20 +9,21 @@ use Commercetools\Core\Client\HttpMethod; use Commercetools\Core\Client\JsonRequest; use Commercetools\Core\Model\Common\Context; -use Commercetools\Core\Request\AbstractUpdateRequest; +use Commercetools\Core\Request\AbstractApiRequest; use Commercetools\Core\Response\ApiResponseInterface; use Commercetools\Core\Model\Customer\Customer; +use Commercetools\Core\Response\ResourceResponse; +use Psr\Http\Message\ResponseInterface; /** * @package Commercetools\Core\Request\Customers * @link https://dev.commercetools.com/http-api-projects-customers.html#verify-customers-email * @method Customer mapResponse(ApiResponseInterface $response) */ -class CustomerEmailConfirmRequest extends AbstractUpdateRequest +class CustomerEmailConfirmRequest extends AbstractApiRequest { protected $resultClass = '\Commercetools\Core\Model\Customer\Customer'; - const ID = 'id'; const TOKEN_VALUE = 'tokenValue'; /** @@ -31,29 +32,23 @@ class CustomerEmailConfirmRequest extends AbstractUpdateRequest protected $tokenValue; /** - * @param string $id - * @param int $version * @param string $tokenValue * @param Context $context */ - public function __construct($id, $version, $tokenValue, Context $context = null) + public function __construct($tokenValue, Context $context = null) { - parent::__construct(CustomersEndpoint::endpoint(), $id, $version, [], $context); - $this->setId($id); - $this->setVersion($version); + parent::__construct(CustomersEndpoint::endpoint(), $context); $this->tokenValue = $tokenValue; } /** - * @param string $id - * @param int $version * @param string $tokenValue * @param Context $context * @return static */ - public static function ofIdVersionAndToken($id, $version, $tokenValue, Context $context = null) + public static function ofToken($tokenValue, Context $context = null) { - return new static($id, $version, $tokenValue, $context); + return new static($tokenValue, $context); } /** @@ -72,10 +67,13 @@ protected function getPath() public function httpRequest() { $payload = [ - static::ID => $this->getId(), - static::VERSION => $this->getVersion(), static::TOKEN_VALUE => $this->tokenValue, ]; return new JsonRequest(HttpMethod::POST, $this->getPath(), $payload); } + + public function buildResponse(ResponseInterface $response) + { + return new ResourceResponse($response, $this, $this->getContext()); + } } diff --git a/tests/integration/Customer/CustomerLoginRequestTest.php b/tests/integration/Customer/CustomerLoginRequestTest.php index 91c0ccebff..f30b135c8e 100644 --- a/tests/integration/Customer/CustomerLoginRequestTest.php +++ b/tests/integration/Customer/CustomerLoginRequestTest.php @@ -11,6 +11,8 @@ use Commercetools\Core\Request\Customers\CustomerByTokenGetRequest; use Commercetools\Core\Request\Customers\CustomerCreateRequest; use Commercetools\Core\Request\Customers\CustomerDeleteRequest; +use Commercetools\Core\Request\Customers\CustomerEmailConfirmRequest; +use Commercetools\Core\Request\Customers\CustomerEmailTokenRequest; use Commercetools\Core\Request\Customers\CustomerLoginRequest; use Commercetools\Core\Request\Customers\CustomerPasswordChangeRequest; use Commercetools\Core\Request\Customers\CustomerPasswordResetRequest; @@ -143,4 +145,32 @@ public function testPasswordReset() $response = $request->executeWithClient($this->getClient()); $this->assertTrue($response->isError()); } + + public function testVerifyEmail() + { + $draft = $this->getDraft('email'); + $customer = $this->createCustomer($draft); + + $this->assertFalse($customer->getIsEmailVerified()); + + $request = CustomerEmailTokenRequest::ofIdVersionAndTtl( + $customer->getId(), + $customer->getVersion(), + 15 + ); + $response = $request->executeWithClient($this->getClient()); + $result = $request->mapResponse($response); + + $token = $result->getValue(); + $this->assertNotEmpty($token); + + $request = CustomerEmailConfirmRequest::ofToken( + $token + ); + $response = $request->executeWithClient($this->getClient()); + $result = $request->mapResponse($response); + $this->deleteRequest->setVersion($result->getVersion()); + + $this->assertTrue($result->getIsEmailVerified()); + } } diff --git a/tests/unit/Request/Customers/CustomerEmailConfirmRequestTest.php b/tests/unit/Request/Customers/CustomerEmailConfirmRequestTest.php index ff12737a0a..9a952f94e3 100644 --- a/tests/unit/Request/Customers/CustomerEmailConfirmRequestTest.php +++ b/tests/unit/Request/Customers/CustomerEmailConfirmRequestTest.php @@ -18,7 +18,7 @@ class CustomerEmailConfirmRequestTest extends RequestTestCase public function testHttpRequestMethod() { - $request = CustomerEmailConfirmRequest::ofIdVersionAndToken('customerId', 1, 'token'); + $request = CustomerEmailConfirmRequest::ofToken('token'); $httpRequest = $request->httpRequest(); $this->assertSame(HttpMethod::POST, $httpRequest->getMethod()); @@ -26,7 +26,7 @@ public function testHttpRequestMethod() public function testHttpRequestPath() { - $request = CustomerEmailConfirmRequest::ofIdVersionAndToken('customerId', 1, 'token'); + $request = CustomerEmailConfirmRequest::ofToken('token'); $httpRequest = $request->httpRequest(); $this->assertSame('customers/email/confirm', (string)$httpRequest->getUri()); @@ -34,11 +34,11 @@ public function testHttpRequestPath() public function testHttpRequestObject() { - $request = CustomerEmailConfirmRequest::ofIdVersionAndToken('customerId', 1, 'token'); + $request = CustomerEmailConfirmRequest::ofToken('token'); $httpRequest = $request->httpRequest(); $this->assertJsonStringEqualsJsonString( - json_encode(['id' => 'customerId', 'version' => 1, 'tokenValue' => 'token']), + json_encode(['tokenValue' => 'token']), (string)$httpRequest->getBody() ); }