Call for Grails Testing

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Call for Grails Testing

graemer
Hello Groovy Community,

Apologies for cross posting, but as we grow closer to the first
release of Grails I am calling out to the Groovy community to have a
go at it and submit feedback.

As there are only 2 minor problems remaining to fix on JIRA:

http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:roadmap-panel

It would be invaluable if we could get some user experiences in before
the release.

The website and documentation is much improved and even if you just go
through the quick start: http://grails.codehaus.org/Quick+Start it
would be helpful

Cheers!
Graeme
Reply | Threaded
Open this post in threaded view
|

RE: Call for Grails Testing

Dierk König
One minor point:

The scaffolded domain classes would look a bit more groovy without
the line-ending semicolons ;-)

Mittie

> -----Original Message-----
> From: [hidden email] [mailto:[hidden email]]On Behalf
> Of Graeme Rocher
> Sent: Dienstag, 28. Februar 2006 10:57
> To: [hidden email]; [hidden email]
> Subject: [grails-dev] Call for Grails Testing
>
>
> Hello Groovy Community,
>
> Apologies for cross posting, but as we grow closer to the first
> release of Grails I am calling out to the Groovy community to have a
> go at it and submit feedback.
>
> As there are only 2 minor problems remaining to fix on JIRA:
>
> http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.p
> lugin.system.project:roadmap-panel
>
> It would be invaluable if we could get some user experiences in before
> the release.
>
> The website and documentation is much improved and even if you just go
> through the quick start: http://grails.codehaus.org/Quick+Start it
> would be helpful
>
> Cheers!
> Graeme
Reply | Threaded
Open this post in threaded view
|

Re: Call for Grails Testing

Steven Devijver
In reply to this post by graemer
Graeme,

I've created a simple scaffolding example and came up with this list
of bugs. I haven't had the time yet to create JIRA issues. Maybe you
should just skim through them to figure out which ones are important.

Steven

On 2/28/06, Graeme Rocher <[hidden email]> wrote:

> Hello Groovy Community,
>
> Apologies for cross posting, but as we grow closer to the first
> release of Grails I am calling out to the Groovy community to have a
> go at it and submit feedback.
>
> As there are only 2 minor problems remaining to fix on JIRA:
>
> http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:roadmap-panel
>
> It would be invaluable if we could get some user experiences in before
> the release.
>
> The website and documentation is much improved and even if you just go
> through the quick start: http://grails.codehaus.org/Quick+Start it
> would be helpful
>
> Cheers!
> Graeme
>

--
Steven Devijver
Senior Consultant
Interface21
Spring Services from the Source
http://www.interface21.com

Co-author, "Expert Spring MVC and Web Flow"
(February 2006, with Seth Ladd, Darren Davison, and Colin Yates)
http://www.amazon.com/gp/product/159059584X

Interface21 NL B.V.
Donker Curtiusstraat 7-400c
1051JL Amsterdam
The Netherlands
Phone: +31 (0)20 486 47 63
Fax: +31 (0)20 475 08 28
Mail: [hidden email]
Skype: devijvers

