File: test_flash.rb

package info (click to toggle)
ruby-rack-flash3 1.0.5-2.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 160 kB
  • sloc: ruby: 296; makefile: 7
file content (157 lines) | stat: -rw-r--r-- 3,602 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
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
require File.dirname(__FILE__) + '/helper'

describe 'Rack::Flash' do
  extend Rack::Test::Methods

  def app(&block)
    return Sinatra.new &block
  end

  before do
    @fake_session = {}
  end

  def new_flash(entries={})
    flash = Rack::Flash::FlashHash.new(@fake_session)
    entries.each { |key,val| flash[key] = val }
    flash
  end

  it 'stores entries' do
    new_flash[:foo] = 'bar'
    new_flash[:foo].should.equal('bar')
  end

  it 'accepts strings or hashes' do
    new_flash[:foo] = 'bar'
    new_flash['foo'].should.equal('bar')
  end

  it 'deletes entries from session after retrieval' do
    new_flash[:foo] = 'bar'
    new_flash[:foo]
    new_flash[:foo].should.be.nil
  end

  it 'caches retrieved entries in instance' do
    flash = new_flash(:foo => 'bar')
    flash[:foo].should.equal('bar')
    flash[:foo].should.equal('bar')
  end

  it 'does not step on session keys' do
    @fake_session[:foo] = true
    new_flash[:foo] = false
    @fake_session[:foo].should.be.true
  end

  it 'can flag existing entries' do
    flash = new_flash(:foo => 'bar', :fizz => 'buzz')
    flash.flag!
    flash.flagged.should.include(:foo)
    flash.flagged.should.include(:fizz)
  end

  it 'can sweep flagged entries' do
    err_explain do
      flash = new_flash(:foo => 'bar', :fizz => 'buzz')
      flash.flag!
      flash.sweep!
      flash.flagged.should.be.empty
      new_flash[:foo].should.be.nil
      new_flash[:fizz].should.be.nil
    end
  end

  it 'allows setters with Flash.now semantics' do
    flash = new_flash
    flash.now[:foo] = 'bar'
    flash[:foo].should.equal('bar')
    new_flash[:foo].should.be.nil
  end

  it 'does not raise an error when session is cleared' do
    flash = new_flash
    flash[:foo] = 'bar'
    @fake_session.clear
    flash['foo'].should.equal(nil)
  end

  describe 'accessorize option' do
    def new_flash(entries={})
      flash = Rack::Flash::FlashHash.new(@fake_session, :accessorize => [:foo, :fizz])
      entries.each { |key,val| flash[key] = val }
      flash
    end

    it 'allows getters' do
      flash = new_flash(:foo => 'bar')
      flash.foo.should.equal('bar')
    end

    it 'allows setters' do
      flash = new_flash
      flash.fizz = 'buzz'
      flash.fizz.should.equal('buzz')
    end

    it 'allows declarative setters' do
      flash = new_flash
      flash.fizz 'buzz'
      flash.fizz.should.equal('buzz')
    end

    it 'allows setters with Flash.now semantics' do
      flash = new_flash
      flash.foo! 'bar'
      flash.foo.should.equal('bar')
      new_flash[:foo].should.be.nil
    end

    it 'only defines accessors for passed entry types' do
      err_explain do
        flash = new_flash
        proc {
          flash.bliggety = 'blam'
        }.should.raise(NoMethodError)
      end
    end
  end

  it 'does not provide getters by default' do
    proc {
      new_flash(:foo => 'bar').foo
    }.should.raise(NoMethodError)
  end

  it 'does not provide setters by default' do
    proc {
      flash = new_flash
      flash.fizz = 'buzz'
    }.should.raise(NoMethodError)
  end

  describe 'integration' do
    it 'provides :sweep option to clear unused entries' do
      app {
        use Rack::Flash, :sweep => true

        set :sessions, true

        get '/' do
          'ok'
        end
      }

      fake_flash = Rack::FakeFlash.new(:foo => 'bar')

      get '/', :env=>{ 'x-rack.flash' => fake_flash }

      fake_flash.should.be.flagged
      fake_flash.should.be.swept
      fake_flash.store[:foo].should.be.nil
    end
  end

  # Testing sessions is a royal pain in the ass.
end