password_hash_spec.rb 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. require 'rails_helper'
  2. RSpec.describe PasswordHash do
  3. let(:pw_plain) { 'zammad' }
  4. context 'stable API' do
  5. it 'responds to crypt' do
  6. expect(described_class).to respond_to(:crypt)
  7. end
  8. it 'responds to verified?' do
  9. expect(described_class).to respond_to(:verified?)
  10. end
  11. it 'responds to crypted?' do
  12. expect(described_class).to respond_to(:crypted?)
  13. end
  14. it 'responds to legacy?' do
  15. expect(described_class).to respond_to(:legacy?)
  16. end
  17. end
  18. context 'encryption' do
  19. it 'crypts passwords' do
  20. pw_crypted = described_class.crypt(pw_plain)
  21. expect(pw_crypted).not_to eq(pw_plain)
  22. end
  23. it 'verifies crypted passwords' do
  24. pw_crypted = described_class.crypt(pw_plain)
  25. expect(described_class.verified?(pw_crypted, pw_plain)).to be true
  26. end
  27. it 'detects crypted passwords' do
  28. pw_crypted = described_class.crypt(pw_plain)
  29. expect(described_class.crypted?(pw_crypted)).to be true
  30. end
  31. end
  32. context 'legacy' do
  33. let(:zammad_sha2) { '{sha2}dd9c764fa7ea18cd992c8600006d3dc3ac983d1ba22e9ba2d71f6207456be0ba' }
  34. it 'requires hash to be not blank' do
  35. expect(described_class.legacy?(nil, pw_plain)).to be_falsy
  36. expect(described_class.legacy?('', pw_plain)).to be_falsy
  37. end
  38. it 'requires password to be not nil' do
  39. expect(described_class.legacy?(zammad_sha2, nil)).to be_falsy
  40. end
  41. it 'detects sha2 hashes' do
  42. expect(described_class.legacy?(zammad_sha2, pw_plain)).to be true
  43. end
  44. end
  45. end