class Hash def traverse(parent = nil, &blk) each do |k, v| Hash === v ? v.traverse(k, &blk) : blk.call([parent, k, v]) end end end module Helpers MAGIC_NUMBER_SEQ_ID = "9999" MAGIC_NUMBER_TOOL_ID = "8888" AST_FIXTURE = File.read("./spec/lib/celery_script/ast_fixture3.json") def last_email ActionMailer::Base.deliveries.last end def empty_mail_bag ActionMailer::Base.deliveries = [] end # Create a VALID fake sequence.body for a particular user. Creates a fake # subsequence in the DB when called. def sequence_body_for(mystery) case mystery when User device = user.device when Device device = mystery when Sequence device = mystery.device else raise "No #{mystery.class}" end sid = FakeSequence.create(device: device).id tid = FactoryBot.create(:tool, device: device).id str = AST_FIXTURE .gsub(MAGIC_NUMBER_SEQ_ID, sid.to_s) .gsub(MAGIC_NUMBER_TOOL_ID, tid.to_s) JSON.parse(str)["body"] end def sign_in_as(user) # For when you're actually testing the login UI components. Otherwise, # consider using the devise test helper `sign_in` visit new_user_session_path fill_in "user_email", with: user.email fill_in "user_password", with: user.password click_button "Sign in" end def json JSON.parse(response.body, symbolize_names: true) end end