test_attribute.rb 21.5 KB
Newer Older
1
require 'helper'
A
Aaron Patterson 已提交
2 3 4 5

module Arel
  module Attributes
    describe 'attribute' do
6 7 8
      describe '#not_eq' do
        it 'should create a NotEqual node' do
          relation = Table.new(:users)
9
          relation[:id].not_eq(10).must_be_kind_of Nodes::NotEqual
10 11 12 13 14 15
        end

        it 'should generate != in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_eq(10)
16
          mgr.to_sql.must_be_like %{
17 18 19 20 21 22 23 24
            SELECT "users"."id" FROM "users" WHERE "users"."id" != 10
          }
        end

        it 'should handle nil' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_eq(nil)
25
          mgr.to_sql.must_be_like %{
26 27 28 29 30
            SELECT "users"."id" FROM "users" WHERE "users"."id" IS NOT NULL
          }
        end
      end

31 32 33
      describe '#not_eq_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
34
          relation[:id].not_eq_any([1,2]).must_be_kind_of Nodes::Grouping
35 36 37 38 39 40
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_eq_any([1,2])
41
          mgr.to_sql.must_be_like %{
42 43 44 45 46 47 48 49
            SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 OR "users"."id" != 2)
          }
        end
      end

      describe '#not_eq_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
50
          relation[:id].not_eq_all([1,2]).must_be_kind_of Nodes::Grouping
51 52 53 54 55 56
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_eq_all([1,2])
57
          mgr.to_sql.must_be_like %{
58 59 60 61 62
            SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 AND "users"."id" != 2)
          }
        end
      end

A
Aaron Patterson 已提交
63 64 65
      describe '#gt' do
        it 'should create a GreaterThan node' do
          relation = Table.new(:users)
66
          relation[:id].gt(10).must_be_kind_of Nodes::GreaterThan
A
Aaron Patterson 已提交
67 68 69 70 71 72
        end

        it 'should generate >= in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gt(10)
73
          mgr.to_sql.must_be_like %{
A
Aaron Patterson 已提交
74 75 76 77 78
            SELECT "users"."id" FROM "users" WHERE "users"."id" > 10
          }
        end
      end

79 80 81
      describe '#gt_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
82
          relation[:id].gt_any([1,2]).must_be_kind_of Nodes::Grouping
83 84 85 86 87 88
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gt_any([1,2])
89
          mgr.to_sql.must_be_like %{
90 91 92 93 94 95 96 97
            SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 OR "users"."id" > 2)
          }
        end
      end

      describe '#gt_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
98
          relation[:id].gt_all([1,2]).must_be_kind_of Nodes::Grouping
99 100 101 102 103 104
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gt_all([1,2])
105
          mgr.to_sql.must_be_like %{
106 107 108 109 110
            SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 AND "users"."id" > 2)
          }
        end
      end

111 112 113
      describe '#gteq' do
        it 'should create a GreaterThanOrEqual node' do
          relation = Table.new(:users)
114
          relation[:id].gteq(10).must_be_kind_of Nodes::GreaterThanOrEqual
115 116 117 118 119 120
        end

        it 'should generate >= in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gteq(10)
121
          mgr.to_sql.must_be_like %{
122 123 124 125 126
            SELECT "users"."id" FROM "users" WHERE "users"."id" >= 10
          }
        end
      end

127 128 129
      describe '#gteq_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
130
          relation[:id].gteq_any([1,2]).must_be_kind_of Nodes::Grouping
131 132 133 134 135 136
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gteq_any([1,2])
137
          mgr.to_sql.must_be_like %{
138 139 140 141 142 143 144 145
            SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 OR "users"."id" >= 2)
          }
        end
      end

      describe '#gteq_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
146
          relation[:id].gteq_all([1,2]).must_be_kind_of Nodes::Grouping
147 148 149 150 151 152
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].gteq_all([1,2])
153
          mgr.to_sql.must_be_like %{
154 155 156 157 158 159 160 161
            SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 AND "users"."id" >= 2)
          }
        end
      end

      describe '#lt' do
        it 'should create a LessThan node' do
          relation = Table.new(:users)
162
          relation[:id].lt(10).must_be_kind_of Nodes::LessThan
163 164 165 166 167 168
        end

        it 'should generate < in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lt(10)
169
          mgr.to_sql.must_be_like %{
170 171 172 173 174 175 176 177
            SELECT "users"."id" FROM "users" WHERE "users"."id" < 10
          }
        end
      end

      describe '#lt_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
178
          relation[:id].lt_any([1,2]).must_be_kind_of Nodes::Grouping
