From 4c23a60dc131de1d39d3974a350b7437df41ee81 Mon Sep 17 00:00:00 2001 From: Vitalii Samolovskikh Date: Thu, 1 Feb 2018 16:27:23 +0500 Subject: [PATCH 1/2] Rollback version to 3.2.11 and fix tests. --- build.gradle | 7 +- gradle.properties | 4 +- .../asyncmail/AsyncMailServiceSpec.groovy | 1 - .../AsynchronousMailConfigServiceSpec.groovy | 2 +- ...nchronousMailPersistenceServiceSpec.groovy | 2 +- ...usMailProcessServiceIntegrationSpec.groovy | 2 +- .../AsynchronousMailServiceSpec.groovy | 2 +- .../AsynchronousMailAttachmentSpec.groovy | 54 ++-- .../AsynchronousMailMessageBuilderSpec.groovy | 254 +++++++++--------- .../AsynchronousMailMessageSpec.groovy | 228 ++++++++-------- .../AsynchronousMailProcessServiceSpec.groovy | 12 +- .../AsynchronousMailSendServiceSpec.groovy | 5 +- .../CompareMessageBuilderSpec.groovy | 12 +- .../plugin/asyncmail/ValidatorSpec.groovy | 10 +- 14 files changed, 297 insertions(+), 298 deletions(-) diff --git a/build.gradle b/build.gradle index a66bcfb..33e89b1 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } } -version "2.0.1" +version "2.0.1-3.2.x" group "org.grails.plugins" apply plugin: 'idea' @@ -43,8 +43,7 @@ dependencies { provided "org.grails:grails-plugin-services" provided "org.grails:grails-plugin-domain-class" - testCompile "org.grails:grails-gorm-testing-support" - testCompile "net.bytebuddy:byte-buddy:1.7.9" + testCompile "org.grails:grails-plugin-testing" testCompile "org.grails.plugins:hibernate5" testCompile "com.h2database:h2:1.4.196" @@ -60,6 +59,8 @@ task wrapper(type: Wrapper) { gradleVersion = gradleWrapperVersion } +// enable if you wish to package this plugin as a standalone application +bootRepackage.enabled = false grailsPublish { userOrg = 'kefirsf' license { diff --git a/gradle.properties b/gradle.properties index 96756c4..7bc3ec5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ -grailsVersion=3.3.2 -gormVersion=6.1.8.RELEASE +grailsVersion=3.2.11 +gormVersion=6.0.12.RELEASE gradleWrapperVersion=3.5.1 diff --git a/src/integration-test/groovy/grails/plugin/asyncmail/AsyncMailServiceSpec.groovy b/src/integration-test/groovy/grails/plugin/asyncmail/AsyncMailServiceSpec.groovy index ab832a9..14fd855 100644 --- a/src/integration-test/groovy/grails/plugin/asyncmail/AsyncMailServiceSpec.groovy +++ b/src/integration-test/groovy/grails/plugin/asyncmail/AsyncMailServiceSpec.groovy @@ -1,7 +1,6 @@ package grails.plugin.asyncmail import grails.test.mixin.integration.Integration -import grails.testing.mixin.integration.Integration import grails.transaction.Rollback import spock.lang.Specification diff --git a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailConfigServiceSpec.groovy b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailConfigServiceSpec.groovy index c73ed64..b695dcf 100644 --- a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailConfigServiceSpec.groovy +++ b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailConfigServiceSpec.groovy @@ -1,6 +1,6 @@ package grails.plugin.asyncmail -import grails.testing.mixin.integration.Integration +import grails.test.mixin.integration.Integration import spock.lang.Specification /** diff --git a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailPersistenceServiceSpec.groovy b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailPersistenceServiceSpec.groovy index c1b4ca0..e916f33 100644 --- a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailPersistenceServiceSpec.groovy +++ b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailPersistenceServiceSpec.groovy @@ -1,6 +1,6 @@ package grails.plugin.asyncmail -import grails.testing.mixin.integration.Integration +import grails.test.mixin.integration.Integration import grails.transaction.Rollback import org.springframework.beans.factory.annotation.Autowired import spock.lang.Specification diff --git a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceIntegrationSpec.groovy b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceIntegrationSpec.groovy index 6138819..5112200 100644 --- a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceIntegrationSpec.groovy +++ b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceIntegrationSpec.groovy @@ -3,7 +3,7 @@ package grails.plugin.asyncmail import grails.config.Config import grails.core.support.GrailsConfigurationAware import grails.plugin.asyncmail.enums.MessageStatus -import grails.testing.mixin.integration.Integration +import grails.test.mixin.integration.Integration import grails.transaction.Rollback import org.springframework.transaction.TransactionDefinition import spock.lang.Specification diff --git a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailServiceSpec.groovy b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailServiceSpec.groovy index 3fe72b2..a40a5c0 100644 --- a/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailServiceSpec.groovy +++ b/src/integration-test/groovy/grails/plugin/asyncmail/AsynchronousMailServiceSpec.groovy @@ -1,6 +1,6 @@ package grails.plugin.asyncmail -import grails.testing.mixin.integration.Integration +import grails.test.mixin.integration.Integration import grails.transaction.Rollback import org.springframework.beans.factory.annotation.Autowired import spock.lang.Specification diff --git a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailAttachmentSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailAttachmentSpec.groovy index 7527f5f..12f2a9f 100644 --- a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailAttachmentSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailAttachmentSpec.groovy @@ -1,6 +1,6 @@ package grails.plugin.asyncmail -import grails.testing.gorm.DomainUnitTest +import grails.test.mixin.TestFor import spock.lang.Specification import static grails.plugin.asyncmail.AsynchronousMailAttachment.DEFAULT_MIME_TYPE @@ -8,56 +8,54 @@ import static grails.plugin.asyncmail.AsynchronousMailAttachment.DEFAULT_MIME_TY /** * @author Vitalii Samolovskikh aka Kefir, Puneet Behl */ -class AsynchronousMailAttachmentSpec extends Specification implements DomainUnitTest { - - +@TestFor(AsynchronousMailAttachment) +class AsynchronousMailAttachmentSpec extends Specification { void "testing default constructor"() { when: - AsynchronousMailAttachment attachment = new AsynchronousMailAttachment() + AsynchronousMailAttachment attachment = new AsynchronousMailAttachment() then: - !attachment.attachmentName - attachment.mimeType == DEFAULT_MIME_TYPE - !attachment.content - !attachment.inline + !attachment.attachmentName + attachment.mimeType == DEFAULT_MIME_TYPE + !attachment.content + !attachment.inline } void "testing constraints"() { setup: - AsynchronousMailAttachment attachment + AsynchronousMailAttachment attachment when: 'constraints on default attachment' - attachment = new AsynchronousMailAttachment() + attachment = new AsynchronousMailAttachment() then: 'should fail validation' - !attachment.validate() - attachment.errors.getFieldError('attachmentName').code == 'nullable' - attachment.errors.getFieldError('content').code == 'nullable' - attachment.errors.getFieldError('message').code == 'nullable' + !attachment.validate() + attachment.errors.getFieldError('attachmentName').code == 'nullable' + attachment.errors.getFieldError('content').code == 'nullable' + attachment.errors.getFieldError('message').code == 'nullable' when: 'attachmentName is empty' - attachment = new AsynchronousMailAttachment(attachmentName: '') + attachment = new AsynchronousMailAttachment(attachmentName: '') then: 'should fail validation with nullable error on attachmentName' - !attachment.validate() - attachment.errors.getFieldError('attachmentName').code == 'nullable' + !attachment.validate() + attachment.errors.getFieldError('attachmentName').code == 'nullable' when: 'mimeType is null' - attachment = new AsynchronousMailAttachment(mimeType: null) + attachment = new AsynchronousMailAttachment(mimeType: null) then: 'should fail validation on mimeType' - !attachment.validate() - attachment.errors.getFieldError('mimeType').code == 'nullable' + !attachment.validate() + attachment.errors.getFieldError('mimeType').code == 'nullable' when: 'a valid attachment' - attachment = new AsynchronousMailAttachment( - attachmentName:'name', - content:'Grails'.getBytes(), - message: new AsynchronousMailMessage() - ) + attachment = new AsynchronousMailAttachment( + attachmentName: 'name', + content: 'Grails'.getBytes(), + message: new AsynchronousMailMessage() + ) then: 'should pass all validations' - attachment.validate() - + attachment.validate() } } diff --git a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageBuilderSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageBuilderSpec.groovy index 5aed738..48bb04d 100644 --- a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageBuilderSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageBuilderSpec.groovy @@ -1,7 +1,9 @@ package grails.plugin.asyncmail import grails.plugins.mail.MailMessageContentRender -import grails.testing.gorm.DataTest +import grails.test.mixin.Mock +import grails.test.mixin.TestMixin +import grails.test.mixin.support.GrailsUnitTestMixin import spock.lang.Specification import spock.lang.Unroll import spock.util.mop.ConfineMetaClassChanges @@ -11,15 +13,13 @@ import static grails.plugin.asyncmail.enums.MessageStatus.CREATED /** * @author Vitalii Samolovskikh aka Kefir, Puneet Behl */ +@TestMixin(GrailsUnitTestMixin) +@Mock(AsynchronousMailMessage) @ConfineMetaClassChanges(AsynchronousMailMessageBuilder) -class AsynchronousMailMessageBuilderSpec extends Specification implements DataTest { +class AsynchronousMailMessageBuilderSpec extends Specification { AsynchronousMailMessageBuilderFactory asynchronousMailMessageBuilderFactory - void setupSpec() { - mockDomain AsynchronousMailMessage - } - void setup() { asynchronousMailMessageBuilderFactory = new AsynchronousMailMessageBuilderFactory() asynchronousMailMessageBuilderFactory.configuration = grailsApplication.config @@ -28,171 +28,171 @@ class AsynchronousMailMessageBuilderSpec extends Specification implements DataTe @Unroll("testing builder for params immediate = #immediateVal and delete = #deleteVal") void "testing builder"() { setup: - def c = { - from 'John Smith ' - to 'test1@example.com' - envelopeFrom 'mary@example.com' - subject 'Subject' - text 'Text' - immediate immediateVal - delete deleteVal - priority 1 - } - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message + def c = { + from 'John Smith ' + to 'test1@example.com' + envelopeFrom 'mary@example.com' + subject 'Subject' + text 'Text' + immediate immediateVal + delete deleteVal + priority 1 + } + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message - message.validate() + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message + message.validate() then: - message.from == 'John Smith ' - message.to == ['test1@example.com'] - message.envelopeFrom == 'mary@example.com' - message.subject == 'Subject' - message.text == 'Text' - message.status == CREATED - message.markDelete == markDeleteVal - message.markDeleteAttachments == markDeleteAttachmentsVal - - message.priority == 1 - builder.immediatelySetted == immediatelySettedVal - builder.immediately == immediatelyVal + message.from == 'John Smith ' + message.to == ['test1@example.com'] + message.envelopeFrom == 'mary@example.com' + message.subject == 'Subject' + message.text == 'Text' + message.status == CREATED + message.markDelete == markDeleteVal + message.markDeleteAttachments == markDeleteAttachmentsVal + + message.priority == 1 + builder.immediatelySetted == immediatelySettedVal + builder.immediately == immediatelyVal where: - immediateVal | deleteVal | immediatelySettedVal | immediatelyVal | markDeleteVal | markDeleteAttachmentsVal - true | true | true | true | true | false - false | 'attachments' | true | false | false | true - true | false | true | true | false | false + immediateVal | deleteVal | immediatelySettedVal | immediatelyVal | markDeleteVal | markDeleteAttachmentsVal + true | true | true | true | true | false + false | 'attachments' | true | false | false | true + true | false | true | true | false | false } void "testing mail with minimum data"() { setup: - def c = { - to 'john@example.com' - subject 'Subject' - text 'Text' - } - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message + def c = { + to 'john@example.com' + subject 'Subject' + text 'Text' + } + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message then: - message.validate() + message.validate() } - void testBodyHtmlRender(){ + void testBodyHtmlRender() { setup: - overrideDoRenderMethod('text/html') - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message - def c = { - to 'test@example.com' - subject 'Subject' - body view:'/test/html' - } + overrideDoRenderMethod('text/html') + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message + def c = { + to 'test@example.com' + subject 'Subject' + body view: '/test/html' + } when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message - message.validate() + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message + message.validate() then: - message.to == ['test@example.com'] - message.subject == 'Subject' - message.html - message.text + message.to == ['test@example.com'] + message.subject == 'Subject' + message.html + message.text } - void testHtmlRender(){ + void testHtmlRender() { setup: - overrideDoRenderMethod('text/html') - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message - def c = { - to 'test@example.com' - subject 'Subject' - locale Locale.ENGLISH - html view:'/test/html' - } + overrideDoRenderMethod('text/html') + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message + def c = { + to 'test@example.com' + subject 'Subject' + locale Locale.ENGLISH + html view: '/test/html' + } when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message - message.validate() + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message + message.validate() then: - message.to == ['test@example.com'] - message.subject == 'Subject' - message.html - message.text + message.to == ['test@example.com'] + message.subject == 'Subject' + message.html + message.text } - void testTextRender(){ + void testTextRender() { setup: - overrideDoRenderMethod('text/plain') - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message - def c = { - to 'test@example.com' - subject 'Subject' - locale 'en_us' - text view:'/test/plain' - } + overrideDoRenderMethod('text/plain') + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message + def c = { + to 'test@example.com' + subject 'Subject' + locale 'en_us' + text view: '/test/plain' + } when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message - message.validate() + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message + message.validate() then: - message.to == ['test@example.com'] - message.subject == 'Subject' - !message.html - message.text + message.to == ['test@example.com'] + message.subject == 'Subject' + !message.html + message.text } - void testBodyTextRender(){ + void testBodyTextRender() { setup: - overrideDoRenderMethod('text/plain') - AsynchronousMailMessageBuilder builder - AsynchronousMailMessage message - def c = { - to 'test@example.com' - subject 'Subject' - body view:'/test/plain' - } + overrideDoRenderMethod('text/plain') + AsynchronousMailMessageBuilder builder + AsynchronousMailMessage message + def c = { + to 'test@example.com' + subject 'Subject' + body view: '/test/plain' + } when: - builder = asynchronousMailMessageBuilderFactory.createBuilder() - c.delegate = builder - c.call() - message = builder.message - message.validate() + builder = asynchronousMailMessageBuilderFactory.createBuilder() + c.delegate = builder + c.call() + message = builder.message + message.validate() then: - message.to == ['test@example.com'] - message.subject == 'Subject' - !message.html - message.text + message.to == ['test@example.com'] + message.subject == 'Subject' + !message.html + message.text } - void testMultipartAlternative(){ + void testMultipartAlternative() { setup: AsynchronousMailMessageBuilder builder AsynchronousMailMessage message @@ -219,7 +219,7 @@ class AsynchronousMailMessageBuilderSpec extends Specification implements DataTe } protected void overrideDoRenderMethod(String contentType) { - AsynchronousMailMessageBuilder.metaClass.doRender = {Map params-> + AsynchronousMailMessageBuilder.metaClass.doRender = { Map params -> new MailMessageContentRender(null, contentType) } } diff --git a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageSpec.groovy index 28e3d97..9542a5d 100644 --- a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailMessageSpec.groovy @@ -1,6 +1,6 @@ package grails.plugin.asyncmail -import grails.testing.gorm.DomainUnitTest +import grails.test.mixin.TestFor import spock.lang.Ignore import spock.lang.Specification @@ -9,272 +9,272 @@ import static grails.plugin.asyncmail.enums.MessageStatus.* /** * @author Vitalii Samolovskikh aka Kefir, Puneet Behl */ -class AsynchronousMailMessageSpec extends Specification implements DomainUnitTest { - +@TestFor(AsynchronousMailMessage) +class AsynchronousMailMessageSpec extends Specification { void "testing default constructor"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage() + AsynchronousMailMessage message = new AsynchronousMailMessage() expect: - !message.to - !message.subject - !message.headers - !message.text - !message.html - !message.bcc - !message.cc - !message.replyTo - !message.from - !message.envelopeFrom - !message.attachments - message.status == CREATED - message.createDate - !message.sentDate - message.beginDate - message.endDate - message.attemptsCount == 0 - message.maxAttemptsCount == 1 - !message.lastAttemptDate - message.attemptInterval == 300000l + !message.to + !message.subject + !message.headers + !message.text + !message.html + !message.bcc + !message.cc + !message.replyTo + !message.from + !message.envelopeFrom + !message.attachments + message.status == CREATED + message.createDate + !message.sentDate + message.beginDate + message.endDate + message.attemptsCount == 0 + message.maxAttemptsCount == 1 + !message.lastAttemptDate + message.attemptInterval == 300000l !message.markDelete } void "message should pass validation"() { expect: - new AsynchronousMailMessage( - from: 'John Smith ', - replyTo: 'James Smith ', - cc: ['Mary Smith ', 'carl@example.com'], - bcc: ['Mary Smith ', 'carl@example.com'], - subject: 'Subject', - text: 'Text' - ).validate() + new AsynchronousMailMessage( + from: 'John Smith ', + replyTo: 'James Smith ', + cc: ['Mary Smith ', 'carl@example.com'], + bcc: ['Mary Smith ', 'carl@example.com'], + subject: 'Subject', + text: 'Text' + ).validate() } void "message should fail validation as all addresses are null"() { expect: - !new AsynchronousMailMessage( - from: 'John Smith ', - replyTo: 'James Smith ', - subject: 'Subject', - text: 'Text' - ).validate() + !new AsynchronousMailMessage( + from: 'John Smith ', + replyTo: 'James Smith ', + subject: 'Subject', + text: 'Text' + ).validate() } void "message should fail validation as all addresses are empty"() { expect: - !new AsynchronousMailMessage( - to: [], - cc: [], - bcc: [], - from: 'John Smith ', - replyTo: 'James Smith ', - subject: 'Subject', - text: 'Text' - ).validate() + !new AsynchronousMailMessage( + to: [], + cc: [], + bcc: [], + from: 'John Smith ', + replyTo: 'James Smith ', + subject: 'Subject', + text: 'Text' + ).validate() } void "message subject cannot be null"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage([:]) + AsynchronousMailMessage message = new AsynchronousMailMessage([:]) when: - message.validate() + message.validate() then: - message.errors.getFieldError('subject').code == 'nullable' + message.errors.getFieldError('subject').code == 'nullable' } void "message text cannot be null"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage([:]) + AsynchronousMailMessage message = new AsynchronousMailMessage([:]) when: - message.validate() + message.validate() then: - message.errors.getFieldError('text').code == 'nullable' + message.errors.getFieldError('text').code == 'nullable' } void "message status cannot be null"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(status: null) + AsynchronousMailMessage message = new AsynchronousMailMessage(status: null) when: - message.validate() + message.validate() then: - message.errors.getFieldError('status').code == 'nullable' + message.errors.getFieldError('status').code == 'nullable' } void "message createDate cannot be null"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(createDate: null) + AsynchronousMailMessage message = new AsynchronousMailMessage(createDate: null) when: - message.validate() + message.validate() then: - message.errors.getFieldError('createDate').code == 'nullable' + message.errors.getFieldError('createDate').code == 'nullable' } void "message beginDate cannot be null"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(beginDate: null) + AsynchronousMailMessage message = new AsynchronousMailMessage(beginDate: null) when: - message.validate() + message.validate() then: - message.errors.getFieldError('beginDate').code == 'nullable' + message.errors.getFieldError('beginDate').code == 'nullable' } void "message endDate should fail custom validation as invalid"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(endDate: new Date(System.currentTimeMillis() - 1000)) + AsynchronousMailMessage message = new AsynchronousMailMessage(endDate: new Date(System.currentTimeMillis() - 1000)) when: - message.validate() + message.validate() then: - message.errors.getFieldError('endDate').code == 'validator.invalid' + message.errors.getFieldError('endDate').code == 'validator.invalid' } void "message attemptsCount cannot be less than 0"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(attemptsCount: -1) + AsynchronousMailMessage message = new AsynchronousMailMessage(attemptsCount: -1) when: - message.validate() + message.validate() then: - message.errors.getFieldError('attemptsCount').code == 'min.notmet' + message.errors.getFieldError('attemptsCount').code == 'min.notmet' } void "message maxAttemptsCount cannot be less than 0"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(maxAttemptsCount: -1) + AsynchronousMailMessage message = new AsynchronousMailMessage(maxAttemptsCount: -1) when: - message.validate() + message.validate() then: - message.errors.getFieldError('maxAttemptsCount').code == 'min.notmet' + message.errors.getFieldError('maxAttemptsCount').code == 'min.notmet' } void "message attemptInterval cannot be less than 0"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(attemptInterval: -1) + AsynchronousMailMessage message = new AsynchronousMailMessage(attemptInterval: -1) when: - message.validate() + message.validate() then: - message.errors.getFieldError('attemptInterval').code == 'min.notmet' + message.errors.getFieldError('attemptInterval').code == 'min.notmet' } void "cc email addresses should be valid"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(cc: ['mary example com'], subject: 'Subject', text: 'Text') + AsynchronousMailMessage message = new AsynchronousMailMessage(cc: ['mary example com'], subject: 'Subject', text: 'Text') when: - message.validate() + message.validate() then: - message.errors.getFieldError('cc').code == 'asynchronous.mail.mailbox.invalid' + message.errors.getFieldError('cc').code == 'asynchronous.mail.mailbox.invalid' } void "bcc email addresses should be valid"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage(bcc: ['mary example com'], subject: 'Subject', text: 'Text') + AsynchronousMailMessage message = new AsynchronousMailMessage(bcc: ['mary example com'], subject: 'Subject', text: 'Text') when: - message.validate() + message.validate() then: - message.errors.getFieldError('bcc').code == 'asynchronous.mail.mailbox.invalid' + message.errors.getFieldError('bcc').code == 'asynchronous.mail.mailbox.invalid' } void "should fail validation as bad envelop"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage( - to: ['john@example.com'], - envelopeFrom: 'mary example com', - subject: 'Subject', - text: 'Text' - ) + AsynchronousMailMessage message = new AsynchronousMailMessage( + to: ['john@example.com'], + envelopeFrom: 'mary example com', + subject: 'Subject', + text: 'Text' + ) when: - message.validate() + message.validate() then: - message.errors.getFieldError('envelopeFrom').code == 'validator.invalid' + message.errors.getFieldError('envelopeFrom').code == 'validator.invalid' } void "testing when message is abortable"() { setup: - AsynchronousMailMessage message + AsynchronousMailMessage message when: 'message with default status' - message = new AsynchronousMailMessage() + message = new AsynchronousMailMessage() then: 'is abortable' - message.isAbortable() + message.isAbortable() when: 'message with attempted status' - message.status = ATTEMPTED + message.status = ATTEMPTED then: 'is abortable' - message.isAbortable() + message.isAbortable() when: 'message with sent status' - message.status = SENT + message.status = SENT then: 'is not abortable' - !message.isAbortable() + !message.isAbortable() when: 'message with error status' - message.status == ERROR + message.status == ERROR then: 'is not abortable' - !message.isAbortable() + !message.isAbortable() when: 'message is expired' - message.status = EXPIRED + message.status = EXPIRED then: 'is not abortable' - !message.isAbortable() + !message.isAbortable() when: 'message is abort' - message.status == ABORT + message.status == ABORT then: 'is not abortable' - !message.isAbortable() + !message.isAbortable() } void "message with headers should pass validation"() { expect: - new AsynchronousMailMessage( - from: 'John Smith ', - to: ['Mary Smith '], - subject: 'Subject', - text: 'Text', - headers: ['Content-Type': 'text/plain', 'Content-Language': 'en'] - ).validate() + new AsynchronousMailMessage( + from: 'John Smith ', + to: ['Mary Smith '], + subject: 'Subject', + text: 'Text', + headers: ['Content-Type': 'text/plain', 'Content-Language': 'en'] + ).validate() } @Ignore void "testing message.toString()"() { setup: - AsynchronousMailMessage message = new AsynchronousMailMessage( - to: ['Mary Smith ', 'carl@example.com'], - subject: 'Subject', - ) - message.id = 1 + AsynchronousMailMessage message = new AsynchronousMailMessage( + to: ['Mary Smith ', 'carl@example.com'], + subject: 'Subject', + ) + message.id = 1 expect: - message.toString() == 'grails.plugin.asyncmail.AsynchronousMailMessage(id:1, to:[Mary Smith , carl@example.com], subject:Subject, status:CREATED)' + message.toString() == 'grails.plugin.asyncmail.AsynchronousMailMessage(id:1, to:[Mary Smith , carl@example.com], subject:Subject, status:CREATED)' } } diff --git a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceSpec.groovy index 0f62ef6..44f5745 100644 --- a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailProcessServiceSpec.groovy @@ -1,7 +1,7 @@ package grails.plugin.asyncmail -import grails.testing.gorm.DataTest -import grails.testing.services.ServiceUnitTest +import grails.test.mixin.Mock +import grails.test.mixin.TestFor import spock.lang.Specification import static grails.plugin.asyncmail.enums.MessageStatus.SENT @@ -9,16 +9,14 @@ import static grails.plugin.asyncmail.enums.MessageStatus.SENT /** * @author Vitalii Samolovskikh aka Kefir, Puneet Behl */ -class AsynchronousMailProcessServiceSpec extends Specification implements ServiceUnitTest, DataTest { +@TestFor(AsynchronousMailProcessService) +@Mock(AsynchronousMailMessage) +class AsynchronousMailProcessServiceSpec extends Specification { AsynchronousMailPersistenceService asynchronousMailPersistenceService AsynchronousMailSendService asynchronousMailSendService AsynchronousMailConfigService asynchronousMailConfigService - void setupSpec(){ - mockDomain AsynchronousMailMessage - } - void setup() { asynchronousMailSendService = Mock(AsynchronousMailSendService) asynchronousMailPersistenceService = Stub(AsynchronousMailPersistenceService) { diff --git a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailSendServiceSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailSendServiceSpec.groovy index 0189c54..4281380 100644 --- a/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailSendServiceSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/AsynchronousMailSendServiceSpec.groovy @@ -2,13 +2,14 @@ package grails.plugin.asyncmail import grails.plugins.mail.MailMessageBuilder import grails.plugins.mail.MailService -import grails.testing.services.ServiceUnitTest +import grails.test.mixin.TestFor import spock.lang.Specification /** * Test for synchornous send service */ -class AsynchronousMailSendServiceSpec extends Specification implements ServiceUnitTest { +@TestFor(AsynchronousMailSendService) +class AsynchronousMailSendServiceSpec extends Specification { void setup() { service.mailService = Mock(MailService) } diff --git a/src/test/groovy/grails/plugin/asyncmail/CompareMessageBuilderSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/CompareMessageBuilderSpec.groovy index eb6f73a..1192887 100644 --- a/src/test/groovy/grails/plugin/asyncmail/CompareMessageBuilderSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/CompareMessageBuilderSpec.groovy @@ -10,12 +10,14 @@ class CompareMessageBuilderSpec extends Specification { void "testing builder methods"() { setup: - def ammbMethods = AsynchronousMailMessageBuilder.metaClass.methods - def mbMethods = MailMessageBuilder.metaClass.methods + def ammbMethods = AsynchronousMailMessageBuilder.metaClass.methods + def mbMethods = MailMessageBuilder.metaClass.methods expect: - mbMethods.every {MetaMethod mbm-> - mbm.isPublic() && ammbMethods.find {it.isPublic() && it.name == mbm.name && it.returnType == mbm.returnType && it.signature == mbm.signature} - } + mbMethods.every { MetaMethod mbm -> + mbm.isPublic() && ammbMethods.find { + it.isPublic() && it.name == mbm.name && it.returnType == mbm.returnType && it.signature == mbm.signature + } + } } } diff --git a/src/test/groovy/grails/plugin/asyncmail/ValidatorSpec.groovy b/src/test/groovy/grails/plugin/asyncmail/ValidatorSpec.groovy index ac9b87a..b3c6d0f 100644 --- a/src/test/groovy/grails/plugin/asyncmail/ValidatorSpec.groovy +++ b/src/test/groovy/grails/plugin/asyncmail/ValidatorSpec.groovy @@ -11,26 +11,26 @@ class ValidatorSpec extends Specification { void "test@example.com is valid mailbox"() { expect: - isMailbox "test@example.com" + isMailbox "test@example.com" } void "John Smith is valid mailbox"() { expect: - isMailbox "John Smith " + isMailbox "John Smith " } void "abc is not valid mailbox"() { expect: - !isMailbox("abc") + !isMailbox("abc") } void "empty string is not valid mailbox"() { expect: - !isMailbox("") + !isMailbox("") } void "blank string is not a valid mailbox"() { expect: - !isMailbox(" ") + !isMailbox(" ") } } \ No newline at end of file From 95603cf8d87f9422056967ae7ce002e260813140 Mon Sep 17 00:00:00 2001 From: mloenhar Date: Wed, 8 Aug 2018 15:39:39 +0200 Subject: [PATCH 2/2] saveMessage flush by configuration --- .../grails/plugin/asyncmail/AsynchronousMailService.groovy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/grails-app/services/grails/plugin/asyncmail/AsynchronousMailService.groovy b/grails-app/services/grails/plugin/asyncmail/AsynchronousMailService.groovy index eaf9ba9..4d25a03 100644 --- a/grails-app/services/grails/plugin/asyncmail/AsynchronousMailService.groovy +++ b/grails-app/services/grails/plugin/asyncmail/AsynchronousMailService.groovy @@ -45,7 +45,9 @@ class AsynchronousMailService { savedMessage = asynchronousMailPersistenceService.save(message, true, true) } } else { - savedMessage = asynchronousMailPersistenceService.save(message, true, true) + savedMessage = asynchronousMailPersistenceService.save(message + , asynchronousMailConfigService.useFlushOnSave + , true) } if (!savedMessage) {