require 'rails_helper' describe SortableTable do class SortableTestController attr_accessor :params def self.helper(foo) end include SortableTable public :set_table_sort public :table_sort end describe "#set_table_sort" do let(:controller) { SortableTestController.new } let(:default) { { column2: :asc }} let(:options) { { sorts: %w[column1 column2], default: default } } it "uses a default when no sort is given" do controller.params = {} controller.set_table_sort options expect(controller.table_sort).to eq(default) end it "applies the given sort when one is passed in" do controller.params = { sort: "column1.desc" } controller.set_table_sort options expect(controller.table_sort).to eq({ column1: :desc }) controller.params = { sort: "column1.asc" } controller.set_table_sort options expect(controller.table_sort).to eq({ column1: :asc }) controller.params = { sort: "column2.desc" } controller.set_table_sort options expect(controller.table_sort).to eq({ column2: :desc }) end it "ignores unknown directions" do controller.params = { sort: "column1.foo" } controller.set_table_sort options expect(controller.table_sort).to eq({ column1: :asc }) controller.params = { sort: "column1.foo drop tables" } controller.set_table_sort options expect(controller.table_sort).to eq({ column1: :asc }) end it "ignores unknown columns" do controller.params = { sort: "foo.asc" } controller.set_table_sort options expect(controller.table_sort).to eq(default) controller.params = { sort: ";drop table;.asc" } controller.set_table_sort options expect(controller.table_sort).to eq(default) end end end