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 クエリが暗号化されたシークレットの 2 つのバージョンを照合しようとして、一致を取得できないためです。
私が試してみました:
one:
encrypted_secret: 'axZFZEknxUSYdUlPhwLBbj8CwSeCW5at2INA98EcCcY7MVFdmXvk7Sb4DZhC\nm6qD\n'
しかし、同じ結果が得られます。
フィクスチャを attr_encrypted で動作するように設定するにはどうすればよいですか?