Grails bugs.txt (19K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Call for Grails Testing

graemer
Steven,

I've cut-and-paste your reports with comments, thanks for the feedback!:

"- No scaffolding support for java.util.Calendar"

Yes I need to add this, for the moment it will just use the same date
picker, maybe later we add a javascript calender widget

"- Put focus on first field when creating new record in scaffolding view"

Good point.

"- Creating new object with many-to-one field causes error:

Grails Runtime Exception
Error Details
Message: Invalid property 'group' of bean class [ExpenseItem]: Value
of nested property 'group' is null
Caused by: Invalid property 'group' of bean class [ExpenseItem]: Value
of nested property 'group' is null
Class: Unknown
At Line: [-1]
Code Snippet:
Stack Trace
org.springframework.beans.NullValueInNestedPathException: Invalid
property 'group' of bean class [ExpenseItem]: Value of nested property
'group' is null at
Problem is solved when new ParentDomainClass() is added"

This is the same problem that Dierk is having, unfortunatley adding
new ParentDomainClass() isn't always possible as Dierk discovered
where the relationships are cyclical. The best way to handle to catch
this exception and warn the user.. unless you have any other
suggestions?

"- Create toString() method in domain class if method is not
overridden by class or super class"

Hmm not sure about this, what would they contain? All the properties
of the domain class?

"- Declare in-memory datasource in ContextLoaderListener to avoid
database closure when ApplicationContext is reloaded, or alternatively
display warning on screen when ApplicationContext is reloaded"

Sure but this only happens when the database in in-memory.

"- Add 404 page, preferably with list of configured controllers"

Oke

"- Display better error page when page is refreshed for
myDomainClass/show/1 after database was stopped and started (caused by
ApplicationContext or server restarted) "

Right

"- null + "" creates this error:"

This is a Groovy problem as it throws a null pointer when you + null,
but where did you do this? in a controller?


"- Error below is thrown when Domain class is changed and
automatically reloaded, and class has many-to-one relationship:


Grails Runtime Exception
Error Details
Message: Failed to convert property value of type [ExpenseGroup] to
required type [ExpenseGroup] for property 'group'
Caused by: Failed to convert property value of type [ExpenseGroup] to
required type [ExpenseGroup] for property 'group'
Class: Unknown
At Line: [-1]
Code Snippet:
Stack Trace"

Can i see a stack trace for this one?


Graeme

On 07/03/06, Steven Devijver <[hidden email]> wrote:

> Graeme,
>
> I've created a simple scaffolding example and came up with this list
> of bugs. I haven't had the time yet to create JIRA issues. Maybe you
> should just skim through them to figure out which ones are important.
>
> Steven
>
> On 2/28/06, Graeme Rocher <[hidden email]> wrote:
> > Hello Groovy Community,
> >
> > Apologies for cross posting, but as we grow closer to the first
> > release of Grails I am calling out to the Groovy community to have a
> > go at it and submit feedback.
> >
> > As there are only 2 minor problems remaining to fix on JIRA:
> >
> > http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:roadmap-panel
> >
> > It would be invaluable if we could get some user experiences in before
> > the release.
> >
> > The website and documentation is much improved and even if you just go
> > through the quick start: http://grails.codehaus.org/Quick+Start it
> > would be helpful
> >
> > Cheers!
> > Graeme
> >
>
>
> --
> Steven Devijver
> Senior Consultant
> Interface21
> Spring Services from the Source
> http://www.interface21.com
>
> Co-author, "Expert Spring MVC and Web Flow"
> (February 2006, with Seth Ladd, Darren Davison, and Colin Yates)
> http://www.amazon.com/gp/product/159059584X
>
> Interface21 NL B.V.
> Donker Curtiusstraat 7-400c
> 1051JL Amsterdam
> The Netherlands
> Phone: +31 (0)20 486 47 63
> Fax: +31 (0)20 475 08 28
> Mail: [hidden email]
> Skype: devijvers
>
>
>
Reply | Threaded
Open this post in threaded view
|

RE: Call for Grails Testing

Dierk König
> "- Create toString() method in domain class if method is not
> overridden by class or super class"
>
> Hmm not sure about this, what would they contain? All the properties
> of the domain class?

This is probably too much in most cases. How about

String toString() { "${this.class.name} :  $id / $version" }

Since it is most likely that you need to implement it anyway,
I would also 'generate' this method (not only adding it dynamically).

cheers
Mittie
Reply | Threaded
Open this post in threaded view
|

Re: Call for Grails Testing

graemer
On 07/03/06, Dierk Koenig <[hidden email]> wrote:

> > "- Create toString() method in domain class if method is not
> > overridden by class or super class"
> >
> > Hmm not sure about this, what would they contain? All the properties
> > of the domain class?
>
> This is probably too much in most cases. How about
>
> String toString() { "${this.class.name} :  $id / $version" }
>
> Since it is most likely that you need to implement it anyway,
> I would also 'generate' this method (not only adding it dynamically).

Ok sounds fair enough..

Graeme

>
> cheers
> Mittie
>
Reply | Threaded
Open this post in threaded view
|

Re: Call for Grails Testing

Steven Devijver
In reply to this post by graemer
> "- Error below is thrown when Domain class is changed and
> automatically reloaded, and class has many-to-one relationship:
>
>
> Grails Runtime Exception
> Error Details
> Message: Failed to convert property value of type [ExpenseGroup] to
> required type [ExpenseGroup] for property 'group'
> Caused by: Failed to convert property value of type [ExpenseGroup] to
> required type [ExpenseGroup] for property 'group'
> Class: Unknown
> At Line: [-1]
> Code Snippet:
> Stack Trace"
>
> Can i see a stack trace for this one?
>

Grails Runtime Exception
Error Details
Message: Failed to convert property value of type [ExpenseGroup] to
required type [ExpenseGroup] for

property 'group'
Caused by: Failed to convert property value of type [ExpenseGroup] to
required type [ExpenseGroup]

for property 'group'
Class: Unknown
At Line: [-1]
Code Snippet:
Stack Trace
org.springframework.beans.TypeMismatchException: Failed to convert
property value of type

[ExpenseGroup] to required type [ExpenseGroup] for property 'group' at

org.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:839)
at

org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:584)
at

org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:469)
at

org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod.doInvokeInternal(SavePersist

entMethod.java:105) at

org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDy

namicPersistentMethod.java:49) at

org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethods.invokeMethod(AbstractDynamicMeth

ods.java:136) at

org.codehaus.groovy.grails.commons.metaclass.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.ja

va:50) at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:156) at

org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:104)
at

org.codehaus.groovy.grails.scaffolding.GrailsScaffoldDomain.save(GrailsScaffoldDomain.java:38)
at

org.codehaus.groovy.grails.scaffolding.DefaultScaffoldRequestHandler.handleSave(DefaultScaffoldReque

stHandler.java:157) at

org.codehaus.groovy.grails.scaffolding.DefaultGrailsScaffolder$SaveAction.call(DefaultGrailsScaffold

er.java:254) at groovy.lang.Closure.call(Closure.java:171) at

org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleAction(SimpleGrailsCon

trollerHelper.java:316) at

org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsContro

llerHelper.java:272) at

org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsContro

llerHelper.java:115) at

org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(SimpleGrailsControll

er.java:78) at

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAda

pter.java:44) at

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:717)
at

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:658)
at

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
at

org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:357)
at

javax.servlet.http.HttpServlet.service(HttpServlet.java:616) at

javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at

org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427) at

org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:830)

at

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInVie

wFilter.java:174) at

org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewFilter.doFilterInternal(Grai

lsOpenSessionInViewFilter.java:64) at

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at

org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)

at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
at

com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
at

org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)

at

org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloa

dServletFilter.java:219) at

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at

org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)

at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
at

org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568) at

org.mortbay.http.HttpContext.handle(HttpContext.java:1565) at

org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:635)
at

org.mortbay.http.HttpContext.handle(HttpContext.java:1517) at

org.mortbay.http.HttpServer.service(HttpServer.java:954) at

org.mortbay.http.HttpConnection.service(HttpConnection.java:816) at

org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:983) at

org.mortbay.http.HttpConnection.handle(HttpConnection.java:833) at

org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244) at

org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) at

org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)