when(employeeType.getPropertyNames()).thenReturn(Arrays.asList(
"EmployeeId", "EmployeeName", "ManagerId", "RoomId", "TeamId",
"Location", "Age", "EntryDate", "ImageUrl"));
when(employeeType.getNavigationPropertyNames()).thenReturn(Arrays.asList("ne_Manager", "ne_Team", "ne_Room"));
EdmProperty employeeNameProperty = createProperty("EmployeeName", EdmSimpleTypeKind.String, employeeType);
EdmCustomizableFeedMappings employeeTitleMappings = mock(EdmCustomizableFeedMappings.class);
when(employeeTitleMappings.getFcTargetPath()).thenReturn(EdmTargetPath.SYNDICATION_TITLE);
when(employeeTitleMappings.isFcKeepInContent()).thenReturn(true);
when(employeeNameProperty.getCustomizableFeedMappings()).thenReturn(employeeTitleMappings);
createProperty("ManagerId", EdmSimpleTypeKind.String, employeeType);
createProperty("RoomId", EdmSimpleTypeKind.String, employeeType);
createProperty("TeamId", EdmSimpleTypeKind.String, employeeType);
createProperty("Age", EdmSimpleTypeKind.Int32, employeeType);
EdmProperty employeeEntryDateProperty = createProperty("EntryDate", EdmSimpleTypeKind.DateTime, employeeType);
EdmCustomizableFeedMappings employeeUpdatedMappings = mock(EdmCustomizableFeedMappings.class);
when(employeeUpdatedMappings.getFcTargetPath()).thenReturn(EdmTargetPath.SYNDICATION_UPDATED);
when(employeeUpdatedMappings.isFcKeepInContent()).thenReturn(true);
when(employeeEntryDateProperty.getCustomizableFeedMappings()).thenReturn(employeeUpdatedMappings);
EdmFacets employeeEntryDateFacets = mock(EdmFacets.class);
when(employeeEntryDateFacets.getMaxLength()).thenReturn(null);
when(employeeEntryDateFacets.isNullable()).thenReturn(Boolean.TRUE);
when(employeeEntryDateProperty.getFacets()).thenReturn(employeeEntryDateFacets);
createProperty("ImageUrl", EdmSimpleTypeKind.String, employeeType);
final EdmComplexType locationComplexType = mock(EdmComplexType.class);
when(locationComplexType.getKind()).thenReturn(EdmTypeKind.COMPLEX);
when(locationComplexType.getName()).thenReturn("c_Location");
when(locationComplexType.getNamespace()).thenReturn("RefScenario");
when(locationComplexType.getPropertyNames()).thenReturn(Arrays.asList("City", "Country"));
final EdmProperty locationComplexProperty = mock(EdmProperty.class);
when(locationComplexProperty.getType()).thenReturn(locationComplexType);
when(locationComplexProperty.getName()).thenReturn("Location");
when(employeeType.getProperty("Location")).thenReturn(locationComplexProperty);
createProperty("Country", EdmSimpleTypeKind.String, locationComplexType);
final EdmComplexType cityComplexType = mock(EdmComplexType.class);
when(cityComplexType.getKind()).thenReturn(EdmTypeKind.COMPLEX);
when(cityComplexType.getName()).thenReturn("c_City");
when(cityComplexType.getNamespace()).thenReturn("RefScenario");
when(cityComplexType.getPropertyNames()).thenReturn(Arrays.asList("PostalCode", "CityName"));
EdmProperty cityProperty = mock(EdmProperty.class);
when(cityProperty.getType()).thenReturn(cityComplexType);
when(cityProperty.getName()).thenReturn("City");
when(locationComplexType.getProperty("City")).thenReturn(cityProperty);
createProperty("PostalCode", EdmSimpleTypeKind.String, cityComplexType);
createProperty("CityName", EdmSimpleTypeKind.String, cityComplexType);
createNavigationProperty("ne_Manager", EdmMultiplicity.ONE, employeeEntitySet, managerEntitySet);
createNavigationProperty("ne_Team", EdmMultiplicity.ONE, employeeEntitySet, teamEntitySet);
createNavigationProperty("ne_Room", EdmMultiplicity.ONE, employeeEntitySet, roomEntitySet);
EdmEntityType teamType = teamEntitySet.getEntityType();
when(teamType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "isScrumTeam"));
createProperty("Name", EdmSimpleTypeKind.String, teamType);
createProperty("isScrumTeam", EdmSimpleTypeKind.Boolean, teamType);
when(teamType.getNavigationPropertyNames()).thenReturn(Arrays.asList("nt_Employees"));
createNavigationProperty("nt_Employees", EdmMultiplicity.MANY, teamEntitySet, employeeEntitySet);
EdmEntityType roomType = roomEntitySet.getEntityType();
when(roomType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Seats", "Version"));
EdmProperty roomId = roomEntitySet.getEntityType().getKeyProperties().get(0);
EdmFacets roomIdFacets = mock(EdmFacets.class);
when(roomIdFacets.getMaxLength()).thenReturn(100);
when(roomId.getFacets()).thenReturn(roomIdFacets);
createProperty("Name", EdmSimpleTypeKind.String, roomType);
createProperty("Seats", EdmSimpleTypeKind.Int16, roomType);
EdmProperty roomVersion = createProperty("Version", EdmSimpleTypeKind.Int16, roomType);
EdmFacets roomVersionFacets = mock(EdmFacets.class);
when(roomVersionFacets.getConcurrencyMode()).thenReturn(EdmConcurrencyMode.Fixed);
when(roomVersionFacets.isNullable()).thenReturn(null);
when(roomVersion.getFacets()).thenReturn(roomVersionFacets);
when(roomType.getNavigationPropertyNames()).thenReturn(Arrays.asList("nr_Employees", "nr_Building"));
createNavigationProperty("nr_Employees", EdmMultiplicity.MANY, roomEntitySet, employeeEntitySet);
createNavigationProperty("nr_Building", EdmMultiplicity.ONE, roomEntitySet, buildingEntitySet);
createNavigationProperty("ne_Manager", EdmMultiplicity.ONE, managerEntitySet, managerEntitySet);
createNavigationProperty("ne_Team", EdmMultiplicity.ONE, managerEntitySet, teamEntitySet);
createNavigationProperty("ne_Room", EdmMultiplicity.ONE, managerEntitySet, roomEntitySet);
createNavigationProperty("nm_Employees", EdmMultiplicity.MANY, managerEntitySet, employeeEntitySet);
EdmEntityType buildingType = buildingEntitySet.getEntityType();
when(buildingType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Image"));
createProperty("Name", EdmSimpleTypeKind.String, buildingType);
createProperty("Image", EdmSimpleTypeKind.Binary, buildingType);
when(buildingType.getNavigationPropertyNames()).thenReturn(Arrays.asList("nb_Rooms"));
createNavigationProperty("nb_Rooms", EdmMultiplicity.MANY, buildingEntitySet, roomEntitySet);
EdmFunctionImport employeeSearchFunctionImport =
createFunctionImportMock(defaultContainer, "EmployeeSearch", employeeType, EdmMultiplicity.MANY);
when(employeeSearchFunctionImport.getEntitySet()).thenReturn(employeeEntitySet);
EdmParameter employeeSearchParameter = mock(EdmParameter.class);
when(employeeSearchParameter.getType()).thenReturn(EdmSimpleTypeKind.String.getEdmSimpleTypeInstance());
when(employeeSearchFunctionImport.getParameterNames()).thenReturn(Arrays.asList("q"));
when(employeeSearchFunctionImport.getParameter("q")).thenReturn(employeeSearchParameter);
createFunctionImportMock(defaultContainer, "AllLocations", locationComplexType, EdmMultiplicity.MANY);
createFunctionImportMock(defaultContainer, "AllUsedRoomIds", EdmSimpleTypeKind.String.getEdmSimpleTypeInstance(),
EdmMultiplicity.MANY);
createFunctionImportMock(defaultContainer, "MaximalAge", EdmSimpleTypeKind.Int16.getEdmSimpleTypeInstance(),
EdmMultiplicity.ONE);
createFunctionImportMock(defaultContainer, "MostCommonLocation", locationComplexType, EdmMultiplicity.ONE);
EdmFunctionImport managerPhotoFunctionImport =
createFunctionImportMock(defaultContainer, "ManagerPhoto", EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance(),
EdmMultiplicity.ONE);
EdmParameter managerPhotoParameter = mock(EdmParameter.class);
when(managerPhotoParameter.getType()).thenReturn(EdmSimpleTypeKind.String.getEdmSimpleTypeInstance());
EdmFacets managerPhotoParameterFacets = mock(EdmFacets.class);
when(managerPhotoParameterFacets.isNullable()).thenReturn(false);
when(managerPhotoParameter.getFacets()).thenReturn(managerPhotoParameterFacets);
when(managerPhotoFunctionImport.getParameterNames()).thenReturn(Arrays.asList("Id"));
when(managerPhotoFunctionImport.getParameter("Id")).thenReturn(managerPhotoParameter);
EdmFunctionImport oldestEmployeeFunctionImport =
createFunctionImportMock(defaultContainer, "OldestEmployee", employeeType, EdmMultiplicity.ONE);
when(oldestEmployeeFunctionImport.getEntitySet()).thenReturn(employeeEntitySet);
EdmEntityContainer specificContainer = mock(EdmEntityContainer.class);
when(specificContainer.getEntitySet("Employees")).thenReturn(employeeEntitySet);
when(specificContainer.getName()).thenReturn("Container1");
EdmEntityType photoEntityType = mock(EdmEntityType.class);
when(photoEntityType.getName()).thenReturn("Photo");
when(photoEntityType.getNamespace()).thenReturn("RefScenario2");
when(photoEntityType.getPropertyNames()).thenReturn(Arrays.asList(
"Id", "Name", "Type", "Image", "BinaryData", "Содержание", "CustomProperty"));
when(photoEntityType.getKeyPropertyNames()).thenReturn(Arrays.asList("Id", "Type"));
when(photoEntityType.hasStream()).thenReturn(true);
EdmMapping photoEntityTypeMapping = Mockito.mock(EdmMapping.class);
when(photoEntityTypeMapping.getMediaResourceMimeTypeKey()).thenReturn("getType");
when(photoEntityType.getMapping()).thenReturn(photoEntityTypeMapping);
EdmProperty photoIdProperty = createProperty("Id", EdmSimpleTypeKind.Int32, photoEntityType);
EdmFacets photoIdFacet = mock(EdmFacets.class);
when(photoIdFacet.getConcurrencyMode()).thenReturn(EdmConcurrencyMode.Fixed);
when(photoIdProperty.getFacets()).thenReturn(photoIdFacet);
createProperty("Name", EdmSimpleTypeKind.String, photoEntityType);
final EdmProperty photoTypeProperty = createProperty("Type", EdmSimpleTypeKind.String, photoEntityType);
when(photoEntityType.getKeyProperties()).thenReturn(Arrays.asList(photoIdProperty, photoTypeProperty));
EdmProperty photoImageProperty = createProperty("Image", EdmSimpleTypeKind.Binary, photoEntityType);
EdmMapping imageMapping = mock(EdmMapping.class);
when(imageMapping.getMediaResourceMimeTypeKey()).thenReturn("getImageType");
when(photoImageProperty.getMapping()).thenReturn(imageMapping);
EdmProperty binaryDataProperty = createProperty("BinaryData", EdmSimpleTypeKind.Binary, photoEntityType);
when(binaryDataProperty.getMimeType()).thenReturn("image/jpeg");
EdmProperty photoRussianProperty = createProperty("Содержание", EdmSimpleTypeKind.String, photoEntityType);
EdmFacets photoRussianFacets = mock(EdmFacets.class);
when(photoRussianFacets.isNullable()).thenReturn(true);
when(photoRussianFacets.isUnicode()).thenReturn(true);
when(photoRussianFacets.getMaxLength()).thenReturn(Integer.MAX_VALUE);
when(photoRussianProperty.getFacets()).thenReturn(photoRussianFacets);
CustomizableFeedMappings photoRussianMapping = mock(CustomizableFeedMappings.class);
when(photoRussianMapping.getFcKeepInContent()).thenReturn(false);
when(photoRussianMapping.getFcNsPrefix()).thenReturn("ру");
when(photoRussianMapping.getFcNsUri()).thenReturn("http://localhost");
when(photoRussianMapping.getFcTargetPath()).thenReturn("Содержание");
when(photoRussianProperty.getCustomizableFeedMappings()).thenReturn(photoRussianMapping);
EdmProperty customProperty = createProperty("CustomProperty", EdmSimpleTypeKind.String, photoEntityType);
CustomizableFeedMappings customFeedMapping = mock(CustomizableFeedMappings.class);
when(customFeedMapping.getFcKeepInContent()).thenReturn(false);
when(customFeedMapping.getFcNsPrefix()).thenReturn("custom");
when(customFeedMapping.getFcNsUri()).thenReturn("http://localhost");
when(customFeedMapping.getFcTargetPath()).thenReturn("TarPath");
when(customProperty.getCustomizableFeedMappings()).thenReturn(customFeedMapping);
EdmEntitySet photoEntitySet = mock(EdmEntitySet.class);
when(photoEntitySet.getName()).thenReturn("Photos");
when(photoEntitySet.getEntityType()).thenReturn(photoEntityType);
EdmEntityContainer photoContainer = mock(EdmEntityContainer.class);