require 'rails_helper' UUID_REGEX ||= /\A[\w\d]{8}(\-[\w\d]{4}){3}-[\w\d]{12}\Z/i shared_examples_for "VersionableModel" do context "attributes" do it { is_expected.to have_readonly_attribute(:versionable_id) } end context "#versionable_id" do before do subject.valid? end it "is set on validation" do expect(subject.versionable_id).to be_present end it "is set to a random UUID" do expect(subject.versionable_id).to match(UUID_REGEX) end it "doesn't change if already set" do subject.versionable_id = SecureRandom.uuid expect { subject.valid? }.not_to change { subject.versionable_id } end end end