Я хочу протестировать модель, использующую attr_encrypted для шифрования секрета в базе данных.
class Thing
attr_encrypted :secret, encode: true
end
Но когда я определяю секрет в приспособлении, закодированный символ новой строки экранируется.
one:
encrypted_secret: '<%= Thing.encrypt_secret(SecureRandom.uuid) %>'
То есть:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
Хранится в базе данных как:
'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC
m6qD'
Проблема в том, что это не удается:
thing = things(:one)
assert_equal thing, Thing.find_by_secret(thing.secret)
Thing.find_by_secret(thing.secret) возвращает nil, поскольку результирующий SQL-запрос пытается сопоставить две версии зашифрованного секрета и не может найти совпадение.
Я пытался:
one:
encrypted_secret: 'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
но получить тот же результат.
Как я могу настроить свои приборы для работы с attr_encrypted?