Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/attr_encrypted/test/legacy_active_record_test.rb')
-rw-r--r--vendor/gems/attr_encrypted/test/legacy_active_record_test.rb120
1 files changed, 120 insertions, 0 deletions
diff --git a/vendor/gems/attr_encrypted/test/legacy_active_record_test.rb b/vendor/gems/attr_encrypted/test/legacy_active_record_test.rb
new file mode 100644
index 00000000000..802318570fa
--- /dev/null
+++ b/vendor/gems/attr_encrypted/test/legacy_active_record_test.rb
@@ -0,0 +1,120 @@
+# frozen_string_literal: true
+
+# -*- encoding: utf-8 -*-
+require_relative 'test_helper'
+
+ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
+
+def create_people_table
+ ActiveRecord::Schema.define(:version => 1) do
+ create_table :legacy_people do |t|
+ t.string :encrypted_email
+ t.string :password
+ t.string :encrypted_credentials
+ t.string :salt
+ end
+ end
+end
+
+# The table needs to exist before defining the class
+create_people_table
+
+ActiveRecord::MissingAttributeError = ActiveModel::MissingAttributeError unless defined?(ActiveRecord::MissingAttributeError)
+
+class LegacyPerson < ActiveRecord::Base
+ self.attr_encrypted_options[:insecure_mode] = true
+ self.attr_encrypted_options[:algorithm] = 'aes-256-cbc'
+ self.attr_encrypted_options[:mode] = :single_iv_and_salt
+
+ attr_encrypted :email, :key => 'a secret key'
+ attr_encrypted :credentials, :key => Proc.new { |user| Encryptor.encrypt(:value => user.salt, :key => 'some private key', insecure_mode: true, algorithm: 'aes-256-cbc') }, :marshal => true
+
+ ActiveSupport::Deprecation.silenced = true
+ def after_initialize; end
+ ActiveSupport::Deprecation.silenced = false
+
+ after_initialize :initialize_salt_and_credentials
+
+ protected
+
+ def initialize_salt_and_credentials
+ self.salt ||= Digest::SHA256.hexdigest((Time.now.to_i * rand(5)).to_s)
+ self.credentials ||= { :username => 'example', :password => 'test' }
+ rescue ActiveRecord::MissingAttributeError
+ end
+end
+
+class LegacyPersonWithValidation < LegacyPerson
+ validates_presence_of :email
+ validates_uniqueness_of :encrypted_email
+end
+
+class LegacyActiveRecordTest < Minitest::Test
+
+ def setup
+ drop_all_tables
+ create_people_table
+ end
+
+ def test_should_decrypt_with_correct_encoding
+ if defined?(Encoding)
+ @person = LegacyPerson.create :email => 'test@example.com'
+ assert_equal 'UTF-8', LegacyPerson.first.email.encoding.name
+ end
+ end
+
+ def test_should_encrypt_email
+ @person = LegacyPerson.create :email => 'test@example.com'
+ refute_nil @person.encrypted_email
+ refute_equal @person.email, @person.encrypted_email
+ assert_equal @person.email, LegacyPerson.first.email
+ end
+
+ def test_should_marshal_and_encrypt_credentials
+ @person = LegacyPerson.create
+ refute_nil @person.encrypted_credentials
+ refute_equal @person.credentials, @person.encrypted_credentials
+ assert_equal @person.credentials, LegacyPerson.first.credentials
+ end
+
+ def test_should_find_by_email
+ @person = LegacyPerson.create(:email => 'test@example.com')
+ assert_equal @person, LegacyPerson.find_by_email('test@example.com')
+ end
+
+ def test_should_find_by_email_and_password
+ LegacyPerson.create(:email => 'test@example.com', :password => 'invalid')
+ @person = LegacyPerson.create(:email => 'test@example.com', :password => 'test')
+ assert_equal @person, LegacyPerson.find_by_email_and_password('test@example.com', 'test')
+ end
+
+ def test_should_scope_by_email
+ @person = LegacyPerson.create(:email => 'test@example.com')
+ assert_equal @person, LegacyPerson.scoped_by_email('test@example.com').first rescue NoMethodError
+ end
+
+ def test_should_scope_by_email_and_password
+ LegacyPerson.create(:email => 'test@example.com', :password => 'invalid')
+ @person = LegacyPerson.create(:email => 'test@example.com', :password => 'test')
+ assert_equal @person, LegacyPerson.scoped_by_email_and_password('test@example.com', 'test').first rescue NoMethodError
+ end
+
+ def test_should_encode_by_default
+ assert LegacyPerson.attr_encrypted_options[:encode]
+ end
+
+ def test_should_validate_presence_of_email
+ @person = LegacyPersonWithValidation.new
+ assert !@person.valid?
+ assert !@person.errors[:email].empty? || @person.errors.on(:email)
+ end
+
+ def test_should_validate_uniqueness_of_email
+ @person = LegacyPersonWithValidation.new :email => 'test@example.com'
+ assert @person.save
+ @person2 = LegacyPersonWithValidation.new :email => @person.email
+ assert !@person2.valid?
+ assert !@person2.errors[:encrypted_email].empty? || @person2.errors.on(:encrypted_email)
+ end
+
+end