summaryrefslogtreecommitdiff
path: root/web/test/test_sql.rb
blob: f8eea7b1bfec10b9e5171ed0809d23cfa1f09910 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
$: << 'lib'
require File.join(File.dirname(__FILE__), '..', 'lib', 'sql.rb')
require 'test/unit'

class TestSql < Test::Unit::TestCase

    def setup
        @select = SQL::Select.new('test', 'test')
    end

    def test_order_by_no_block
        assert_kind_of SQL::Select, @select
        @select.order_by(:foo, 'ASC')
        assert_equal 'test ORDER BY foo ASC', @select.build_query
    end

    def test_order_by_no_block_desc
        assert_kind_of SQL::Select, @select
        @select.order_by(:foo, 'DESC')
        assert_equal 'test ORDER BY foo DESC', @select.build_query
    end

    def test_order_by_simple
        assert_kind_of SQL::Select, @select
        @select.order_by(:foo, 'ASC') do |o|
            o.foo
        end
        assert_equal 'test ORDER BY foo ASC', @select.build_query
    end

    def test_order_by_desc
        @select.order_by(:foo, 'DESC') do |o|
            o.foo
        end
        assert_equal 'test ORDER BY foo DESC', @select.build_query
    end

    def test_order_by_unused
        @select.order_by([:foo], 'ASC') do |o|
            o.foo
            o.bar! 'baz'
        end
        assert_equal 'test ORDER BY foo ASC', @select.build_query
    end

    def test_order_by_reverse
        @select.order_by(:bar, 'ASC') do |o|
            o.foo
            o.bar! 'baz'
        end
        assert_equal 'test ORDER BY baz DESC', @select.build_query
    end

    def test_order_by_array
        @select.order_by([:foo, 'bar'], 'ASC') do |o|
            o.bar! 'baz'
            o.foo
        end
        assert_equal 'test ORDER BY foo ASC,baz DESC', @select.build_query
    end

    def test_order_by_array_reverse
        @select.order_by([:bar, :foo], 'DESC') do |o|
            o.foo
            o.bar!
        end
        assert_equal 'test ORDER BY bar ASC,foo DESC', @select.build_query
    end

    def test_order_by_array_multiple
        @select.order_by([:bar, :foo], 'DESC') do |o|
            o.foo 'f1'
            o.foo! :f2
            o.bar :baz
        end
        assert_equal 'test ORDER BY baz DESC,f1 DESC,f2 ASC', @select.build_query
    end

    def test_order_by_map
        @select.order_by(:length, 'ASC') do |o|
            o.length 'length(foo)'
            o.length :foo
        end
        assert_equal 'test ORDER BY length(foo) ASC,foo ASC', @select.build_query
    end

    def test_order_by_asc_or_desc
        assert_raise ArgumentError do
            @select.order_by(:foo, 'blub') do |o|
                o.foo
            end
        end
    end

    def test_order_by_no_def
        assert_raise ArgumentError do
            @select.order_by(:foo) do |o|
                o.bar
            end
        end
    end

end