File: link_header_spec.rb

package info (click to toggle)
ruby-sinatra 4.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,932 kB
  • sloc: ruby: 17,700; sh: 25; makefile: 8
file content (99 lines) | stat: -rw-r--r-- 2,365 bytes parent folder | download | duplicates (2)
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
require 'spec_helper'

RSpec.describe Sinatra::LinkHeader do
  before do
    mock_app do
      helpers Sinatra::LinkHeader
      before('/') { link 'something', :rel => 'from-filter', :foo => :bar }

      get '/' do
        link :something, 'booyah'
      end

      get '/style' do
        stylesheet '/style.css'
      end

      get '/prefetch' do
        prefetch '/foo'
      end

      get '/link_headers' do
        response['Link'] = "<foo>     ;bar=\"baz\""
        stylesheet '/style.css'
        prefetch '/foo'
        link_headers
      end
    end
  end

  describe :link do
    it "sets link headers" do
      get '/'
      expect(headers['Link']).to include('<booyah>; rel="something"')
    end

    it "returns link html tags" do
      get '/'
      expect(body).to eq('<link href="booyah" rel="something" />')
    end

    it "takes an options hash" do
      get '/'
      elements = ["<something>", "foo=\"bar\"", "rel=\"from-filter\""]
      expect(headers['Link'].split(",").first.strip.split('; ').sort).to eq(elements)
    end
  end

  describe :stylesheet do
    it 'sets link headers' do
      get '/style'
      expect(headers['Link']).to match(%r{^</style\.css>;})
    end

    it 'sets type to text/css' do
      get '/style'
      expect(headers['Link']).to include('type="text/css"')
    end

    it 'sets rel to stylesheet' do
      get '/style'
      expect(headers['Link']).to include('rel="stylesheet"')
    end

    it 'returns html tag' do
      get '/style'
      expect(body).to match(%r{^<link href="/style\.css"})
    end
  end

  describe :prefetch do
    it 'sets link headers' do
      get '/prefetch'
      expect(headers['Link']).to match(%r{^</foo>;})
    end

    it 'sets rel to prefetch' do
      get '/prefetch'
      expect(headers['Link']).to include('rel="prefetch"')
    end

    it 'returns html tag' do
      get '/prefetch'
      expect(body).to eq('<link href="/foo" rel="prefetch" />')
    end
  end

  describe :link_headers do
    it 'generates html for all link headers' do
      get '/link_headers'
      expect(body).to include('<link href="/foo" rel="prefetch" />')
      expect(body).to include('<link href="/style.css" ')
    end

    it "respects Link headers not generated on its own" do
      get '/link_headers'
      expect(body).to include('<link href="foo" bar="baz" />')
    end
  end
end