/**
  * Test getter/setter for code property
  */
 public function testGetSetCode()
 {
     $this->assertEmpty($this->currency->getCode());
     // change value and assert new
     $newCode = 'EUR';
     $this->assertEntity($this->currency->setCode($newCode));
     $this->assertEquals($newCode, $this->currency->getCode());
 }
 function let(CurrencyRepository $repository, Currency $eur, Currency $usd, Currency $gbp)
 {
     $this->beConstructedWith($repository);
     $repository->findBy(array('activated' => true))->willReturn([$eur, $usd]);
     $repository->findBy(array())->willReturn([$eur, $usd, $gbp]);
     $eur->getCode()->willReturn('EUR');
     $usd->getCode()->willReturn('USD');
     $gbp->getCode()->willReturn('GBP');
 }
 function it_fails_if_the_currency_is_not_valid($context, $channelManager, AbstractProductProcessor $value, HasValidCurrency $constraint, Channel $channel, Currency $currency)
 {
     $value->getChannel()->willReturn('channel');
     $channelManager->getChannelByCode('channel')->willReturn($channel);
     $channel->getCurrencies()->willReturn([$currency]);
     $currency->getCode()->willReturn('dollar');
     $value->getCurrency()->willReturn('euro');
     $constraint->message = 'The given currency is not valid (check that the selected currency is in channel\'s currencies)';
     $context->addViolationAt('currency', 'The given currency is not valid (check that the selected currency is in channel\'s currencies)', ['currency'])->shouldBeCalled();
     $this->validate($value, $constraint);
 }
 function it_generates_prices_indexes_when_saving_enabled_currency($collection, $namingUtility, Currency $eur, AbstractAttribute $price)
 {
     $eur->getCode()->willReturn('EUR');
     $eur->isActivated()->willReturn(true);
     $price->getCode()->willReturn('price');
     $price->getBackendType()->willReturn('prices');
     $price->isLocalizable()->willReturn(false);
     $price->isScopable()->willReturn(false);
     $price->isUseableAsGridFilter()->willReturn(true);
     $price->getAttributeType()->willReturn('pim_catalog_price_collection');
     $namingUtility->getPricesAttributes()->willReturn([$price]);
     $namingUtility->getCurrencyCodes()->willReturn(['EUR', 'USD']);
     $namingUtility->appendSuffixes(['normalizedData.price', 'normalizedData.price'], ['EUR', 'USD'], '.')->willReturn(['normalizedData.price.EUR', 'normalizedData.price.USD']);
     $namingUtility->appendSuffixes(['normalizedData.price', 'normalizedData.price'], ['data'], '.')->willReturn(['normalizedData.price.EUR.data', 'normalizedData.price.USD.data']);
     $namingUtility->getAttributeNormFields($price)->willReturn(['normalizedData.price', 'normalizedData.price']);
     $options = ['background' => true, 'w' => 0];
     $collection->ensureIndex(['normalizedData.price.EUR.data' => 1], $options)->shouldBeCalled();
     $collection->ensureIndex(['normalizedData.price.USD.data' => 1], $options)->shouldBeCalled();
     $this->ensureIndexesFromCurrency($eur);
 }
 function it_removes_obsolete_price_indexes_when_currency_is_disabled($collection, Currency $usd)
 {
     $usd->getCode()->willReturn('USD');
     $usd->isActivated()->willReturn(false);
     $collection->getIndexInfo()->willReturn([["key" => ["_id" => 1]], ["key" => ["normalizedData.title-ecommerce-en_US" => 1]], ["key" => ["normalizedData.title-ecommerce-de_DE" => 1]], ["key" => ["normalizedData.title-mobile-de_DE" => 1]], ["key" => ["normalizedData.manufacturer_title" => 1]], ["key" => ["normalizedData.title_left-en_US" => 1]], ["key" => ["normalizedData.title_left-de_DE" => 1]], ["key" => ["normalizedData.price-ecommerce.EUR.data" => 1]], ["key" => ["normalizedData.price-mobile.USD.data" => 1]], ["key" => ["normalizedData.name-mobile" => 1]], ["key" => ["normalizedData.name-ecommerce" => 1]], ["key" => ["normalizedData.mobile_support.id" => 1]], ["key" => ["normalizedData.cost-en_US.USD.data" => 1]], ["key" => ["normalizedData.color-ecommerce-en_US.id" => 1]]]);
     $collection->deleteIndex('normalizedData.price-mobile.USD.data')->shouldBeCalled();
     $collection->deleteIndex('normalizedData.cost-en_US.USD.data')->shouldBeCalled();
     $this->purgeIndexesFromCurrency($usd);
 }
 function it_returns_empty_array_when_active_code_choices_not_found(CurrencyRepository $currencyRepository, Currency $currency)
 {
     $currencyRepository->findBy(['activated' => true])->willReturn([]);
     $currency->getCode()->willReturn([]);
     $this->getActiveCodeChoices()->shouldReturn([]);
 }
 /**
  * Remove indexes associated with the provided currency
  *
  * @param Currency $currency
  */
 public function purgeIndexesFromCurrency(Currency $currency)
 {
     $currencyPattern = sprintf('/%s\\..+\\.%s\\.data/', ProductQueryUtility::NORMALIZED_FIELD, $currency->getCode());
     $indexesToRemove = $this->getIndexesMatching($currencyPattern);
     $this->removeIndexes($indexesToRemove);
 }
 /**
  * {@inheritDoc}
  */
 public function getCode()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getCode', array());
     return parent::getCode();
 }