describe EncryptionService do
  describe "#encrypt" do
    subject { EncryptionService.new.encrypt(value) }

    context "with a nil value" do
      let(:value) { nil }

      it { expect(subject).to be_nil }
    end

    context "with a string value" do
      let(:value) { "The quick brown fox jumps over the lazy dog" }

      it { expect(subject).to be_instance_of(String) }
      it { expect(subject).to be_present }
      it { expect(subject).not_to eq(value) }
    end
  end

  describe "#decrypt" do
    subject { EncryptionService.new.decrypt(encrypted_value) }

    context "with a nil value" do
      let(:encrypted_value) { nil }

      it { expect(subject).to be_nil }
    end

    context "with a string value" do
      let (:value) { "The quick brown fox jumps over the lazy dog" }
      let(:encrypted_value) { EncryptionService.new.encrypt(value) }

      it { expect(subject).to eq(value) }
    end

    context "with an invalid value" do
      let(:encrypted_value) { "Gur dhvpx oebja sbk whzcf bire gur ynml qbt" }

      it { expect { subject }.to raise_exception StandardError }
    end
  end
end