Sha256: 8ae9b2b216f57aac573d477b8af30e17c8cab778cd22e865b4c14d122c70c1dc

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require 'spec_helper'
describe Upsert do
  describe "doesn't blow up on reserved words" do
    # collect and uniq reserved words
    reserved_words = ['mysql_reserved.txt', 'pg_reserved.txt'].map do |basename|
      File.expand_path("../misc/#{basename}", __FILE__)
    end.map do |path|
      IO.readlines(path)
    end.flatten.map(&:chomp).select(&:present?).uniq
  
    # make lots of AR models, each of which has 10 columns named after these words
    nasties = []
    reserved_words.each_slice(10) do |words|
      eval %{
        class Nasty#{nasties.length} < ActiveRecord::Base
        end
      }
      nasty = Object.const_get("Nasty#{nasties.length}")
      nasty.class_eval do
        self.primary_key = 'fake_primary_key'
        col :fake_primary_key
        words.each do |word|
          col word
        end
      end
      nasties << [ nasty, words ]
    end
    nasties.each do |nasty, _|
      nasty.auto_upgrade!
    end
  
    describe "reserved words" do
      nasties.each do |nasty, words|
        it "doesn't die on reserved words #{words.join(',')}" do
          upsert = Upsert.new $conn, nasty.table_name
          random = rand(1e3).to_s
          selector = { :fake_primary_key => random, words.first => words.first }
          document = words[1..-1].inject({}) { |memo, word| memo[word] = word; memo }
          assert_creates nasty, [selector.merge(document)] do
            upsert.row selector, document
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upsert-0.4.0 spec/reserved_words_spec.rb