/**
  * @param array $itemOptionValues
  * @param array $productOptionValues
  * @param bool $noRouteOccurs
  * @dataProvider executeDataProvider
  */
 public function testExecute($itemOptionValues, $productOptionValues, $noRouteOccurs)
 {
     if (!empty($itemOptionValues)) {
         $this->itemOptionMock->expects($this->once())->method('load')->willReturnSelf();
         $this->itemOptionMock->expects($this->once())->method('getId')->willReturn($itemOptionValues[self::OPTION_ID]);
         $this->itemOptionMock->expects($this->any())->method('getCode')->willReturn($itemOptionValues[self::OPTION_CODE]);
         $this->itemOptionMock->expects($this->any())->method('getProductId')->willReturn($itemOptionValues[self::OPTION_PRODUCT_ID]);
         $this->itemOptionMock->expects($this->any())->method('getValue')->willReturn($itemOptionValues[self::OPTION_VALUE]);
     }
     if (!empty($productOptionValues)) {
         $this->productOptionMock->expects($this->once())->method('load')->willReturnSelf();
         $this->productOptionMock->expects($this->any())->method('getId')->willReturn($productOptionValues[self::OPTION_ID]);
         $this->productOptionMock->expects($this->any())->method('getProductId')->willReturn($productOptionValues[self::OPTION_PRODUCT_ID]);
         $this->productOptionMock->expects($this->any())->method('getType')->willReturn($productOptionValues[self::OPTION_TYPE]);
     }
     if ($noRouteOccurs) {
         $this->resultForwardMock->expects($this->once())->method('forward')->with('noroute')->willReturn(true);
     } else {
         $unserializeResult = [self::SECRET_KEY => self::SECRET_KEY];
         $this->unserializeMock->expects($this->once())->method('unserialize')->with($itemOptionValues[self::OPTION_VALUE])->willReturn($unserializeResult);
         $this->downloadMock->expects($this->once())->method('downloadFile')->with($unserializeResult)->willReturn(true);
         $this->objectMock->expects($this->once())->method('endExecute')->willReturn(true);
     }
     $this->objectMock->execute();
 }