summaryrefslogtreecommitdiff
path: root/spec/migrations/encrypt_plaintext_attributes_on_application_settings_spec.rb
blob: 122da7b3d72069e10988efcdaad1d7ba2cadc1bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# frozen_string_literal: true

require 'spec_helper'
require Rails.root.join('db', 'migrate', '20191120115530_encrypt_plaintext_attributes_on_application_settings.rb')

describe EncryptPlaintextAttributesOnApplicationSettings, :migration do
  let(:migration) { described_class.new }
  let(:application_settings) { table(:application_settings) }
  let(:plaintext) { 'secret-token' }

  PLAINTEXT_ATTRIBUTES = %w[
    akismet_api_key
    elasticsearch_aws_secret_access_key
    recaptcha_private_key
    recaptcha_site_key
    slack_app_secret
    slack_app_verification_token
  ].freeze

  describe '#up' do
    it 'encrypts token and saves it' do
      application_setting = application_settings.create
      application_setting.update_columns(
        PLAINTEXT_ATTRIBUTES.each_with_object({}) do |plaintext_attribute, attributes|
          attributes[plaintext_attribute] = plaintext
        end
      )

      migration.up

      application_setting.reload
      PLAINTEXT_ATTRIBUTES.each do |plaintext_attribute|
        expect(application_setting[plaintext_attribute]).not_to be_nil
        expect(application_setting["encrypted_#{plaintext_attribute}"]).not_to be_nil
        expect(application_setting["encrypted_#{plaintext_attribute}_iv"]).not_to be_nil
      end
    end
  end

  describe '#down' do
    it 'decrypts encrypted token and saves it' do
      application_setting = application_settings.create(
        PLAINTEXT_ATTRIBUTES.each_with_object({}) do |plaintext_attribute, attributes|
          attributes[plaintext_attribute] = plaintext
        end
      )

      migration.down

      application_setting.reload
      PLAINTEXT_ATTRIBUTES.each do |plaintext_attribute|
        expect(application_setting[plaintext_attribute]).to eq(plaintext)
        expect(application_setting["encrypted_#{plaintext_attribute}"]).to be_nil
        expect(application_setting["encrypted_#{plaintext_attribute}_iv"]).to be_nil
      end
    end
  end
end