Generating images of certificates
We also want to generate images of certificates so that we can display them on the verification page.
Add the following step to your Generate a certificate scenario in certificate_generation.feature:
# features/certificate_generation.feature
Scenario: Generate a certificate
...
And 3 images of certificates should be createdWe are going to save the images of the certificates in a subfolder of our assets/img folder, named usr. For testing purposes we are going to use a folder named test. We'll have separate folders for development and production environments.
Create the folders and the necessary .keep files in your terminal:
$ mkdir -p assets/img/usr/test
$ mkdir -p assets/img/usr/development
$ mkdir -p assets/img/usr/production
$ touch assets/img/usr/test/.keep
$ touch assets/img/usr/development/.keep
$ touch assets/img/usr/production/.keepAdd the following step to your application_steps.rb
# features/step_definitions/application_steps.rb
And(/^([^"]*) images of certificates should be created$/) do |count|
image_count = Dir['assets/img/usr/test/**/*.jpg'].length
expect(image_count).to eq count.to_i
endWe also need to update our database_cleaner.rb with a command that will purge the test folder of images generated for test purposes:
# features/support/database_cleaner.rb
Around do |scenario, block|
...
FileUtils.rm_rf Dir['assets/img/usr/test/**/*.jpg']
endOkay, that's our tests. Now we need to implement a solution to actually create an image of the certificate and save it. We are going to use a free software suite to create, edit, compose, or convert bitmap images, called ImageMagick. You can read more about ImageMagick on www.imagemagick.org.
The gem we are going to use is called RMagick.
Add RMagick to your Gemfile and install it with bundle install:
# Gemfile
gem 'rmagick'The actual implementation is not overly complicated. We are going to place the actual code that generates the image inside the CertificateGenerator module:
# lib/certificate_generator.rb
require 'rmagick'
module CertificateGenerator
...
def self.generate(certificate)
...
im = Magick::Image.read(output)
im[0].write("assets/img/usr/#{ENV_PATH}/" + [details[:name], details[:date]].join('_').downcase.gsub!(/\s/, '_') + '.jpg')
endRunning cucumber now should show all tests passing.
The next step is to create a verification page.
Last updated