179 180 181 182 183 184
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lt_any([1,2])
185
          mgr.to_sql.must_be_like %{
186 187 188 189 190 191 192 193
            SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 OR "users"."id" < 2)
          }
        end
      end

      describe '#lt_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
194
          relation[:id].lt_all([1,2]).must_be_kind_of Nodes::Grouping
195 196 197 198 199 200
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lt_all([1,2])
201
          mgr.to_sql.must_be_like %{
202 203 204 205 206 207 208 209
            SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 AND "users"."id" < 2)
          }
        end
      end

      describe '#lteq' do
        it 'should create a LessThanOrEqual node' do
          relation = Table.new(:users)
210
          relation[:id].lteq(10).must_be_kind_of Nodes::LessThanOrEqual
211 212 213 214 215 216
        end

        it 'should generate <= in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lteq(10)
217
          mgr.to_sql.must_be_like %{
218 219 220 221 222 223 224 225
            SELECT "users"."id" FROM "users" WHERE "users"."id" <= 10
          }
        end
      end

      describe '#lteq_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
226
          relation[:id].lteq_any([1,2]).must_be_kind_of Nodes::Grouping
227 228 229 230 231 232
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lteq_any([1,2])
233
          mgr.to_sql.must_be_like %{
234 235 236 237 238 239 240 241
            SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 OR "users"."id" <= 2)
          }
        end
      end

      describe '#lteq_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
242
          relation[:id].lteq_all([1,2]).must_be_kind_of Nodes::Grouping
243 244 245 246 247 248
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].lteq_all([1,2])
249
          mgr.to_sql.must_be_like %{
250 251 252 253 254
            SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 AND "users"."id" <= 2)
          }
        end
      end

A
Aaron Patterson 已提交
255 256 257
      describe '#average' do
        it 'should create a AVG node' do
          relation = Table.new(:users)
258
          relation[:id].average.must_be_kind_of Nodes::Avg
A
Aaron Patterson 已提交
259 260 261 262 263 264
        end

        # FIXME: backwards compat. Is this really necessary?
        it 'should set the alias to "avg_id"' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id].average
265
          mgr.to_sql.must_be_like %{
A
Aaron Patterson 已提交
266 267 268 269 270 271
            SELECT AVG("users"."id") AS avg_id
            FROM "users"
          }
        end
      end

A
Aaron Patterson 已提交
272 273 274
      describe '#maximum' do
        it 'should create a MAX node' do
          relation = Table.new(:users)
275
          relation[:id].maximum.must_be_kind_of Nodes::Max
A
Aaron Patterson 已提交
276 277 278 279 280 281
        end

        # FIXME: backwards compat. Is this really necessary?
        it 'should set the alias to "max_id"' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id].maximum
282
          mgr.to_sql.must_be_like %{
A
Aaron Patterson 已提交
283 284 285 286 287 288
            SELECT MAX("users"."id") AS max_id
            FROM "users"
          }
        end
      end

E
Emilio Tagua 已提交
289 290 291
      describe '#minimum' do
        it 'should create a Min node' do
          relation = Table.new(:users)
292
          relation[:id].minimum.must_be_kind_of Nodes::Min
E
Emilio Tagua 已提交
293 294 295
        end
      end

A
Aaron Patterson 已提交
296 297 298
      describe '#sum' do
        it 'should create a SUM node' do
          relation = Table.new(:users)
299
          relation[:id].sum.must_be_kind_of Nodes::Sum
A
Aaron Patterson 已提交
300 301 302 303 304 305
        end

        # FIXME: backwards compat. Is this really necessary?
        it 'should set the alias to "sum_id"' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id].sum
306
          mgr.to_sql.must_be_like %{
A
Aaron Patterson 已提交
307 308 309 310 311 312
            SELECT SUM("users"."id") AS sum_id
            FROM "users"
          }
        end
      end

313 314 315
      describe '#count' do
        it 'should return a count node' do
          relation = Table.new(:users)
316
          relation[:id].count.must_be_kind_of Nodes::Count
317
        end
A
Aaron Patterson 已提交
318 319 320 321

        it 'should take a distinct param' do
          relation = Table.new(:users)
          count = relation[:id].count(nil)
322 323
          count.must_be_kind_of Nodes::Count
          count.distinct.must_be_nil
A
Aaron Patterson 已提交
324
        end
325 326
      end

A
Aaron Patterson 已提交
327 328
      describe '#eq' do
        it 'should return an equality node' do
329
          attribute = Attribute.new nil, nil
