public void testGenerateViews() throws Exception {
    GrailsTemplateGenerator generator;

    GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());

    generator = new DefaultGrailsTemplateGenerator();

    Class dc =
        gcl.parseClass(
            "class Test { "
                + "\n Long id;"
                + "\n Long version;"
                + "\n String name;"
                + "\n TimeZone tz;"
                + "\n Locale locale;"
                + "\n Currency currency;"
                + "\n Boolean active;"
                + "\n Date age  }");
    GrailsDomainClass domainClass = new DefaultGrailsDomainClass(dc);

    generator.generateViews(domainClass, "test");

    assertTrue(new File("test/grails-app/views/test/show.gsp").exists());
    assertTrue(new File("test/grails-app/views/test/list.gsp").exists());
    assertTrue(new File("test/grails-app/views/test/edit.gsp").exists());
    assertTrue(new File("test/grails-app/views/test/create.gsp").exists());
  }
  public void testGenerateController() throws Exception {
    GrailsTemplateGenerator generator;

    GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());

    generator = new DefaultGrailsTemplateGenerator();

    Class dc = gcl.parseClass("class Test { \n Long id;\n  Long version;  }");
    GrailsDomainClass domainClass = new DefaultGrailsDomainClass(dc);

    File generatedFile = new File("test/grails-app/controllers/TestController.groovy");
    if (generatedFile.exists()) {
      generatedFile.delete();
    }

    StringWriter sw = new StringWriter();
    generator.generateController(domainClass, sw);

    String text = sw.toString();

    Class controllerClass = gcl.parseClass(text);
    BeanWrapper bean = new BeanWrapperImpl(controllerClass.newInstance());

    assertEquals("TestController", controllerClass.getName());

    assertTrue(bean.isReadableProperty("list"));
    assertTrue(bean.isReadableProperty("update"));
    assertTrue(bean.isReadableProperty("create"));
    assertTrue(bean.isReadableProperty("list"));
    assertTrue(bean.isReadableProperty("show"));
    assertTrue(bean.isReadableProperty("edit"));
    assertTrue(bean.isReadableProperty("delete"));

    Object propertyValue =
        GrailsClassUtils.getStaticPropertyValue(controllerClass, "allowedMethods");
    assertTrue("allowedMethods property was the wrong type", propertyValue instanceof Map);
    Map map = (Map) propertyValue;
    assertTrue("allowedMethods did not contain the delete action", map.containsKey("delete"));
    assertTrue("allowedMethods did not contain the save action", map.containsKey("save"));
    assertTrue("allowedMethods did not contain the update action", map.containsKey("update"));

    assertEquals("allowedMethods had incorrect value for delete action", "POST", map.get("delete"));
    assertEquals("allowedMethods had incorrect value for save action", "POST", map.get("save"));
    assertEquals("allowedMethods had incorrect value for update action", "POST", map.get("update"));
  }