/** * ::onEntityTypeUpdate */ public function testonEntityTypeUpdateWithNewIndex() { $this->entityType = $original_entity_type = new ContentEntityType(array('id' => 'entity_test', 'entity_keys' => array('id' => 'id'))); // Add a field with a really long index. $this->setUpStorageDefinition('long_index_name', array('columns' => array('long_index_name' => array('type' => 'int')), 'indexes' => array('long_index_name_really_long_long_name' => array(array('long_index_name', 10))))); $expected = array('entity_test' => array('description' => 'The base table for entity_test entities.', 'fields' => array('id' => array('type' => 'serial', 'not null' => TRUE), 'long_index_name' => array('type' => 'int', 'not null' => FALSE)), 'indexes' => array('entity_test__b588603cb9' => array(array('long_index_name', 10))))); $this->setUpStorageSchema($expected); $table_mapping = new DefaultTableMapping($this->entityType, $this->storageDefinitions); $table_mapping->setFieldNames('entity_test', array_keys($this->storageDefinitions)); $table_mapping->setExtraColumns('entity_test', array('default_langcode')); $this->storage->expects($this->any())->method('getTableMapping')->will($this->returnValue($table_mapping)); $this->storageSchema->expects($this->any())->method('loadEntitySchemaData')->willReturn(['entity_test' => ['indexes' => ['entity_test__b588603cb9' => ['longer_index_name'], 'entity_test__removed_field' => ['removed_field']]]]); // The original indexes should be dropped before the new one is added. $this->dbSchemaHandler->expects($this->at(0))->method('dropIndex')->with('entity_test', 'entity_test__b588603cb9'); $this->dbSchemaHandler->expects($this->at(1))->method('dropIndex')->with('entity_test', 'entity_test__removed_field'); $this->dbSchemaHandler->expects($this->atLeastOnce())->method('fieldExists')->willReturn(TRUE); $this->dbSchemaHandler->expects($this->atLeastOnce())->method('addIndex')->with('entity_test', 'entity_test__b588603cb9', [['long_index_name', 10]], $this->callback(function ($actual_value) use($expected) { $this->assertEquals($expected['entity_test']['indexes'], $actual_value['indexes']); $this->assertEquals($expected['entity_test']['fields'], $actual_value['fields']); // If the parameters don't match, the assertions above will throw an // exception. return TRUE; })); $this->assertNull($this->storageSchema->onEntityTypeUpdate($this->entityType, $original_entity_type)); }
/** * Sets up all of our services with mock methods so buildForm() is possible. * * @param string $catalog_id * Catalog id. * @param string $application_id * Application id. * @param [] $filters * An optional list of filters for the client to receive. */ protected function baseMockBuild($catalog_id, $application_id, $filters = []) { // Field manager mocking. $field_settings = ['max_filesize' => '2 MB', 'file_extensions' => self::MOCK_FIELD_SETTINGS_FILE_EXTENSIONS, 'catalog_id' => $catalog_id]; $this->fieldConfig->expects($this->once())->method('getName')->willReturn('field_test'); $this->fieldConfig->expects($this->once())->method('getSettings')->willReturn($field_settings); // Search filter always starts with the extensions OR filter. $extension_filter_value = str_replace(',', '|', self::MOCK_FIELD_SETTINGS_FILE_EXTENSIONS); $extension_filter = ['field' => 'fileformat', 'operator' => 'matches', 'value' => $extension_filter_value]; array_unshift($filters, $extension_filter); // Client mocking. $search_response = $this->json->decode(file_get_contents('expected/search-expected-small-response.json', TRUE)); $per_page = 8; $page = 1; $this->client->expects($this->once())->method('search')->with($page, $per_page, $filters)->willReturn($search_response); // Entity type storage mocking. $mock_catalog = $this->getMockBuilder('\\Drupal\\embridge\\EmbridgeCatalogInterface')->disableOriginalConstructor()->getMock(); $mock_catalog->expects($this->once())->method('getApplicationId')->willReturn($application_id); $mock_catalog_storage = $this->getMock(EntityStorageInterface::class); $mock_catalog_storage->expects($this->once())->method('load')->with($catalog_id)->willReturn($mock_catalog); $this->entityTypeManager->expects($this->once())->method('getStorage')->with('embridge_catalog')->willReturn($mock_catalog_storage); // Create mock assets. foreach ($search_response['results'] as $i => $result) { $mock_asset = $this->getMockBuilder('\\Drupal\\embridge\\EmbridgeAssetEntityInterface')->disableOriginalConstructor()->getMock(); $mock_asset->expects($this->once())->method('id')->willReturn($i); $this->mockAssets[$i]['asset'] = $mock_asset; $this->mockAssets[$i]['result'] = $result; } // Mock up the asset helper. $return_map = []; foreach ($this->mockAssets as $id => $asset_result) { $return_map[] = [$asset_result['result'], $catalog_id, $asset_result['asset']]; } $this->assetHelper->expects($this->exactly(count($this->mockAssets)))->method('searchResultToAsset')->will($this->returnValueMap($return_map)); }
/** * Test submitForm with an fid, ensures values are set correctly. * * @covers ::ajaxSave * * @test */ public function ajaxSaveWithFidLoadsEntitiesAndSetsFormStateValues() { $form = []; $catalog_id = 'test_catalog'; $app_id = 'test_application_id'; $source_url = 'www.example.com/test_application_id/test.jpg'; $form['asset']['#catalog_id'] = $catalog_id; $form_state = new FormState(); $intial_values = ['asset' => [self::MOCK_ASSET_ID], 'attributes' => ['data-conversion' => 'thumb']]; $form_state->setValues($intial_values); $mock_asset = $this->getMockBuilder(EmbridgeAssetEntity::class)->disableOriginalConstructor()->getMock(); $mock_asset->expects($this->once())->method('uuid')->willReturn(self::MOCK_ASSET_UUID); $mock_asset->expects($this->once())->method('isTemporary')->willReturn(TRUE); $mock_asset->expects($this->once())->method('setPermanent'); $mock_asset->expects($this->once())->method('save'); $mock_asset_storage = $this->getMockBuilder(EntityStorageInterface::class)->disableOriginalConstructor()->getMock(); $mock_asset_storage->expects($this->once())->method('load')->with(self::MOCK_ASSET_ID)->willReturn($mock_asset); $mock_catalog = $this->getMockBuilder(EmbridgeCatalog::class)->disableOriginalConstructor()->getMock(); $mock_catalog->expects($this->once())->method('getApplicationId')->willReturn($app_id); $mock_catalog_storage = $this->getMockBuilder(EntityStorageInterface::class)->disableOriginalConstructor()->getMock(); $mock_catalog_storage->expects($this->once())->method('load')->with($catalog_id)->willReturn($mock_catalog); $this->entityTypeManager->expects($this->exactly(2))->method('getStorage')->will($this->returnValueMap([['embridge_asset_entity', $mock_asset_storage], ['embridge_catalog', $mock_catalog_storage]])); $this->assetHelper->expects($this->once())->method('getAssetConversionUrl')->with($mock_asset, $app_id, 'thumb')->willReturn($source_url); $this->form->ajaxSave($form, $form_state); $expected_values = array_merge_recursive(['attributes' => ['src' => $source_url, 'data-entity-uuid' => self::MOCK_ASSET_UUID, 'data-entity-type' => 'embridge_asset_entity']], $intial_values); $actual_values = $form_state->getValues(); $this->assertEquals($expected_values, $actual_values); }
/** * Sets up the storage schema object to test. * * This uses the field definitions set in $this->storageDefinitions. * * @param array $expected * (optional) An associative array describing the expected entity schema to * be created. Defaults to expecting nothing. */ protected function setUpStorageSchema(array $expected = array()) { $this->entityManager->expects($this->any())->method('getDefinition')->with($this->entityType->id())->will($this->returnValue($this->entityType)); $this->entityManager->expects($this->any())->method('getFieldStorageDefinitions')->with($this->entityType->id())->will($this->returnValue($this->storageDefinitions)); $db_schema_handler = $this->getMockBuilder('Drupal\\Core\\Database\\Schema')->disableOriginalConstructor()->getMock(); if ($expected) { $invocation_count = 0; $expected_table_names = array_keys($expected); $expected_table_schemas = array_values($expected); $db_schema_handler->expects($this->any())->method('createTable')->with($this->callback(function ($table_name) use(&$invocation_count, $expected_table_names) { return $expected_table_names[$invocation_count] == $table_name; }), $this->callback(function ($table_schema) use(&$invocation_count, $expected_table_schemas) { return $expected_table_schemas[$invocation_count] == $table_schema; }))->will($this->returnCallback(function () use(&$invocation_count) { $invocation_count++; })); } $connection = $this->getMockBuilder('Drupal\\Core\\Database\\Connection')->disableOriginalConstructor()->getMock(); $connection->expects($this->any())->method('schema')->will($this->returnValue($db_schema_handler)); $key_value = $this->getMock('Drupal\\Core\\KeyValueStore\\KeyValueStoreInterface'); $this->storageSchema = $this->getMockBuilder('Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorageSchema')->setConstructorArgs(array($this->entityManager, $this->entityType, $this->storage, $connection))->setMethods(array('installedStorageSchema', 'loadEntitySchemaData', 'hasSharedTableNameChanges'))->getMock(); $this->storageSchema->expects($this->any())->method('installedStorageSchema')->will($this->returnValue($key_value)); }