/** Test conditional layout contains different number of items depending on entity */
  @Test
  public void testConditionalLayout() {
    ModelAndViewConfig viewAndConfig =
        customizationAssemblyFactory.getModelAndViewConfig(
            "studentProfile", simpleMaleStudentEntity.get("id"));

    Assert.assertEquals(3, viewAndConfig.getConfig().size());
    viewAndConfig =
        customizationAssemblyFactory.getModelAndViewConfig(
            "studentProfile", simpleFemaleStudentEntity.get("id"));
    Assert.assertEquals(1, viewAndConfig.getConfig().size());
  }
 /** Test not to allow infinite recursion */
 @Test
 public void testConfigTooDeep() {
   try {
     customizationAssemblyFactory.getModelAndViewConfig("deep", simpleMaleStudentEntity.get("id"));
     Assert.fail("Should not allow deep config structures");
   } catch (Throwable t) {
     Assert.assertEquals(
         "The items hierarchy is too deep - only allow 5 elements", t.getMessage());
   }
 }
 @Test
 public void testDynamicHeaders() {
   Config panel = configMap.get("dynamicHeaders");
   GenericEntity meta = new GenericEntity();
   meta.put("id", "Funky ID");
   GenericEntity name = new GenericEntity();
   name.put("first", "AAA");
   meta.put("name", name);
   GenericEntity entity = new GenericEntity();
   entity.put("meta", meta);
   Config.Item[] items =
       customizationAssemblyFactory.getUpdatedDynamicHeaderTemplate(panel, entity);
   Assert.assertEquals("AAA", items[0].getName());
   Assert.assertEquals("Funky ID", items[1].getName());
 }
  @BeforeClass
  public static void setupAll() {
    Gson gson = new GsonBuilder().create();
    configMap = new HashMap<String, Config>();
    configMap.put("studentProfile", gson.fromJson(DEFAULT_LAYOUT_JSON, Config.class));
    configMap.put("panel", gson.fromJson(DEFAULT_PANEL_JSON, Config.class));
    configMap.put("panel1", gson.fromJson(DEFAULT_PANEL1_JSON, Config.class));
    configMap.put("deep", gson.fromJson(DEFAULT_LAYOUT_TOO_DEEP_JSON, Config.class));
    configMap.put("panelException", gson.fromJson(DEFAULT_PANEL_EXCEPTION_JSON, Config.class));
    configMap.put("dynamicHeaders", gson.fromJson(PANEL_WITH_DYNAMIC_HEADERS, Config.class));
    configMap.put("test", gson.fromJson(CACHE_TEST_JSON, Config.class));
    configMap.put("listOfStudents", gson.fromJson(LIST_OF_STUDENTS_JSON, Config.class));

    simpleMaleStudentEntity = new GenericEntity();
    simpleMaleStudentEntity.put("id", "1");
    simpleMaleStudentEntity.put("gender", "male");
    simpleMaleStudentEntity.put("gradeNumeric", 5);
    simpleFemaleStudentEntity = new GenericEntity();
    simpleFemaleStudentEntity.put("id", "2");
    simpleFemaleStudentEntity.put("gender", "female");
    simpleFemaleStudentEntity.put("gradeNumeric", 7);

    simpleNoGenderInfoStudentEntity = new GenericEntity();
    simpleNoGenderInfoStudentEntity.put("id", "3");
    simpleNoGenderInfoStudentEntity.put("gradeNumeric", 7);

    simpleCacheData = new GenericEntity();
    simpleCacheData.put("id", "testEntityKey");
    simpleCacheData.put("data", "testData1");

    sampleEntityMap = new HashMap<String, GenericEntity>();
    sampleEntityMap.put(simpleMaleStudentEntity.getString("id"), simpleMaleStudentEntity);
    sampleEntityMap.put(simpleFemaleStudentEntity.getString("id"), simpleFemaleStudentEntity);
    sampleEntityMap.put(
        simpleNoGenderInfoStudentEntity.getString("id"), simpleNoGenderInfoStudentEntity);
    sampleEntityMap.put(simpleCacheData.getString("id"), simpleCacheData);
    sampleEntityMap.put("section", JsonConverter.fromJson(SECTION_ENTITY, GenericEntity.class));
    sampleEntityMap.put(
        "listOfStudents", JsonConverter.fromJson(LIST_OF_STUDENTS_ENTITY, GenericEntity.class));
  }