_, err := command.Run(sourceDir, request)
				Ω(err).Should(HaveOccurred())
			})
		})

		Describe("uploading the file", func() {
			It("uploads the file", func() {
				request.Params.From = "a/(.*).tgz"
				request.Params.To = "a-folder/"
				createFile("a/file.tgz")

				_, err := command.Run(sourceDir, request)
				Ω(err).ShouldNot(HaveOccurred())

				Ω(s3client.UploadFileCallCount()).Should(Equal(1))
				bucketName, remotePath, localPath := s3client.UploadFileArgsForCall(0)

				Ω(bucketName).Should(Equal("bucket-name"))
				Ω(remotePath).Should(Equal("a-folder/file.tgz"))
				Ω(localPath).Should(Equal(filepath.Join(sourceDir, "a/file.tgz")))
			})

			It("can handle empty to to put it in the root", func() {
				request.Params.From = "a/(.*).tgz"
				request.Params.To = ""
				createFile("a/file.tgz")

				_, err := command.Run(sourceDir, request)
				Ω(err).ShouldNot(HaveOccurred())

				Ω(s3client.UploadFileCallCount()).Should(Equal(1))
				createFile("a/file1.tgz")
				createFile("a/file2.tgz")

				_, err := command.Run(sourceDir, request)
				Ω(err).Should(HaveOccurred())
			})

			It("defaults the ACL to 'private'", func() {
				request.Params.File = "a/*.tgz"
				createFile("a/file.tgz")

				_, err := command.Run(sourceDir, request)
				Ω(err).ShouldNot(HaveOccurred())

				Ω(s3client.UploadFileCallCount()).Should(Equal(1))
				bucketName, remotePath, localPath, options := s3client.UploadFileArgsForCall(0)

				Ω(bucketName).Should(Equal("bucket-name"))
				Ω(remotePath).Should(Equal("file.tgz"))
				Ω(localPath).Should(Equal(filepath.Join(sourceDir, "a/file.tgz")))
				Ω(options).Should(Equal(s3resource.UploadFileOptions{Acl: "private"}))
			})
		})

		Context("when specifying an ACL for the uploaded file", func() {
			BeforeEach(func() {
				request.Params.File = "a/*.tgz"
				request.Params.Acl = "public-read"
				createFile("a/file.tgz")
			})