How to create a minitest fixture for a non database model?
Hi!
Is there a way to create a fixture for a model that is not in the database? I built my app a few years back following a guide in which the Plans were loaded from a YML file and instantiated as ActiveRecord models, but not persisted in the database.
When I attempt to create the fixtures for Plans, I get:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "plans" does not exist
Because, of course, there IS no table for plans.
However, I still need the Plan model available in my tests.
Thanks in advance!
Here the app code - which works... Just need to create fixtures :)
plan_loader.rb - initializer
file_path = "config/plans.yml"
if File.exist?(file_path)
PLANS = YAML.load(File.read(file_path)).with_indifferent_access
end
plan.rb - model
class Plan
def self.plans
@plans ||= PLANS.keys.map { |k| PLANS[k] }
end
def self.all
plans.map { |plan| OpenStruct.new(plan) }
end
def self.where(args)
conditions = args.map do |arg_key, arg_val|
proc { |plan| plan[arg_key] == arg_val }
end
local_plans = plans.select { |plan| conditions.all? { |c| c.call(plan) } }
local_plans.flatten.map { |plan| OpenStruct.new(plan) }
end
def self.find(stripe_id)
plan = plans.find { |p| p[:stripe_id] == stripe_id }
OpenStruct.new(plan)
end
end
Actually... it seems it is auo loading them into the test environment... So, consider this closed :)