citrusbyte/ripple

View on GitHub
lib/ripple/conflict/test_helper.rb

Summary

Maintainability
A
35 mins
Test Coverage
module Ripple
  module Conflict
    module TestHelper
      def create_conflict(main_record, *modifiers)
        # We have to disable all on conflict resolvers while we create conflict
        # so that they don't auto-resolve it.
        orig_hooks = Riak::RObject.on_conflict_hooks.dup
        Riak::RObject.on_conflict_hooks.clear

        begin
          klass, key = main_record.class, main_record.key
          raise "#{klass.bucket.name} allow_mult property is false!" unless klass.bucket.allow_mult
          records = modifiers.map { |_| klass.find!(key) }

          records.zip(modifiers).each do |(record, modifier)|
            # necessary to get conflict on 0.14 and earlier, so riak thinks they are being saved by different clients
            Ripple.client.client_id += 1

            modifier.call(record)
            record.save! unless record.deleted?
          end

          robject = klass.bucket.get(key)
          raise "#{robject} is not in conflict as expected." unless robject.conflict?
        ensure
          orig_hooks.each do |hook|
            Riak::RObject.on_conflict(&hook)
          end
        end
      end
    end
  end
end