identityProvider = $this->createMock(IdentityProviderInterface::class); $this->contextFactory = Bootstrap::getObjectManager()->create( BackpressureContextFactory::class, ['identityProvider' => $this->identityProvider] ); $this->limitConfigManager = Bootstrap::getObjectManager()->get(LimitConfigManagerInterface::class); } /** * Configured cases. * * @return array */ public function getConfiguredCases(): array { return [ 'guest' => [ ContextInterface::IDENTITY_TYPE_IP, '127.0.0.1', SetPaymentAndPlaceOrder::class, 50 ], 'customer' => [ ContextInterface::IDENTITY_TYPE_CUSTOMER, '42', PlaceOrder::class, 100 ] ]; } /** * Verify that backpressure is configured for guests. * * @param int $identityType * @param string $identity * @param string $resolver * @param int $expectedLimit * @return void * @dataProvider getConfiguredCases * @magentoConfigFixture current_store sales/backpressure/enabled 1 * @magentoConfigFixture current_store sales/backpressure/limit 100 * @magentoConfigFixture current_store sales/backpressure/guest_limit 50 * @magentoConfigFixture current_store sales/backpressure/period 60 */ public function testConfigured( int $identityType, string $identity, string $resolver, int $expectedLimit ): void { $this->identityProvider->method('fetchIdentityType')->willReturn($identityType); $this->identityProvider->method('fetchIdentity')->willReturn($identity); $field = $this->createMock(Field::class); $field->method('getResolver')->willReturn($resolver); $context = $this->contextFactory->create($field); $this->assertEquals(OrderLimitConfigManager::REQUEST_TYPE_ID, $context->getTypeId()); $limits = $this->limitConfigManager->readLimit($context); $this->assertEquals($expectedLimit, $limits->getLimit()); $this->assertEquals(60, $limits->getPeriod()); } }