* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link http://www.temando.com/
*/
class CarrierViewTest extends \PHPUnit\Framework\TestCase
{
/**
* @return CarrierInterface
*/
private function getCarrier()
{
$carrier = Bootstrap::getObjectManager()->create(Carrier::class, ['data' => [
CarrierInterface::NAME => 'Foo Carrier',
CarrierInterface::CONFIGURATION_ID => '00000000-5000-0005-0000-000000000000',
CarrierInterface::INTEGRATION_ID => 'carrier-integration-foo',
]]);
return $carrier;
}
/**
* @test
*/
public function backButtonIsAvailableInEditComponents()
{
/** @var CarrierEdit $carrierEdit */
$carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
$this->assertInstanceOf(PageActionsInterface::class, $carrierEdit);
$actions = $carrierEdit->getMainActions();
$this->assertNotEmpty($actions);
$this->assertInternalType('array', $actions);
$this->assertArrayHasKey('back', $actions);
}
/**
* @test
*/
public function backButtonIsNotAvailableInRegistrationComponents()
{
/** @var CarrierRegistration $carrierRegistration */
$carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
$this->assertNotInstanceOf(PageActionsInterface::class, $carrierRegistration);
}
/**
* @test
* @magentoConfigFixture default/carriers/temando/session_endpoint https://auth.temando.io/v1/
* @magentoConfigFixture default/carriers/temando/sovereign_endpoint https://foo.temando.io/v1/
*/
public function shippingApiCredentialsAreAvailableInCarrierComponents()
{
/** @var CarrierEdit $carrierEdit */
$carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
$this->assertInstanceOf(ShippingApiInterface::class, $carrierEdit);
$this->assertEquals('https://foo.temando.io/v1/', $carrierEdit->getShippingApiAccess()->getApiEndpoint());
/** @var CarrierRegistration $carrierRegistration */
$carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
$this->assertInstanceOf(ShippingApiInterface::class, $carrierRegistration);
$this->assertEquals(
'https://foo.temando.io/v1/',
$carrierRegistration->getShippingApiAccess()->getApiEndpoint()
);
}
/**
* @test
*/
public function carrierIdsAreAvailableInEditComponent()
{
$carrier = $this->getCarrier();
$request = $this->getMockBuilder(Request::class)
->setMethods(['getParam'])
->disableOriginalConstructor()
->getMock();
$request
->expects($this->exactly(2))
->method('getParam')
->withConsecutive(
[CarrierInterface::CONFIGURATION_ID, null],
[CarrierInterface::INTEGRATION_ID, null]
)
->willReturnOnConsecutiveCalls($carrier->getConfigurationId(), $carrier->getIntegrationId());
/** @var CarrierEdit $carrierEdit */
$carrierEdit = Bootstrap::getObjectManager()->create(CarrierEdit::class, [
'request' => $request,
]);
$this->assertEquals($carrier->getConfigurationId(), $carrierEdit->getCarrierConfigurationId());
$this->assertEquals($carrier->getIntegrationId(), $carrierEdit->getCarrierIntegrationId());
}
/**
* @test
*/
public function carrierIntegrationIdIsAvailableInRegistrationComponent()
{
$carrier = $this->getCarrier();
$request = $this->getMockBuilder(Request::class)
->setMethods(['getParam'])
->disableOriginalConstructor()
->getMock();
$request
->expects($this->once())
->method('getParam')
->with(CarrierInterface::INTEGRATION_ID)
->willReturn($carrier->getIntegrationId());
/** @var CarrierRegistration $carrierRegistration */
$carrierRegistration = Bootstrap::getObjectManager()->create(CarrierRegistration::class, [
'request' => $request,
]);
$this->assertEquals($carrier->getIntegrationId(), $carrierRegistration->getCarrierIntegrationId());
}
/**
* @test
*/
public function entityUrlsAreAvailableInCarrierComponents()
{
/** @var Carrier $carrier */
$carrier = $this->getCarrier();
/** @var CarrierEdit $carrierEdit */
$carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
$this->assertInstanceOf(EntityUrlInterface::class, $carrierEdit->getCarrierUrl());
/** @var CarrierRegistration $carrierRegistration */
$carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
$this->assertInstanceOf(EntityUrlInterface::class, $carrierRegistration->getCarrierUrl());
// application does not provide view action for carriers
$this->assertEmpty($carrierRegistration->getCarrierUrl()->getViewActionUrl($carrier->getData()));
$this->assertContains('new', $carrierRegistration->getCarrierUrl()->getNewActionUrl());
$this->assertContains('index', $carrierRegistration->getCarrierUrl()->getListActionUrl());
$this->assertContains('register', $carrierRegistration->getCarrierUrl()->getCarrierRegistrationPageUrl());
$editUrl = $carrierRegistration->getCarrierUrl()->getEditActionUrl($carrier->getData());
$this->assertContains('edit', $editUrl);
$this->assertContains($carrier->getConfigurationId(), $editUrl);
$this->assertContains($carrier->getIntegrationId(), $editUrl);
$deleteUrl = $carrierRegistration->getCarrierUrl()->getDeleteActionUrl($carrier->getData());
$this->assertContains('delete', $deleteUrl);
$this->assertContains($carrier->getConfigurationId(), $deleteUrl);
$this->assertNotContains($carrier->getIntegrationId(), $deleteUrl);
}
/**
* @test
*/
public function maliciousParamValuesGetStripped()
{
$badIntegrationId = '';
$badConfigId = '';
$request = $this->getMockBuilder(Request::class)
->setMethods(['getParam'])
->disableOriginalConstructor()
->getMock();
$request
->expects($this->exactly(3))
->method('getParam')
->withConsecutive(
[CarrierInterface::INTEGRATION_ID, null],
[CarrierInterface::INTEGRATION_ID, null],
[CarrierInterface::CONFIGURATION_ID, null]
)
->willReturnOnConsecutiveCalls($badIntegrationId, $badIntegrationId, $badConfigId);
/** @var CarrierRegistration $carrierRegistration */
$carrierRegistration = Bootstrap::getObjectManager()->create(CarrierRegistration::class, [
'request' => $request,
]);
$this->assertRegExp('/^[\w0-9-_]+$/', $carrierRegistration->getCarrierIntegrationId());
/** @var CarrierEdit $carrierEdit */
$carrierEdit = Bootstrap::getObjectManager()->create(CarrierEdit::class, [
'request' => $request,
]);
$this->assertRegExp('/^[\w0-9-_]+$/', $carrierEdit->getCarrierIntegrationId());
$this->assertRegExp('/^[\w0-9-_]+$/', $carrierEdit->getCarrierConfigurationId());
}
}