From 21aa9edbf6ce347b73af81896ad781e18da34ad9 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Mon, 28 Jan 2019 10:55:22 +0530 Subject: [PATCH 01/10] field to store the container name in ufile domain --- grails-app/domain/com/causecode/fileuploader/UFile.groovy | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/grails-app/domain/com/causecode/fileuploader/UFile.groovy b/grails-app/domain/com/causecode/fileuploader/UFile.groovy index 631986d..704c9e3 100644 --- a/grails-app/domain/com/causecode/fileuploader/UFile.groovy +++ b/grails-app/domain/com/causecode/fileuploader/UFile.groovy @@ -37,6 +37,7 @@ class UFile implements Serializable { String fileGroup String name String path + String containerName // Name of the cloud container. //Contains calculated hash value of file content String checksum @@ -65,6 +66,7 @@ class UFile implements Serializable { dateCreated bindable: false lastUpdated bindable: false envName bindable: false + containerName bindable: false } static mapping = { @@ -77,6 +79,11 @@ class UFile implements Serializable { checksumAlgorithm index: true } + // Store the container name of cloud in the {@link UFile} instance. + def beforeInsert() { + this.containerName = this.getContainer() + } + def afterDelete() { /* * Using Holder class to get service instead of injecting it as dependency injection with transient modifier. From 1b7b319d50bcfa307b1a8da6450265792c9888b4 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Mon, 28 Jan 2019 13:44:07 +0530 Subject: [PATCH 02/10] changes in the test cases --- grails-app/domain/com/causecode/fileuploader/UFile.groovy | 6 +++--- .../com/causecode/fileuploader/FileUploaderService.groovy | 7 +++++++ .../groovy/com/causecode/fileuploader/FileGroup.groovy | 2 +- .../groovy/com/causecode/fileuploader/FileGroupSpec.groovy | 4 ++-- .../causecode/fileuploader/FileUploaderServiceSpec.groovy | 1 + .../groovy/com/causecode/fileuploader/UFileSpec.groovy | 4 ++-- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/grails-app/domain/com/causecode/fileuploader/UFile.groovy b/grails-app/domain/com/causecode/fileuploader/UFile.groovy index 704c9e3..f89337a 100644 --- a/grails-app/domain/com/causecode/fileuploader/UFile.groovy +++ b/grails-app/domain/com/causecode/fileuploader/UFile.groovy @@ -81,7 +81,7 @@ class UFile implements Serializable { // Store the container name of cloud in the {@link UFile} instance. def beforeInsert() { - this.containerName = this.getContainer() + this.@containerName = this.getContainer() } def afterDelete() { @@ -111,7 +111,7 @@ class UFile implements Serializable { } String getContainer() { - containerName(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) + getContainerName(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) } String getFullName() { @@ -131,7 +131,7 @@ class UFile implements Serializable { * @param containerName Name of the Amazon file container or Google bucket. * @return Modified container name as described above. */ - static String containerName(String containerName) { + static String getContainerName(String containerName) { if (!containerName) { return } diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index 9cc12fe..61097b9 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -47,6 +47,7 @@ class FileUploaderService { Date expireOn long currentTimeMillis = System.currentTimeMillis() CDNProvider cdnProvider + String containerName UFileType type = UFileType.LOCAL String path FileGroup fileGroupInstance = new FileGroup(group) @@ -100,6 +101,12 @@ class FileUploaderService { throw new StorageConfigurationException('Provider not defined in the Config. Please define one.') } + containerName = fileGroupInstance.containerName + + if (!containerName) { + throw new StorageConfigurationException('Container name not defined in the Config. Please define one.') + } + expireOn = isPublicGroup(group) ? null : new Date(new Date().time + expirationPeriod * 1000) path = uploadFileToCloud(fileData, fileGroupInstance, tempFile) } else { diff --git a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy index b44ded1..49ec0b2 100644 --- a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy +++ b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy @@ -203,7 +203,7 @@ class FileGroup { // Method which fetches containerName from application.groovy file and returns it. String getContainerName() { - return UFile.containerName(this.groupConfig.container ?: this.config.container) + return UFile.getContainerName(this.groupConfig.container ?: this.config.container) } // Method that fetched CDNProvider from the config and returns it. diff --git a/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy index fa7ba1d..278fe67 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy @@ -84,7 +84,7 @@ class FileGroupSpec extends Specification implements BaseTestSetup, BuildDataTes resultPath.contains('/tmp') } - void "test scopeFileName when containerName does not exist"() { + void "test scopeFileName when getContainerName does not exist"() { given: 'An instance of FileGroup class' UFile uFileInstance = UFile.build() FileGroup fileGroupInstance = new FileGroup('testGoogle') @@ -99,7 +99,7 @@ class FileGroupSpec extends Specification implements BaseTestSetup, BuildDataTes when: 'scopeFileName method is called and container name does not exist' GroovyMock(UFile, global: true) - UFile.containerName(_) >> { + UFile.getContainerName(_) >> { return null } diff --git a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy index 5b0f7c6..40c8c58 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy @@ -92,6 +92,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement new FileGroup(_) >> fileGroupMock fileGroupMock.cdnProvider >> provider + fileGroupMock.containerName >> 'test-bucket' fileGroupMock.groupConfig >> [storageTypes: 'CDN'] when: 'The saveFile method is called' diff --git a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy index 61c3fb6..d677dbf 100644 --- a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy @@ -120,7 +120,7 @@ class UFileSpec extends Specification implements BaseTestSetup, DomainUnitTest Date: Mon, 28 Jan 2019 16:23:32 +0530 Subject: [PATCH 03/10] added test cases --- grails-app/conf/application.groovy | 1 + .../com/causecode/fileuploader/UFile.groovy | 11 ++---- .../fileuploader/FileUploaderService.groovy | 10 ++++-- .../causecode/fileuploader/FileGroup.groovy | 2 +- .../BaseFileUploaderServiceSpecSetup.groovy | 1 + .../fileuploader/FileGroupSpec.groovy | 4 +-- .../FileUploaderServiceSpec.groovy | 34 ++++++++++++++++++- .../causecode/fileuploader/UFileSpec.groovy | 5 +-- 8 files changed, 51 insertions(+), 17 deletions(-) diff --git a/grails-app/conf/application.groovy b/grails-app/conf/application.groovy index 08af37b..c822150 100644 --- a/grails-app/conf/application.groovy +++ b/grails-app/conf/application.groovy @@ -53,6 +53,7 @@ fileuploader { maxSize = 1024 * 1024 * 2 // 2 MB allowedExtensions = ["jpg", "jpeg", "gif", "png", "txt"] path = '/tmp' + container = 'test-container' } } diff --git a/grails-app/domain/com/causecode/fileuploader/UFile.groovy b/grails-app/domain/com/causecode/fileuploader/UFile.groovy index f89337a..6e24f75 100644 --- a/grails-app/domain/com/causecode/fileuploader/UFile.groovy +++ b/grails-app/domain/com/causecode/fileuploader/UFile.groovy @@ -66,7 +66,7 @@ class UFile implements Serializable { dateCreated bindable: false lastUpdated bindable: false envName bindable: false - containerName bindable: false + containerName nullable: true } static mapping = { @@ -79,11 +79,6 @@ class UFile implements Serializable { checksumAlgorithm index: true } - // Store the container name of cloud in the {@link UFile} instance. - def beforeInsert() { - this.@containerName = this.getContainer() - } - def afterDelete() { /* * Using Holder class to get service instead of injecting it as dependency injection with transient modifier. @@ -111,7 +106,7 @@ class UFile implements Serializable { } String getContainer() { - getContainerName(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) + containerName(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) } String getFullName() { @@ -131,7 +126,7 @@ class UFile implements Serializable { * @param containerName Name of the Amazon file container or Google bucket. * @return Modified container name as described above. */ - static String getContainerName(String containerName) { + static String containerName(String containerName) { if (!containerName) { return } diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index 61097b9..f93bebc 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -47,12 +47,13 @@ class FileUploaderService { Date expireOn long currentTimeMillis = System.currentTimeMillis() CDNProvider cdnProvider - String containerName UFileType type = UFileType.LOCAL String path FileGroup fileGroupInstance = new FileGroup(group) ChecksumValidator checksumValidator = new ChecksumValidator(fileGroupInstance) + String containerNameFomConfig + if (checksumValidator.shouldCalculateChecksum()) { UFile uFileInstance = UFile.findByChecksumAndChecksumAlgorithm(checksumValidator.getChecksum(file), checksumValidator.algorithm) @@ -101,9 +102,9 @@ class FileUploaderService { throw new StorageConfigurationException('Provider not defined in the Config. Please define one.') } - containerName = fileGroupInstance.containerName + containerNameFomConfig = fileGroupInstance.containerName - if (!containerName) { + if (!containerNameFomConfig) { throw new StorageConfigurationException('Container name not defined in the Config. Please define one.') } @@ -124,6 +125,9 @@ class FileUploaderService { ufile.checksumAlgorithm = checksumValidator.algorithm } + // Assign container name to the UFile instance + ufile.@containerName = containerNameFomConfig + NucleusUtils.save(ufile, true) return ufile } diff --git a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy index 49ec0b2..b44ded1 100644 --- a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy +++ b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy @@ -203,7 +203,7 @@ class FileGroup { // Method which fetches containerName from application.groovy file and returns it. String getContainerName() { - return UFile.getContainerName(this.groupConfig.container ?: this.config.container) + return UFile.containerName(this.groupConfig.container ?: this.config.container) } // Method that fetched CDNProvider from the config and returns it. diff --git a/src/test/groovy/com/causecode/fileuploader/BaseFileUploaderServiceSpecSetup.groovy b/src/test/groovy/com/causecode/fileuploader/BaseFileUploaderServiceSpecSetup.groovy index 03b3a50..613f0cc 100644 --- a/src/test/groovy/com/causecode/fileuploader/BaseFileUploaderServiceSpecSetup.groovy +++ b/src/test/groovy/com/causecode/fileuploader/BaseFileUploaderServiceSpecSetup.groovy @@ -98,6 +98,7 @@ class BaseFileUploaderServiceSpecSetup extends Specification implements BaseTest void mockFileGroupConstructor(String storageTypes) { new FileGroup(_) >> { String group -> fileGroupMock.groupName = group + fileGroupMock.containerName >> 'test-container' fileGroupMock.groupConfig >> [storageTypes: storageTypes] return fileGroupMock diff --git a/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy index 278fe67..fa7ba1d 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileGroupSpec.groovy @@ -84,7 +84,7 @@ class FileGroupSpec extends Specification implements BaseTestSetup, BuildDataTes resultPath.contains('/tmp') } - void "test scopeFileName when getContainerName does not exist"() { + void "test scopeFileName when containerName does not exist"() { given: 'An instance of FileGroup class' UFile uFileInstance = UFile.build() FileGroup fileGroupInstance = new FileGroup('testGoogle') @@ -99,7 +99,7 @@ class FileGroupSpec extends Specification implements BaseTestSetup, BuildDataTes when: 'scopeFileName method is called and container name does not exist' GroovyMock(UFile, global: true) - UFile.getContainerName(_) >> { + UFile.containerName(_) >> { return null } diff --git a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy index 40c8c58..8ca23bc 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy @@ -126,6 +126,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement and: 'Mocked FileGroup class method call' new FileGroup(_) >> fileGroupMock fileGroupMock.cdnProvider >> CDNProvider.GOOGLE + fileGroupMock.containerName >> 'test-container' fileGroupMock.groupConfig >> [storageTypes: 'CDN'] mockGetFileNameAndExtensions() @@ -545,6 +546,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement mockGetFileNameAndExtensions() mockUploadFileMethod(true) mockGetProviderInstance('google') + 4 * fileGroupMock.containerName >> 'test-container' 5 * fileGroupMock.cdnProvider >> { return } >> { @@ -566,6 +568,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement then: 'Method should return instance of UFile' result.fileGroup == 'testGoogle' result.type == UFileType.CDN_PUBLIC + result.containerName == 'test-container' when: 'saveFile method is hit and file belongs to StandardMultiartFile' mockUploadFileMethod(true) @@ -609,6 +612,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement then: 'Method should return saved UFile instance' result.id != null + assert result.containerName == null when: 'saveFile method is called and error occurs while saving file' result = service.saveFile('testLocal', commonsMultipartFileInstance, 'test') @@ -788,6 +792,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement and: 'Mocked FileGroup Instance' new FileGroup(_) >> fileGroupMock fileGroupMock.cdnProvider >> CDNProvider.GOOGLE + fileGroupMock.containerName >> 'test-container' fileGroupMock.groupConfig >> [storageTypes: 'CDN', checksum: [calculate: true, algorithm: Algorithm.SHA1]] and: 'The saveFile method has been already called once for given file' @@ -839,5 +844,32 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement Exception exception = thrown(IllegalArgumentException) exception.message == "No enum constant ${Algorithm.canonicalName}.ABCD" } -} + void "test saveFile method for when container name is not defined"() { + given: 'Instances of CommonsMultipartFile to upload' + File fileInstance = getFileInstance('/tmp/test.txt') + + DiskFileItem fileItem = getDiskFileItemInstance(fileInstance) + CommonsMultipartFile commonsMultipartFileInstance = new CommonsMultipartFile(fileItem) + + and: 'Mocked methods of FileGroup to return empty container name' + mockFileGroupConstructor('CDN') + 1 * fileGroupMock.containerName >> { + return null + } + + 1 * fileGroupMock.cdnProvider >> { + return CDNProvider.GOOGLE + } + + and: 'Mocked getFileNameAndExtensions method of fileGroupMock' + mockGetFileNameAndExtensions() + + when: 'saveFile is called and container name is not defined' + service.saveFile('testGoogle', commonsMultipartFileInstance, 'test') + + then: 'Method should throw StorageConfigurationException' + StorageConfigurationException exception = thrown(StorageConfigurationException) + exception.message == 'Container name not defined in the Config. Please define one.' + } +} diff --git a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy index d677dbf..416ac42 100644 --- a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy @@ -13,6 +13,7 @@ import grails.buildtestdata.BuildDataTest import grails.buildtestdata.mixin.Build import grails.testing.gorm.DomainUnitTest import grails.util.Environment +import grails.util.Holders import org.junit.Rule import org.slf4j.Logger import spock.lang.Specification @@ -120,7 +121,7 @@ class UFileSpec extends Specification implements BaseTestSetup, DomainUnitTest Date: Mon, 28 Jan 2019 16:25:48 +0530 Subject: [PATCH 04/10] version updated --- README.md | 4 ++-- build.gradle | 2 +- changelog.md | 7 ++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index df72375..8f1e702 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# File-Uploader Plugin (Latest 4.0.0) +# File-Uploader Plugin (Latest 4.0.1) [![Maintainability](https://api.codeclimate.com/v1/badges/13bfee73c29ecd2ea4b2/maintainability)](https://codeclimate.com/github/causecode/grails-file-uploader/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/13bfee73c29ecd2ea4b2/test_coverage)](https://codeclimate.com/github/causecode/grails-file-uploader/test_coverage) -File-Uploader Plugin >= 4.0.0 supports Grails 3.3.x (Tested with 3.3.5) +File-Uploader Plugin >= 4.0.1 supports Grails 3.3.x (Tested with 3.3.5) File-Uploader Plugin <= 3.1.x supports Grails 3.2.x (Tested upto 3.2.5) # For Grails 2.x refer branch [here](https://github.com/causecode/grails-file-uploader/tree/grails-2.x-master) diff --git a/build.gradle b/build.gradle index 41c4f6c..d844bb6 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { } } -version "4.0.0" +version "4.0.1" group "com.causecode.plugins" apply plugin: "idea" diff --git a/changelog.md b/changelog.md index 857d23d..3ae3bad 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,11 @@ # ChangeLog -## Version 4.0.0 [Unreleased] +## Version 4.0.1 [Unreleased] + +### Added +- Field to store the container name in UFile domain. + +## Version 4.0.0 [19-12-2018] ### Changed - Upgraded the plugin to support grails 3.3.5 From 70e5025f302d29ba65de6a3767b99505b4b65c19 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Mon, 28 Jan 2019 16:43:58 +0530 Subject: [PATCH 05/10] fixed codeclimate issues --- .../com/causecode/fileuploader/UFile.groovy | 6 ++--- .../fileuploader/FileUploaderService.groovy | 27 +++++++++++-------- .../causecode/fileuploader/FileGroup.groovy | 4 +-- .../renewer/DefaultTemporaryUrlRenewer.groovy | 2 +- .../FileUploaderServiceSpec.groovy | 3 +-- .../causecode/fileuploader/UFileSpec.groovy | 9 +++---- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/grails-app/domain/com/causecode/fileuploader/UFile.groovy b/grails-app/domain/com/causecode/fileuploader/UFile.groovy index 6e24f75..b227262 100644 --- a/grails-app/domain/com/causecode/fileuploader/UFile.groovy +++ b/grails-app/domain/com/causecode/fileuploader/UFile.groovy @@ -105,8 +105,8 @@ class UFile implements Serializable { new File(path).exists() } - String getContainer() { - containerName(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) + String getContainerFromConfig() { + containerNameFromConfig(Holders.flatConfig["fileuploader.groups.${fileGroup}.container"]) } String getFullName() { @@ -126,7 +126,7 @@ class UFile implements Serializable { * @param containerName Name of the Amazon file container or Google bucket. * @return Modified container name as described above. */ - static String containerName(String containerName) { + static String containerNameFromConfig(String containerName) { if (!containerName) { return } diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index f93bebc..5b8f237 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -102,12 +102,7 @@ class FileUploaderService { throw new StorageConfigurationException('Provider not defined in the Config. Please define one.') } - containerNameFomConfig = fileGroupInstance.containerName - - if (!containerNameFomConfig) { - throw new StorageConfigurationException('Container name not defined in the Config. Please define one.') - } - + containerNameFomConfig = getContainerNameFromConfig(fileGroupInstance) expireOn = isPublicGroup(group) ? null : new Date(new Date().time + expirationPeriod * 1000) path = uploadFileToCloud(fileData, fileGroupInstance, tempFile) } else { @@ -132,6 +127,16 @@ class FileUploaderService { return ufile } + private static String getContainerNameFromConfig(FileGroup fileGroup) { + String contaierName = fileGroup.containerName + + if (!contaierName) { + throw new StorageConfigurationException('Container name not defined in the Config. Please define one.') + } + + return contaierName + } + /** * Method is used to upload file to cloud provider. Then it gets the path of uploaded file * @params fileData , fileGroupInstance, tempFile @@ -188,7 +193,7 @@ class FileUploaderService { CDNFileUploader fileUploaderInstance try { fileUploaderInstance = providerService.getProviderInstance(ufileInstance.provider.name()) - fileUploaderInstance.deleteFile(ufileInstance.container, ufileInstance.fullName) + fileUploaderInstance.deleteFile(ufileInstance.containerFromConfig, ufileInstance.fullName) } finally { fileUploaderInstance?.close() } @@ -386,7 +391,7 @@ class FileUploaderService { Boolean makePublic = isPublicGroup(uFileInstance.fileGroup) long expirationPeriod = getExpirationPeriod(uFileInstance.fileGroup) - amazonFileUploaderInstance.updatePreviousFileMetaData(uFileInstance.container, + amazonFileUploaderInstance.updatePreviousFileMetaData(uFileInstance.containerFromConfig, uFileInstance.fullName, makePublic, expirationPeriod) } @@ -463,13 +468,13 @@ class FileUploaderService { CDNFileUploader fileUploaderInstance try { fileUploaderInstance = providerService.getProviderInstance(toCDNProvider.name()) - fileUploaderInstance.uploadFile(uFile.container, downloadedFile, fileName, makePublic, + fileUploaderInstance.uploadFile(uFile.containerFromConfig, downloadedFile, fileName, makePublic, expirationPeriod) if (makePublic) { - savedUrlPath = fileUploaderInstance.getPermanentURL(uFile.container, fileName) + savedUrlPath = fileUploaderInstance.getPermanentURL(uFile.containerFromConfig, fileName) } else { - savedUrlPath = fileUploaderInstance.getTemporaryURL(uFile.container, fileName, + savedUrlPath = fileUploaderInstance.getTemporaryURL(uFile.containerFromConfig, fileName, expirationPeriod) } } finally { diff --git a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy index b44ded1..882d938 100644 --- a/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy +++ b/src/main/groovy/com/causecode/fileuploader/FileGroup.groovy @@ -201,9 +201,9 @@ class FileGroup { return fileNameBuilder.toString() } - // Method which fetches containerName from application.groovy file and returns it. + // Method which fetches container from application.groovy file and returns it. String getContainerName() { - return UFile.containerName(this.groupConfig.container ?: this.config.container) + return UFile.containerNameFromConfig(this.groupConfig.container ?: this.config.container) } // Method that fetched CDNProvider from the config and returns it. diff --git a/src/main/groovy/com/causecode/fileuploader/ufile/renewer/DefaultTemporaryUrlRenewer.groovy b/src/main/groovy/com/causecode/fileuploader/ufile/renewer/DefaultTemporaryUrlRenewer.groovy index 9455c6f..ff6953a 100644 --- a/src/main/groovy/com/causecode/fileuploader/ufile/renewer/DefaultTemporaryUrlRenewer.groovy +++ b/src/main/groovy/com/causecode/fileuploader/ufile/renewer/DefaultTemporaryUrlRenewer.groovy @@ -105,7 +105,7 @@ class DefaultTemporaryUrlRenewer implements TemporaryUrlRenewer { private boolean updateExpirationPeriodAndUrl(UFile uFile) { long expirationPeriod = getExpirationPeriod(uFile.fileGroup) - uFile.path = cdnFileUploader.getTemporaryURL(uFile.container, uFile.fullName, expirationPeriod) + uFile.path = cdnFileUploader.getTemporaryURL(uFile.containerFromConfig, uFile.fullName, expirationPeriod) uFile.expiresOn = new Date(new Date().time + expirationPeriod * 1000) if (NucleusUtils.save(uFile, true)) { diff --git a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy index 8ca23bc..a4925bf 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy @@ -17,7 +17,6 @@ import grails.util.Holders import groovy.json.JsonBuilder import org.apache.commons.fileupload.disk.DiskFileItem import org.apache.commons.validator.UrlValidator -import org.grails.plugins.codecs.HTMLCodec import org.springframework.context.MessageSource import org.springframework.context.i18n.LocaleContextHolder import org.springframework.web.multipart.MultipartFile @@ -101,7 +100,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement then: 'UFile instance should be successfully saved' ufileInstancefile.provider == provider ufileInstancefile.extension == 'txt' - ufileInstancefile.container == 'causecode-test' + ufileInstancefile.containerFromConfig == 'causecode-test' ufileInstancefile.fileGroup == fileGroup file.delete() diff --git a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy index 416ac42..a60e839 100644 --- a/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/UFileSpec.groovy @@ -13,7 +13,6 @@ import grails.buildtestdata.BuildDataTest import grails.buildtestdata.mixin.Build import grails.testing.gorm.DomainUnitTest import grails.util.Environment -import grails.util.Holders import org.junit.Rule import org.slf4j.Logger import spock.lang.Specification @@ -120,8 +119,8 @@ class UFileSpec extends Specification implements BaseTestSetup, DomainUnitTest Date: Mon, 28 Jan 2019 16:47:30 +0530 Subject: [PATCH 06/10] name and statement fixes --- .../com/causecode/fileuploader/FileUploaderService.groovy | 2 +- .../causecode/fileuploader/FileUploaderServiceSpec.groovy | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index 5b8f237..859f943 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -121,7 +121,7 @@ class FileUploaderService { } // Assign container name to the UFile instance - ufile.@containerName = containerNameFomConfig + ufile.containerName = containerNameFomConfig NucleusUtils.save(ufile, true) return ufile diff --git a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy index a4925bf..3471497 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy @@ -844,7 +844,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement exception.message == "No enum constant ${Algorithm.canonicalName}.ABCD" } - void "test saveFile method for when container name is not defined"() { + void "test saveFile method when container name is not defined in the config"() { given: 'Instances of CommonsMultipartFile to upload' File fileInstance = getFileInstance('/tmp/test.txt') @@ -853,11 +853,11 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement and: 'Mocked methods of FileGroup to return empty container name' mockFileGroupConstructor('CDN') - 1 * fileGroupMock.containerName >> { + fileGroupMock.containerName >> { return null } - 1 * fileGroupMock.cdnProvider >> { + fileGroupMock.cdnProvider >> { return CDNProvider.GOOGLE } @@ -867,7 +867,7 @@ class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implement when: 'saveFile is called and container name is not defined' service.saveFile('testGoogle', commonsMultipartFileInstance, 'test') - then: 'Method should throw StorageConfigurationException' + then: 'Method should throw StorageConfigurationException and message should match' StorageConfigurationException exception = thrown(StorageConfigurationException) exception.message == 'Container name not defined in the Config. Please define one.' } From 0dad68fcfc45183fb67db709b3458ac392676f21 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Mon, 28 Jan 2019 16:58:59 +0530 Subject: [PATCH 07/10] fixed codeclimate issue of abcmetric --- .../fileuploader/FileUploaderService.groovy | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index 859f943..8cfae9e 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -52,7 +52,7 @@ class FileUploaderService { FileGroup fileGroupInstance = new FileGroup(group) ChecksumValidator checksumValidator = new ChecksumValidator(fileGroupInstance) - String containerNameFomConfig + String containerName if (checksumValidator.shouldCalculateChecksum()) { UFile uFileInstance = UFile.findByChecksumAndChecksumAlgorithm(checksumValidator.getChecksum(file), @@ -102,7 +102,7 @@ class FileUploaderService { throw new StorageConfigurationException('Provider not defined in the Config. Please define one.') } - containerNameFomConfig = getContainerNameFromConfig(fileGroupInstance) + containerName = getContainerNameFromConfig(fileGroupInstance) expireOn = isPublicGroup(group) ? null : new Date(new Date().time + expirationPeriod * 1000) path = uploadFileToCloud(fileData, fileGroupInstance, tempFile) } else { @@ -113,21 +113,26 @@ class FileUploaderService { UFile ufile = new UFile( [name : fileData.fileName, size: fileData.fileSize, path: path, type: type, - extension: fileData.fileExtension, expiresOn: expireOn, fileGroup: group, provider: cdnProvider]) + extension: fileData.fileExtension, expiresOn: expireOn, fileGroup: group, provider: cdnProvider, + containerName: containerName]) if (checksumValidator.shouldCalculateChecksum()) { ufile.checksum = checksumValidator.getChecksum(file) ufile.checksumAlgorithm = checksumValidator.algorithm } - // Assign container name to the UFile instance - ufile.containerName = containerNameFomConfig - NucleusUtils.save(ufile, true) return ufile } - private static String getContainerNameFromConfig(FileGroup fileGroup) { + /** + * This method checks if the configuration {@link FileGroup} contains the {@link String} container name. + * + * @param fileGroup {@link FileGroup} + * @return {@link String} - containerName + * @throws StorageConfigurationException - When container name is not defined. + */ + private static String getContainerNameFromConfig(FileGroup fileGroup) throws StorageConfigurationException { String contaierName = fileGroup.containerName if (!contaierName) { From 40895e54a73298aba6cc0390fefe2692d0b83487 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Mon, 28 Jan 2019 17:04:31 +0530 Subject: [PATCH 08/10] suppress the file lenth rule --- .../com/causecode/fileuploader/FileUploaderServiceSpec.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy index 3471497..a6531a7 100644 --- a/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy +++ b/src/test/groovy/com/causecode/fileuploader/FileUploaderServiceSpec.groovy @@ -33,7 +33,7 @@ import javax.servlet.http.Part // Suppressed Methods counts since this class contains more than 30 methods. @ConfineMetaClassChanges([FileUploaderService, File]) @Build([UFile, UFileMoveHistory]) -@SuppressWarnings('MethodCount') +@SuppressWarnings(['MethodCount', 'FileLengthRule']) class FileUploaderServiceSpec extends BaseFileUploaderServiceSpecSetup implements ServiceUnitTest, BuildDataTest { From e48fc6fcf45678e06a2e1f4c034b6cba88fd0f6b Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Wed, 30 Jan 2019 15:47:43 +0530 Subject: [PATCH 09/10] added constraint for container name length --- grails-app/domain/com/causecode/fileuploader/UFile.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/domain/com/causecode/fileuploader/UFile.groovy b/grails-app/domain/com/causecode/fileuploader/UFile.groovy index b227262..ae09dc4 100644 --- a/grails-app/domain/com/causecode/fileuploader/UFile.groovy +++ b/grails-app/domain/com/causecode/fileuploader/UFile.groovy @@ -66,7 +66,7 @@ class UFile implements Serializable { dateCreated bindable: false lastUpdated bindable: false envName bindable: false - containerName nullable: true + containerName size: 3..63, nullable: true } static mapping = { From a4b400e6b9ac91d60c4d79c5d34075d5068a3065 Mon Sep 17 00:00:00 2001 From: Shivam Pandey Date: Wed, 30 Jan 2019 15:51:40 +0530 Subject: [PATCH 10/10] fixed the typo in container name --- .../com/causecode/fileuploader/FileUploaderService.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy index 8cfae9e..164542e 100644 --- a/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy +++ b/grails-app/services/com/causecode/fileuploader/FileUploaderService.groovy @@ -133,13 +133,13 @@ class FileUploaderService { * @throws StorageConfigurationException - When container name is not defined. */ private static String getContainerNameFromConfig(FileGroup fileGroup) throws StorageConfigurationException { - String contaierName = fileGroup.containerName + String containerName = fileGroup.containerName - if (!contaierName) { + if (!containerName) { throw new StorageConfigurationException('Container name not defined in the Config. Please define one.') } - return contaierName + return containerName } /**