Example #1
0
 /**
  * @group localizations
  */
 public function testPutOneChildLocalization()
 {
     $entity = factory(TestEntity::class)->create();
     $this->addRelatedEntities($entity);
     $childEntity = $entity->testMany->first();
     $supportedRegions = array_pluck(config('regions.supported'), 'code');
     $region = array_pop($supportedRegions);
     $localization = ['value' => 'foobar'];
     // Give entity a localization
     $this->withAuthorization()->putJson('/test/entities/' . $entity->entity_id . '/child/' . $childEntity->entity_id . '/localizations/' . $region, $localization);
     $this->assertResponseStatus(201);
     // Get the saved localization
     $localizationModel = $childEntity->localizations->where('region_code', $region)->first();
     $savedLocalization = $localizationModel->localizations;
     // Ensure localization was saved correctly
     $this->assertEquals($localization['value'], $savedLocalization['value']);
     // Assert the cache
     $cachedLocalization = Localization::getFromCache($localizationModel->localizable_id, $localizationModel->region_code);
     $this->assertEquals($localization, $cachedLocalization);
     $localizationCount = Localization::count();
     // Give entity an empty localization
     $this->withAuthorization()->putJson('/test/entities/' . $entity->entity_id . '/child/' . $childEntity->entity_id . '/localizations/' . $region, []);
     $this->assertResponseStatus(204);
     // Ensure the localization has been deleted (and only one localization)
     $this->assertEquals($entity->localizations()->where('region_code', $region)->count(), 0);
     $this->assertEquals(Localization::count(), $localizationCount - 1);
     // Check that the cached localization has been removed
     $this->assertEquals(Localization::getFromCache($localizationModel->localizable_id, $localizationModel->region_code), null);
 }
 /**
  * Attempt to find localizations in cache and replace the attributes with the items.
  * @param $object
  */
 protected function applyLocalizations(BaseModel $object)
 {
     if (!isset($this->options['region']) || !$object instanceof LocalizableModelInterface) {
         return;
     }
     if ($localizations = Localization::getFromCache($object->getKey(), $this->options['region'])) {
         foreach ($localizations as $attribute => $localization) {
             if (is_array($localization) && is_array($object->{$attribute})) {
                 $object->{$attribute} = $this->mergeRecursive($object->{$attribute}, $localization);
             } else {
                 $object->{$attribute} = $localization;
             }
         }
     }
 }