Skip to content

Instantly share code, notes, and snippets.

@malomalo
Created July 19, 2020 18:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save malomalo/86048f4c2208ce4c388e9b69c89b6fe7 to your computer and use it in GitHub Desktop.
Save malomalo/86048f4c2208ce4c388e9b69c89b6fe7 to your computer and use it in GitHub Desktop.
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "rails", '5.1.6.2'
gem 'pg'
gem 'turbostreamer'
gem 'oj'
end
require 'rails/all'
require "active_record"
require "action_controller/railtie"
require 'action_view/testing/resolvers'
require "turbostreamer"
ActionView::Template.register_template_handler :streamer, TurboStreamer::Handler
ActiveRecord::Base.establish_connection(adapter: "postgresql", database: "railstest")
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :users, force: true do |t|
t.string :name
t.timestamps
end
create_table :roles, force: true do |t|
t.integer :user_id
t.string :name
t.timestamps
end
end
class User < ActiveRecord::Base
has_many :roles
end
class Role < ActiveRecord::Base
belongs_to :user
end
class TestApp < Rails::Application
secrets.secret_token = "secret_token"
secrets.secret_key_base = "secret_key_base"
config.action_controller.perform_caching = true
config.action_controller.enable_fragment_cache_logging = true
config.cache_store = :memory_store, { size: 64.megabytes }
config.logger = Logger.new($stdout)
Rails.logger = config.logger
routes.draw do
resources :pools, only: :index
end
end
class PoolsController < ActionController::Base
include Rails.application.routes.url_helpers
self.view_paths = [ActionView::FixtureResolver.new(
"layouts/application.html.erb" => '<%= yield %>',
"pools/index.json.streamer"=> <<-RB
json.object! do
json.cache! @users do
json.users @users do |user|
end
end
end
RB
)]
def index
@users = User.includes(:roles).where("roles.name IN ('a', 'b')").references(:roles)
render layout: false
end
end
Rails.backtrace_cleaner.remove_silencers!
require "minitest/autorun"
class PoolTest < Minitest::Test
include Rack::Test::Methods
def setup
@app = Rails.application
Rails.cache = ActiveSupport::Cache::MemoryStore.new
end
def test_index
get "/pools.json"
assert last_response.ok?
assert_equal last_response.body, "# of primary categories: 1"
end
private
def app
@app
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment