File: context_middleware_test.rb

package info (click to toggle)
ruby-riot 0.12.7-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, forky, sid, trixie
  • size: 512 kB
  • sloc: ruby: 2,557; makefile: 2
file content (123 lines) | stat: -rw-r--r-- 3,343 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
require 'teststrap'

context "ContextMiddleware" do
  setup { Riot::ContextMiddleware.new("") }
  teardown { Riot::Context.middlewares.clear }

  asserts("#call on the base class") do
    topic.call("Foo")
  end.raises(RuntimeError, "You should implement call yourself")

  context "registration" do
    setup { Class.new(Riot::ContextMiddleware) { register } }
    asserts("registered middlewares list") { Riot::Context.middlewares }.size(1)
    asserts("registered middleware") { Riot::Context.middlewares.first }.kind_of(Class)
  end # registration

  context "that is not meant to be used" do
    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        # def handle?(context) context.description == "Bar"; end
        def call(context)
          context.setup { "fooberries" } if context.description == "Bar"
          middleware.call(context)
        end
      end
    end

    setup do
      Riot::Context.new("Foo") { asserts_topic.nil }.run(MockReporter.new)
    end

    asserts("tests passed") { topic.passes }.equals(1)
  end # that is not meant to be used

  context "that is meant to be used" do
    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        # def handle?(context); true; end
        def call(context)
          context.setup { "fooberries" }
          middleware.call(context)
        end
      end
    end

    setup do
      Riot::Context.new("Foo") { asserts_topic.equals("fooberries") }.run(MockReporter.new)
    end

    asserts("tests passed") { topic.passes }.equals(1)
  end # that is meant to be used

  context "applied in multiples" do
    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        def call(context)
          context.setup { topic + "berries" }
          middleware.call(context)
        end
      end
    end

    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        def call(context)
          context.setup { "foo" }
          middleware.call(context)
        end
      end
    end

    setup do
      Riot::Context.new("Foo") { asserts_topic.equals("fooberries") }.run(MockReporter.new)
    end

    asserts("tests passed") { topic.passes }.equals(1)
  end # that are not exclusive

  context "has access to options after context setup" do
    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        def call(context)
          middleware.call(context)
          context.setup { "fooberries" } if context.option(:foo) == "bar"
        end
      end
    end

    setup do
      Riot::Context.new("Foo") do
        set :foo, "bar"
        asserts_topic.equals("fooberries")
      end.run(MockReporter.new)
    end

    asserts("tests passed") { topic.passes }.equals(1)
  end # has access to options after context setup

  context "that errors while preparing" do
    hookup do
      Class.new(Riot::ContextMiddleware) do
        register
        def call(context)
          raise Exception.new("Banana pants")
        end
      end
    end

    setup do
      Riot::Context.new("Foo") { asserts_topic.nil }.run(MockReporter.new)
    end

    asserts("tests passed") { topic.passes }.equals(0)
    asserts("tests failed") { topic.failures }.equals(0)
    asserts("tests errored") { topic.errors }.equals(1)
  end # that is not meant to be used

end # ContextMiddleware