icfnext / prosper

A Spock-based integration testing library for prosperous AEM development.
Other
28 stars 19 forks source link

Building Content with Binary Data #25

Closed cmrockwell closed 4 years ago

cmrockwell commented 4 years ago

I am testing an OSGI Service, which returns an image path given a page resource.

Here is the setup

//Case 4 Image from pages parsys
    def "Path for Image from inside page content"() {
        setup:
        def imageFile = new File("src/test/resources", "thumbnail.jpg")
pageBuilder.content {
    'subpage-upload' {
        'jcr:content' { par {
            'image' ("sling:resourceType": "wcm/foundation/components/image")
                    { 'file' { 'jcr:content'("jcr:data": imageFile.bytes ) } }
        }
        }
    }
    'subpage-file-reference' {
        'jcr:content' { par {
            'image' ("fileReference": "/content/dam/um-lsa.jpg",
                    "sling:resourceType": "wcm/foundation/components/image")
        }
        }
    }

    'dam' { 'um-lsa.jpg' {} }
}

It gives an error when setting { 'file' { 'jcr:content'("jcr:data": imageFile.bytes ) } }

groovy.lang.MissingMethodException: No signature of method:services.osgi.services.ImageServiceSpec.jcr:content() is applicable for argument types: (java.util.LinkedHashMap) values: [[jcr:data:[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, ...]]]

at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8$_closure58$_closure61$_closure62.closure63$_closure64(ImageServiceSpec.groovy:218) at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8$_closure58$_closure61$_closure62.closure63$_closure64(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8$_closure58$_closure61.closure62$_closure63(ImageServiceSpec.groovy:218) at services.osgi.services.ImageServiceSpec$__spock_feature_1_7_closure8$_closure58$_closure61.closure62$_closure63(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8$_closure58.closure61$_closure62(ImageServiceSpec.groovy:217) at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8$_closure58.closure61$_closure62(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec$spock_feature_1_7_closure8.closure58$_closure61(ImageServiceSpec.groovy:216) at services.osgi.services.ImageServiceSpec$__spock_feature_1_7_closure8.closure58$_closure61(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec.$spock_feature_1_7_closure8$_closure58(ImageServiceSpec.groovy:216) at services.osgi.services.ImageServiceSpec.$spock_feature_1_7_closure8$_closure58(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec.Path for Image from inside page content_closure8(ImageServiceSpec.groovy:215) at services.osgi.services.ImageServiceSpec.Path for Image from inside page content_closure8(ImageServiceSpec.groovy) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.call(Closure.java:408) at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147) at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:67) at services.osgi.services.ImageServiceSpec.Path for Image from inside page content(ImageServiceSpec.groovy:214)

Do you have any advice for building Spock test JCR data that would simulate an image resource with binary data under the page or fileReference from the DAM?

Screen Shot 2019-09-23 at 11 27 30 AM
markdaugherty commented 4 years ago

For assets or other binaries, I have typically created a content package instead of using the builders as described: https://github.com/icfnext/prosper#content-import

cmrockwell commented 4 years ago

Thank you! Content Import looks very useful, and will consider using it next time.

For now, serlializing the data to String seems to work as well { 'file' { 'jcr:content'("jcr:data": imageFile.bytes as String) } }