|
120 | 120 | end |
121 | 121 | end |
122 | 122 |
|
123 | | - describe "#search_condition" do |
124 | | - let(:datatable) { AjaxDatatablesRails::Base.new(view) } |
| 123 | + describe "#configure" do |
| 124 | + let(:datatable) do |
| 125 | + class FooDatatable < AjaxDatatablesRails::Base |
| 126 | + def setup |
| 127 | + set_model_class do |klass| |
| 128 | + klass.users = User |
| 129 | + klass.requests = Statistics::Request |
| 130 | + klass.purchased_orders = PurchasedOrder |
| 131 | + klass.statistics_sessions = Statistics::Session |
| 132 | + end |
| 133 | + end |
| 134 | + end |
| 135 | + |
| 136 | + FooDatatable.new view |
| 137 | + end |
125 | 138 |
|
126 | | - context "normal model" do |
127 | | - it "should return arel object" do |
128 | | - expect(datatable.send(:search_condition, 'users.bar', 'bar').class).to eq(Arel::Nodes::Matches) |
| 139 | + context "when model class name is regular" do |
| 140 | + it "should successfully get right model class" do |
| 141 | + datatable.send(:search_condition, 'users.bar', 'bar') |
| 142 | + expect(datatable.models.users).to eq(User) |
129 | 143 | end |
130 | 144 | end |
131 | 145 |
|
132 | | - context "namespaced model" do |
133 | | - it "should return arel object" do |
134 | | - expect(datatable.send(:search_condition, 'statistics_sessions.bar', 'bar').class).to eq(Arel::Nodes::Matches) |
| 146 | + context "when custom named model class" do |
| 147 | + it "should successfully get right model class" do |
| 148 | + expect(datatable.send(:search_condition, 'requests.bar', 'bar').class) |
| 149 | + .to eq(Arel::Nodes::Matches) |
135 | 150 | end |
136 | 151 | end |
137 | 152 |
|
138 | | - it "should raise uninitialized constant if column not exist" do |
139 | | - expect { |
140 | | - datatable.send(:search_condition, 'asdusers.bar', 'bar').class |
141 | | - }.to raise_error(/uninitialized constant/) |
| 153 | + |
| 154 | + context "when model class name camelcased" do |
| 155 | + it "should successfully get right model class" do |
| 156 | + expect(datatable.send(:search_condition, 'purchased_orders.bar', 'bar').class) |
| 157 | + .to eq(Arel::Nodes::Matches) |
| 158 | + end |
| 159 | + end |
| 160 | + |
| 161 | + context "when model class name is namespaced" do |
| 162 | + it "should successfully get right model class" do |
| 163 | + expect(datatable.send(:search_condition, 'statistics_sessions.bar', 'bar').class) |
| 164 | + .to eq(Arel::Nodes::Matches) |
| 165 | + end |
| 166 | + end |
| 167 | + |
| 168 | + context "when model class defined but not found" do |
| 169 | + it "raise 'uninitialized constant'" do |
| 170 | + expect { |
| 171 | + datatable.send(:search_condition, 'non_existed_model.bar', 'bar') |
| 172 | + }.to raise_error(RuntimeError, /not found/) |
| 173 | + end |
142 | 174 | end |
143 | 175 | end |
144 | 176 |
|
|
0 commit comments