File: middleware_spec.rb

package info (click to toggle)
ruby-http-accept-language 2.1.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 140 kB
  • sloc: ruby: 363; makefile: 3
file content (60 lines) | stat: -rw-r--r-- 1,663 bytes parent folder | download | duplicates (3)
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
require 'http_accept_language'
require 'rack/test'
require 'json'

class TestRackApp

  def call(env)
    request = Rack::Request.new(env)
    http_accept_language = env.http_accept_language
    result = {
      :user_preferred_languages => http_accept_language.user_preferred_languages,
    }
    if request.params['preferred']
      result[:preferred_language_from] = http_accept_language.preferred_language_from(request.params['preferred'])
    end
    [ 200, {}, [ JSON.generate(result) ]]
  end

end

describe "Rack integration" do
  include Rack::Test::Methods

  def app
    Rack::Builder.new do
      use HttpAcceptLanguage::Middleware
      run TestRackApp.new
    end.to_app
  end

  it "handles reuse of the env instance" do
    env = { "HTTP_ACCEPT_LANGUAGE" => "en" }
    app = lambda { |env| env }
    middleware = HttpAcceptLanguage::Middleware.new(app)
    middleware.call(env)
    expect(env.http_accept_language.user_preferred_languages).to eq %w{en}
    env["HTTP_ACCEPT_LANGUAGE"] = "de"
    middleware.call(env)
    expect(env.http_accept_language.user_preferred_languages).to eq %w{de}
  end

  it "decodes the HTTP_ACCEPT_LANGUAGE header" do
    request_with_header 'en-us,en-gb;q=0.8,en;q=0.6,es-419'
    expect(r['user_preferred_languages']).to eq %w{en-US es-419 en-GB en}
  end

  it "finds the first available language" do
    request_with_header 'en-us,en-gb;q=0.8,en;q=0.6,es-419', :preferred => %w(en en-GB)
    expect(r['preferred_language_from']).to eq 'en-GB'
  end

  def request_with_header(header, params = {})
    get "/", params, 'HTTP_ACCEPT_LANGUAGE' => header
  end

  def r
    JSON.parse(last_response.body)
  end

end