A
Aaron Patterson 已提交
330
          equality = attribute.eq 1
331 332
          equality.left.must_equal attribute
          equality.right.must_equal 1
333
          equality.must_be_kind_of Nodes::Equality
A
Aaron Patterson 已提交
334
        end
335 336 337 338 339

        it 'should generate = in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].eq(10)
340
          mgr.to_sql.must_be_like %{
341 342 343 344 345 346 347 348
            SELECT "users"."id" FROM "users" WHERE "users"."id" = 10
          }
        end

        it 'should handle nil' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].eq(nil)
349
          mgr.to_sql.must_be_like %{
350 351 352
            SELECT "users"."id" FROM "users" WHERE "users"."id" IS NULL
          }
        end
A
Aaron Patterson 已提交
353
      end
A
Aaron Patterson 已提交
354

E
Ernie Miller 已提交
355 356 357
      describe '#eq_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
358
          relation[:id].eq_any([1,2]).must_be_kind_of Nodes::Grouping
E
Ernie Miller 已提交
359 360
        end

361
        it 'should generate ORs in sql' do
E
Ernie Miller 已提交
362 363 364
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].eq_any([1,2])
365
          mgr.to_sql.must_be_like %{
E
Ernie Miller 已提交
366 367 368
            SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 OR "users"."id" = 2)
          }
        end
369 370 371 372 373 374 375 376

        it 'should not eat input' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          values = [1,2]
          mgr.where relation[:id].eq_any(values)
          values.must_equal [1,2]
        end
E
Ernie Miller 已提交
377 378
      end

379 380 381
      describe '#eq_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
382
          relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
383 384 385 386 387 388
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].eq_all([1,2])
389
          mgr.to_sql.must_be_like %{
390 391 392
            SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
          }
        end
393 394 395 396 397 398 399 400

        it 'should not eat input' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          values = [1,2]
          mgr.where relation[:id].eq_all(values)
          values.must_equal [1,2]
        end
401 402 403 404 405
      end

      describe '#matches' do
        it 'should create a Matches node' do
          relation = Table.new(:users)
406
          relation[:name].matches('%bacon%').must_be_kind_of Nodes::Matches
407 408 409 410 411 412
        end

        it 'should generate LIKE in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].matches('%bacon%')
413
          mgr.to_sql.must_be_like %{
414 415 416 417 418 419 420 421
            SELECT "users"."id" FROM "users" WHERE "users"."name" LIKE '%bacon%'
          }
        end
      end

      describe '#matches_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
422
          relation[:name].matches_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
423 424 425 426 427 428
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].matches_any(['%chunky%','%bacon%'])
429
          mgr.to_sql.must_be_like %{
430 431 432 433 434 435 436 437
            SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' OR "users"."name" LIKE '%bacon%')
          }
        end
      end

      describe '#matches_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
438
          relation[:name].matches_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
439 440 441 442 443 444
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].matches_all(['%chunky%','%bacon%'])
445
          mgr.to_sql.must_be_like %{
446 447 448 449 450 451 452 453
            SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' AND "users"."name" LIKE '%bacon%')
          }
        end
      end

      describe '#does_not_match' do
        it 'should create a DoesNotMatch node' do
          relation = Table.new(:users)
454
          relation[:name].does_not_match('%bacon%').must_be_kind_of Nodes::DoesNotMatch
455 456 457 458 459 460
        end

        it 'should generate NOT LIKE in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].does_not_match('%bacon%')
461
          mgr.to_sql.must_be_like %{
462 463 464 465 466 467 468 469
            SELECT "users"."id" FROM "users" WHERE "users"."name" NOT LIKE '%bacon%'
          }
        end
      end

      describe '#does_not_match_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
470
          relation[:name].does_not_match_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
471 472 473 474 475 476
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].does_not_match_any(['%chunky%','%bacon%'])
477
          mgr.to_sql.must_be_like %{
478 479 480 481 482 483 484 485
            SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' OR "users"."name" NOT LIKE '%bacon%')
          }
        end
      end

      describe '#does_not_match_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
486
          relation[:name].does_not_match_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
487 488 489 490 491 492
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:name].does_not_match_all(['%chunky%','%bacon%'])
493
          mgr.to_sql.must_be_like %{
494 495 496 497 498
            SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' AND "users"."name" NOT LIKE '%bacon%')
          }
        end
      end

A
Aaron Patterson 已提交
499 500 501 502 503
      describe '#in' do
        it 'can be constructed with a list' do
        end

        it 'should return an in node' do
504
          attribute = Attribute.new nil, nil
