File: identity_spec.rb

package info (click to toggle)
ruby-mustermann19 0.4.3%2Bgit20160621-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 756 kB
  • ctags: 445
  • sloc: ruby: 7,197; makefile: 3
file content (127 lines) | stat: -rw-r--r-- 3,791 bytes parent folder | download
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# -*- encoding: utf-8 -*-
require 'support'
require 'mustermann/identity'

describe Mustermann::Identity do
  extend Support::Pattern

  pattern '' do
    it { should     match('')  }
    it { should_not match('/') }

    it { should respond_to(:expand)       }
    it { should respond_to(:to_templates) }


    it { should     generate_template('')              }
    it { should     expand.to('')                      }
    it { should     expand(:ignore, a: 10).to('')      }
    it { should     expand(:append, a: 10).to('?a=10') }
    it { should_not expand(:raise,  a: 10)             }
    it { should_not expand(a: 10)                      }

    example do
      pattern.match('').inspect.should be == '#<Mustermann::SimpleMatch "">'
    end
  end

  pattern '/' do
    it { should     match('/')    }
    it { should_not match('/foo') }

    example { pattern.params('/').should be == {} }
    example { pattern.params('').should be_nil }

    it { should generate_template('/') }
    it { should expand.to('/')         }
  end

  pattern '/foo' do
    it { should     match('/foo')     }
    it { should_not match('/bar')     }
    it { should_not match('/foo.bar') }
  end

  pattern '/foo/bar' do
    it { should match('/foo/bar')   }
    it { should match('/foo%2Fbar') }
    it { should match('/foo%2fbar') }
  end

  pattern '/:foo' do
    it { should     match('/:foo')    }
    it { should     match('/%3Afoo')  }
    it { should_not match('/foo')     }
    it { should_not match('/foo?')    }
    it { should_not match('/foo/bar') }
    it { should_not match('/')        }
    it { should_not match('/foo/')    }

    it { should generate_template('/:foo') }
    it { should expand.to('/:foo')         }
  end

  pattern '/föö' do
    it { should match("/f%C3%B6%C3%B6") }
  end

  pattern '/test$/' do
    it { should match('/test$/') }
  end

  pattern '/te+st/' do
    it { should     match('/te+st/') }
    it { should_not match('/test/')  }
    it { should_not match('/teest/') }
  end

  pattern "/path with spaces" do
    it { should     match('/path%20with%20spaces') }
    it { should_not match('/path%2Bwith%2Bspaces') }
    it { should_not match('/path+with+spaces')     }
    it { should generate_template('/path%20with%20spaces') }
  end

  pattern '/foo&bar' do
    it { should match('/foo&bar') }
  end

  pattern '/test.bar' do
    it { should     match('/test.bar') }
    it { should_not match('/test0bar') }
  end

  pattern '/foo/bar', uri_decode: false do
    it { should     match('/foo/bar')   }
    it { should_not match('/foo%2Fbar') }
    it { should_not match('/foo%2fbar') }
  end

  pattern "/path with spaces", uri_decode: false do
    it { should_not match('/path%20with%20spaces') }
    it { should_not match('/path%2Bwith%2Bspaces') }
    it { should_not match('/path+with+spaces')     }
  end

  context "peeking" do
    subject(:pattern) { Mustermann::Identity.new("foo bar") }

    describe :peek_size do
      example { pattern.peek_size("foo bar blah")   .should be == "foo bar".size }
      example { pattern.peek_size("foo%20bar blah") .should be == "foo%20bar".size }
      example { pattern.peek_size("foobar")         .should be_nil }
    end

    describe :peek_match do
      example { pattern.peek_match("foo bar blah").to_s   .should be == "foo bar" }
      example { pattern.peek_match("foo%20bar blah").to_s .should be == "foo%20bar" }
      example { pattern.peek_match("foobar")              .should be_nil }
    end

    describe :peek_params do
      example { pattern.peek_params("foo bar blah")   .should be == [{}, "foo bar".size] }
      example { pattern.peek_params("foo%20bar blah") .should be == [{}, "foo%20bar".size] }
      example { pattern.peek_params("foobar")         .should be_nil }
    end
  end
end