A
Aaron Patterson 已提交
505
          node = Nodes::In.new attribute, [1,2,3]
506 507
          node.left.must_equal attribute
          node.right.must_equal [1, 2, 3]
A
Aaron Patterson 已提交
508
        end
509 510 511 512 513

        it 'should generate IN in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].in([1,2,3])
514
          mgr.to_sql.must_be_like %{
515 516 517 518 519 520 521 522
            SELECT "users"."id" FROM "users" WHERE "users"."id" IN (1, 2, 3)
          }
        end
      end

      describe '#in_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
523
          relation[:id].in_any([1,2]).must_be_kind_of Nodes::Grouping
524 525 526 527 528 529
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].in_any([[1,2], [3,4]])
530
          mgr.to_sql.must_be_like %{
531 532 533 534 535 536 537 538
            SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) OR "users"."id" IN (3, 4))
          }
        end
      end

      describe '#in_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
539
          relation[:id].in_all([1,2]).must_be_kind_of Nodes::Grouping
540 541 542 543 544 545
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].in_all([[1,2], [3,4]])
546
          mgr.to_sql.must_be_like %{
547 548 549 550 551 552 553 554 555 556
            SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) AND "users"."id" IN (3, 4))
          }
        end
      end

      describe '#not_in' do
        it 'can be constructed with a list' do
        end

        it 'should return a NotIn node' do
557
          attribute = Attribute.new nil, nil
558
          node = Nodes::NotIn.new attribute, [1,2,3]
559 560
          node.left.must_equal attribute
          node.right.must_equal [1, 2, 3]
561 562 563 564 565 566
        end

        it 'should generate NOT IN in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_in([1,2,3])
567
          mgr.to_sql.must_be_like %{
568 569 570 571 572 573 574 575
            SELECT "users"."id" FROM "users" WHERE "users"."id" NOT IN (1, 2, 3)
          }
        end
      end

      describe '#not_in_any' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
576
          relation[:id].not_in_any([1,2]).must_be_kind_of Nodes::Grouping
577 578 579 580 581 582
        end

        it 'should generate ORs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_in_any([[1,2], [3,4]])
583
          mgr.to_sql.must_be_like %{
584 585 586 587 588 589 590 591
            SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) OR "users"."id" NOT IN (3, 4))
          }
        end
      end

      describe '#not_in_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
592
          relation[:id].not_in_all([1,2]).must_be_kind_of Nodes::Grouping
593 594 595 596 597 598
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].not_in_all([[1,2], [3,4]])
599
          mgr.to_sql.must_be_like %{
600 601 602 603 604 605 606 607
            SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) AND "users"."id" NOT IN (3, 4))
          }
        end
      end

      describe '#eq_all' do
        it 'should create a Grouping node' do
          relation = Table.new(:users)
608
          relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
609 610 611 612 613 614
        end

        it 'should generate ANDs in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.where relation[:id].eq_all([1,2])
615
          mgr.to_sql.must_be_like %{
616 617 618
            SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
          }
        end
A
Aaron Patterson 已提交
619
      end
620 621

      describe '#asc' do
622
        it 'should create an Ascending node' do
623
          relation = Table.new(:users)
624
          relation[:id].asc.must_be_kind_of Nodes::Ascending
625 626 627 628 629 630
        end

        it 'should generate ASC in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.order relation[:id].asc
631
          mgr.to_sql.must_be_like %{
632 633 634 635 636 637
            SELECT "users"."id" FROM "users" ORDER BY "users"."id" ASC
          }
        end
      end

      describe '#desc' do
638
        it 'should create a Descending node' do
639
          relation = Table.new(:users)
640
          relation[:id].desc.must_be_kind_of Nodes::Descending
641 642 643 644 645 646
        end

        it 'should generate DESC in sql' do
          relation = Table.new(:users)
          mgr = relation.project relation[:id]
          mgr.order relation[:id].desc
647
          mgr.to_sql.must_be_like %{
648 649 650 651
            SELECT "users"."id" FROM "users" ORDER BY "users"."id" DESC
          }
        end
      end
A
Aaron Patterson 已提交
652
    end
A
Aaron Patterson 已提交
653 654 655 656 657 658

    describe 'equality' do
      describe '#to_sql' do
        it 'should produce sql' do
          table = Table.new :users
          condition = table['id'].eq 1
659
          condition.to_sql.must_equal '"users"."id" = 1'
A
Aaron Patterson 已提交
660 661 662
        end
      end
    end
A
Aaron Patterson 已提交
663 664
  end
end