cucumber_monitor 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/cucumber_monitor/ajax-loader.gif +0 -0
 - data/app/assets/javascripts/cucumber_monitor/cucumber_monitor.js.erb +6 -0
 - data/app/assets/stylesheets/cucumber_monitor/cucumber_monitor.css +38 -2
 - data/app/controllers/cucumber_monitor_controller.rb +8 -0
 - data/app/views/cucumber_monitor/feature_runner.js.erb +11 -0
 - data/app/views/cucumber_monitor/show_feature.html.erb +14 -2
 - data/app/views/layouts/cucumber_monitor.html.erb +1 -0
 - data/config/locales/cucumber_monitor_views.yml +13 -0
 - data/config/routes.rb +2 -0
 - data/lib/cucumber_monitor/array.rb +4 -0
 - data/lib/cucumber_monitor/base.rb +4 -0
 - data/lib/cucumber_monitor/context.rb +3 -2
 - data/lib/cucumber_monitor/feature_runner.rb +46 -0
 - data/lib/cucumber_monitor/scenario.rb +2 -1
 - data/lib/cucumber_monitor/step.rb +10 -5
 - data/lib/cucumber_monitor/version.rb +1 -1
 - data/lib/cucumber_monitor.rb +1 -0
 - data/test/base_test.rb +37 -0
 - data/test/context_test.rb +13 -0
 - data/test/cucumber_monitor_test.rb +0 -3
 - data/test/dummy/app/helpers/application_helper.rb +3 -0
 - data/test/dummy/db/development.sqlite3 +0 -0
 - data/test/dummy/db/test.sqlite3 +0 -0
 - data/test/dummy/log/test.log +1272 -0
 - data/test/feature_file_test.rb +21 -0
 - data/test/scenario_test.rb +23 -0
 - data/test/setup.rb +7 -0
 - data/test/step_test.rb +36 -0
 - data/test/test_helper.rb +2 -0
 - metadata +24 -2
 
| 
         Binary file 
     | 
| 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            body {
         
     | 
| 
       2 
2 
     | 
    
         
             
              font-family: "Lucida Console";
         
     | 
| 
      
 3 
     | 
    
         
            +
              font-size: 11px;
         
     | 
| 
       3 
4 
     | 
    
         
             
            }
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            hr {
         
     | 
| 
         @@ -20,10 +21,10 @@ hr { 
     | 
|
| 
       20 
21 
     | 
    
         
             
              border: solid 1px #ebebeb;
         
     | 
| 
       21 
22 
     | 
    
         
             
              border-radius: 5px;
         
     | 
| 
       22 
23 
     | 
    
         
             
              font-size: 12px;
         
     | 
| 
       23 
     | 
    
         
            -
              margin: 0;
         
     | 
| 
      
 24 
     | 
    
         
            +
              margin: 0 auto 20px auto;
         
     | 
| 
       24 
25 
     | 
    
         
             
              padding: 0;
         
     | 
| 
       25 
26 
     | 
    
         
             
              margin-top: 20px;
         
     | 
| 
       26 
     | 
    
         
            -
              width:  
     | 
| 
      
 27 
     | 
    
         
            +
              width: 100%;
         
     | 
| 
       27 
28 
     | 
    
         
             
            }
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
            #main table th {
         
     | 
| 
         @@ -93,4 +94,39 @@ div.feature_container .steps table td { 
     | 
|
| 
       93 
94 
     | 
    
         
             
              padding: 5px;
         
     | 
| 
       94 
95 
     | 
    
         
             
              border-bottom: #ebebeb solid 1px;
         
     | 
| 
       95 
96 
     | 
    
         
             
              border-right: #ebebeb solid 1px;
         
     | 
| 
      
 97 
     | 
    
         
            +
            }
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            .step_description {
         
     | 
| 
      
 100 
     | 
    
         
            +
              display: inline-block;
         
     | 
| 
      
 101 
     | 
    
         
            +
              width: 100%;
         
     | 
| 
      
 102 
     | 
    
         
            +
            }
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            .step_result {
         
     | 
| 
      
 105 
     | 
    
         
            +
              width: 5%;
         
     | 
| 
      
 106 
     | 
    
         
            +
              padding: 5px;
         
     | 
| 
      
 107 
     | 
    
         
            +
              border: solid 1px #ccc;
         
     | 
| 
      
 108 
     | 
    
         
            +
              display: inline-block;
         
     | 
| 
      
 109 
     | 
    
         
            +
              float: right;
         
     | 
| 
      
 110 
     | 
    
         
            +
              font-size: 11px;
         
     | 
| 
      
 111 
     | 
    
         
            +
              text-align: center;
         
     | 
| 
      
 112 
     | 
    
         
            +
            }
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            .run_feature {
         
     | 
| 
      
 115 
     | 
    
         
            +
              width: 150px;
         
     | 
| 
      
 116 
     | 
    
         
            +
              float: right;
         
     | 
| 
      
 117 
     | 
    
         
            +
              padding: 10px;
         
     | 
| 
      
 118 
     | 
    
         
            +
              display: block;
         
     | 
| 
      
 119 
     | 
    
         
            +
              background: #006699;
         
     | 
| 
      
 120 
     | 
    
         
            +
              text-align: center;
         
     | 
| 
      
 121 
     | 
    
         
            +
            }
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            .run_feature a {
         
     | 
| 
      
 124 
     | 
    
         
            +
              font-size: 11px;
         
     | 
| 
      
 125 
     | 
    
         
            +
              text-align: center;
         
     | 
| 
      
 126 
     | 
    
         
            +
              color: #fff;
         
     | 
| 
      
 127 
     | 
    
         
            +
              text-decoration: none;
         
     | 
| 
      
 128 
     | 
    
         
            +
            }
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            .td_result {
         
     | 
| 
      
 131 
     | 
    
         
            +
              width: 6%;
         
     | 
| 
       96 
132 
     | 
    
         
             
            }
         
     | 
| 
         @@ -16,4 +16,12 @@ class CucumberMonitorController < ApplicationController 
     | 
|
| 
       16 
16 
     | 
    
         
             
                @steps_search_results = CucumberMonitor.new.search(params[:criteria])
         
     | 
| 
       17 
17 
     | 
    
         
             
              end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
      
 19 
     | 
    
         
            +
              def feature_runner
         
     | 
| 
      
 20 
     | 
    
         
            +
                respond_to do |format|
         
     | 
| 
      
 21 
     | 
    
         
            +
                  format.js do
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @json_feature_result = CucumberMonitor::FeatureRunner.run_and_return_json(name: params[:name])
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       19 
27 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $(function() {
         
     | 
| 
      
 2 
     | 
    
         
            +
              <% @json_feature_result.first['elements'].each do |element| %>
         
     | 
| 
      
 3 
     | 
    
         
            +
                <% element['steps'].each do |step| %>
         
     | 
| 
      
 4 
     | 
    
         
            +
                  <% status = step['result']['status'] %>
         
     | 
| 
      
 5 
     | 
    
         
            +
                  $("#<%= step['code'] %>").html('<%= t("results.#{status}") || status %>');
         
     | 
| 
      
 6 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 7 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              $("#run_feature_link").html("Executar feature");
         
     | 
| 
      
 10 
     | 
    
         
            +
             
         
     | 
| 
      
 11 
     | 
    
         
            +
            });
         
     | 
| 
         @@ -8,13 +8,20 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            <%= link_to t("links.back_to_features_link"), features_cucumber_monitor_path %>
         
     | 
| 
       9 
9 
     | 
    
         
             
            </p>
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            <div class="run_feature"><%= link_to 'Executar feature', feature_runner_cucumber_monitor_path(@feature.name), remote: true, id: 'run_feature_link' %></div>
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       11 
13 
     | 
    
         
             
            <% if @feature.contexts.any? %>
         
     | 
| 
       12 
14 
     | 
    
         
             
            <div class="feature_container context">
         
     | 
| 
       13 
15 
     | 
    
         
             
              <% @feature.contexts.each do |context|%>
         
     | 
| 
       14 
16 
     | 
    
         
             
                <h4><%= t(".background") %></h4>
         
     | 
| 
       15 
17 
     | 
    
         
             
                <div class="steps">
         
     | 
| 
       16 
18 
     | 
    
         
             
                  <% context.steps.each do |step| %>
         
     | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
      
 19 
     | 
    
         
            +
                    <div class="step_description">
         
     | 
| 
      
 20 
     | 
    
         
            +
                      <%= step.formatted.html_safe %>
         
     | 
| 
      
 21 
     | 
    
         
            +
                      <% if step.not_a_table %>
         
     | 
| 
      
 22 
     | 
    
         
            +
                        <div class="step_result" id="<%= step.code %>">-</div>
         
     | 
| 
      
 23 
     | 
    
         
            +
                      <% end %>
         
     | 
| 
      
 24 
     | 
    
         
            +
                    </div>
         
     | 
| 
       18 
25 
     | 
    
         
             
                    <% if step.not_a_table %>
         
     | 
| 
       19 
26 
     | 
    
         
             
                      <hr />
         
     | 
| 
       20 
27 
     | 
    
         
             
                    <% end %>
         
     | 
| 
         @@ -29,7 +36,12 @@ 
     | 
|
| 
       29 
36 
     | 
    
         
             
                <h4><%= "#{t(".scenario")} #{scenario.name}" %></h4>
         
     | 
| 
       30 
37 
     | 
    
         
             
                <div class="steps">
         
     | 
| 
       31 
38 
     | 
    
         
             
                <% scenario.steps.each do |step| %>
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
      
 39 
     | 
    
         
            +
                  <div class="step_description">
         
     | 
| 
      
 40 
     | 
    
         
            +
                    <%= step.formatted.html_safe %>
         
     | 
| 
      
 41 
     | 
    
         
            +
                    <% if step.not_a_table %>
         
     | 
| 
      
 42 
     | 
    
         
            +
                      <div class="step_result" id="<%= step.code %>">-</div>
         
     | 
| 
      
 43 
     | 
    
         
            +
                    <% end %>
         
     | 
| 
      
 44 
     | 
    
         
            +
                  </div>
         
     | 
| 
       33 
45 
     | 
    
         
             
                  <% if step.not_a_table %>
         
     | 
| 
       34 
46 
     | 
    
         
             
                    <hr /> 
         
     | 
| 
       35 
47 
     | 
    
         
             
                  <% end %>
         
     | 
| 
         @@ -3,6 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            <head>
         
     | 
| 
       4 
4 
     | 
    
         
             
              <title>Cucumber Monitor</title>
         
     | 
| 
       5 
5 
     | 
    
         
             
              <%= stylesheet_link_tag    "cucumber_monitor/cucumber_monitor", :media => "all" %>
         
     | 
| 
      
 6 
     | 
    
         
            +
              <%= javascript_include_tag  "jquery", "jquery_ujs", "cucumber_monitor/cucumber_monitor", :media => "all" %>
         
     | 
| 
       6 
7 
     | 
    
         
             
              <%= csrf_meta_tags %>
         
     | 
| 
       7 
8 
     | 
    
         
             
            </head>
         
     | 
| 
       8 
9 
     | 
    
         
             
            <body>
         
     | 
| 
         @@ -1,4 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            "pt-BR":
         
     | 
| 
      
 2 
     | 
    
         
            +
              results:
         
     | 
| 
      
 3 
     | 
    
         
            +
                passed: passou
         
     | 
| 
      
 4 
     | 
    
         
            +
                failed: falhou
         
     | 
| 
      
 5 
     | 
    
         
            +
                skipped: pulou
         
     | 
| 
       2 
6 
     | 
    
         
             
              buttons:
         
     | 
| 
       3 
7 
     | 
    
         
             
                search: Buscar
         
     | 
| 
       4 
8 
     | 
    
         
             
              links: 
         
     | 
| 
         @@ -16,6 +20,7 @@ 
     | 
|
| 
       16 
20 
     | 
    
         
             
                  feature: Funcionalidade
         
     | 
| 
       17 
21 
     | 
    
         
             
                  background: Contexto
         
     | 
| 
       18 
22 
     | 
    
         
             
                  scenario: Cenário
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       19 
24 
     | 
    
         
             
                search:
         
     | 
| 
       20 
25 
     | 
    
         
             
                  title: Busca
         
     | 
| 
       21 
26 
     | 
    
         
             
                  search_results: Resultados da busca
         
     | 
| 
         @@ -26,6 +31,10 @@ 
     | 
|
| 
       26 
31 
     | 
    
         
             
                  results_not_found_for: "Nenhum resultado encontrado para '<strong>%{criteria}</strong>'"
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
33 
     | 
    
         
             
            "en":
         
     | 
| 
      
 34 
     | 
    
         
            +
              results:
         
     | 
| 
      
 35 
     | 
    
         
            +
                passed: passou
         
     | 
| 
      
 36 
     | 
    
         
            +
                failed: falhou
         
     | 
| 
      
 37 
     | 
    
         
            +
                skipped: pulou
         
     | 
| 
       29 
38 
     | 
    
         
             
              buttons: 
         
     | 
| 
       30 
39 
     | 
    
         
             
                search: Search
         
     | 
| 
       31 
40 
     | 
    
         
             
              links:
         
     | 
| 
         @@ -43,6 +52,10 @@ 
     | 
|
| 
       43 
52 
     | 
    
         
             
                  feature: Feature
         
     | 
| 
       44 
53 
     | 
    
         
             
                  background: Background
         
     | 
| 
       45 
54 
     | 
    
         
             
                  scenario: Scenario
         
     | 
| 
      
 55 
     | 
    
         
            +
                  results:
         
     | 
| 
      
 56 
     | 
    
         
            +
                    passed: passou
         
     | 
| 
      
 57 
     | 
    
         
            +
                    failed: falhou
         
     | 
| 
      
 58 
     | 
    
         
            +
                    skipped: pulou
         
     | 
| 
       46 
59 
     | 
    
         
             
                search: 
         
     | 
| 
       47 
60 
     | 
    
         
             
                  title: Search
         
     | 
| 
       48 
61 
     | 
    
         
             
                  search_results: Search results
         
     | 
    
        data/config/routes.rb
    CHANGED
    
    | 
         @@ -1,7 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Rails.application.routes.draw do
         
     | 
| 
       2 
2 
     | 
    
         
             
              resource :cucumber_monitor, only: [] do 
         
     | 
| 
      
 3 
     | 
    
         
            +
              	get '/' => 'cucumber_monitor#features', as: 'features'
         
     | 
| 
       3 
4 
     | 
    
         
             
                get 'features' => 'cucumber_monitor#features', as: 'features'
         
     | 
| 
       4 
5 
     | 
    
         
             
                get 'show_feature/:name' => 'cucumber_monitor#show_feature', as: 'show_feature'
         
     | 
| 
       5 
6 
     | 
    
         
             
                get 'search' => 'cucumber_monitor#search', as: 'search'
         
     | 
| 
      
 7 
     | 
    
         
            +
                get 'feature_runner/:name' => 'cucumber_monitor#feature_runner', as: 'feature_runner'
         
     | 
| 
       6 
8 
     | 
    
         
             
              end
         
     | 
| 
       7 
9 
     | 
    
         
             
            end
         
     | 
| 
         @@ -8,6 +8,10 @@ class Array 
     | 
|
| 
       8 
8 
     | 
    
         
             
                    result << item
         
     | 
| 
       9 
9 
     | 
    
         
             
                  end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
                  if item.respond_to?(:description) && !item.description.nil? && !options[:description].nil? && item.description.include?(options[:description])
         
     | 
| 
      
 12 
     | 
    
         
            +
                    result << item
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       11 
15 
     | 
    
         
             
                  if item.respond_to?(:id) && item.id == options[:id]
         
     | 
| 
       12 
16 
     | 
    
         
             
                    result << item
         
     | 
| 
       13 
17 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -4,10 +4,11 @@ module CucumberMonitor 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
              class Context
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                attr_accessor :name, :feature
         
     | 
| 
      
 7 
     | 
    
         
            +
                attr_accessor :name, :keyword, :feature
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                def initialize(name,feature)
         
     | 
| 
       10 
10 
     | 
    
         
             
                  @name = name
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @keyword = I18n.t("background")
         
     | 
| 
       11 
12 
     | 
    
         
             
                  @feature = feature
         
     | 
| 
       12 
13 
     | 
    
         
             
                end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
         @@ -18,7 +19,7 @@ module CucumberMonitor 
     | 
|
| 
       18 
19 
     | 
    
         
             
                  record = false
         
     | 
| 
       19 
20 
     | 
    
         
             
                  count = 0
         
     | 
| 
       20 
21 
     | 
    
         
             
                  feature.lines.each_with_index do |line, i|
         
     | 
| 
       21 
     | 
    
         
            -
                    if line.include?( 
     | 
| 
      
 22 
     | 
    
         
            +
                    if line.include?(keyword)
         
     | 
| 
       22 
23 
     | 
    
         
             
                      started = true
         
     | 
| 
       23 
24 
     | 
    
         
             
                    end
         
     | 
| 
       24 
25 
     | 
    
         
             
                    if started && !stopped
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module CucumberMonitor
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            	class FeatureRunner
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            		def self.command(feature)
         
     | 
| 
      
 6 
     | 
    
         
            +
            			"bundle exec cucumber features/#{feature}.feature --format json --out tmp/cucumber.out"
         
     | 
| 
      
 7 
     | 
    
         
            +
            		end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            		def self.run(options={})
         
     | 
| 
      
 10 
     | 
    
         
            +
            			`#{command(options[:name])}` if options.has_key?(:name) 
         
     | 
| 
      
 11 
     | 
    
         
            +
            		end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            		def self.json
         
     | 
| 
      
 14 
     | 
    
         
            +
            			JSON.parse(File.open(CucumberMonitor::Base.cucumber_output_file).read)
         
     | 
| 
      
 15 
     | 
    
         
            +
            		end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            		def self.run_and_return_json(options={})
         
     | 
| 
      
 18 
     | 
    
         
            +
            			run(options)
         
     | 
| 
      
 19 
     | 
    
         
            +
            			json
         
     | 
| 
      
 20 
     | 
    
         
            +
            			prepare
         
     | 
| 
      
 21 
     | 
    
         
            +
            		end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            		def self.elements
         
     | 
| 
      
 24 
     | 
    
         
            +
            			json.first['elements'].map{|e| "#{e['keyword']}: #{e['name']}"}
         
     | 
| 
      
 25 
     | 
    
         
            +
            		end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            		def self.prepare
         
     | 
| 
      
 28 
     | 
    
         
            +
            			prepared_json = json
         
     | 
| 
      
 29 
     | 
    
         
            +
            			prepared_json.first['elements'].each do |element|
         
     | 
| 
      
 30 
     | 
    
         
            +
            				element['steps'].each do |step|
         
     | 
| 
      
 31 
     | 
    
         
            +
            					description = "#{step['keyword']}#{step['name']}"
         
     | 
| 
      
 32 
     | 
    
         
            +
            					code_first_part = element['name'].blank? ?  element['keyword'].parameterize : element['name'].parameterize
         
     | 
| 
      
 33 
     | 
    
         
            +
            					code_second_part = description.parameterize
         
     | 
| 
      
 34 
     | 
    
         
            +
            					code = "#{code_first_part}-#{code_second_part}"
         
     | 
| 
      
 35 
     | 
    
         
            +
            					step.merge!({
         
     | 
| 
      
 36 
     | 
    
         
            +
            						            'description' => description,
         
     | 
| 
      
 37 
     | 
    
         
            +
            						            'code' => code.parameterize
         
     | 
| 
      
 38 
     | 
    
         
            +
            						          })
         
     | 
| 
      
 39 
     | 
    
         
            +
            				end 
         
     | 
| 
      
 40 
     | 
    
         
            +
            			end
         
     | 
| 
      
 41 
     | 
    
         
            +
            			prepared_json
         
     | 
| 
      
 42 
     | 
    
         
            +
            		end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            	end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,24 +2,27 @@ module CucumberMonitor 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
              class Step
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                attr_accessor :description, :parent, :id
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :description, :code, :parent, :id
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                def initialize(description, parent, id)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @description = description.strip
         
     | 
| 
      
 9 
     | 
    
         
            +
                  code_first_part = parent.name.blank? ? parent.keyword.parameterize : parent.name.parameterize
         
     | 
| 
      
 10 
     | 
    
         
            +
                  code_second_part = @description.parameterize
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @code = "#{code_first_part}-#{code_second_part}"
         
     | 
| 
       9 
12 
     | 
    
         
             
                  @parent = parent
         
     | 
| 
       10 
13 
     | 
    
         
             
                  @id = id
         
     | 
| 
       11 
14 
     | 
    
         
             
                end
         
     | 
| 
       12 
15 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                def  
     | 
| 
       14 
     | 
    
         
            -
                  parent.steps 
     | 
| 
      
 16 
     | 
    
         
            +
                def siblings_and_self
         
     | 
| 
      
 17 
     | 
    
         
            +
                  parent.steps
         
     | 
| 
       15 
18 
     | 
    
         
             
                end
         
     | 
| 
       16 
19 
     | 
    
         | 
| 
       17 
20 
     | 
    
         
             
                def previous
         
     | 
| 
       18 
     | 
    
         
            -
                   
     | 
| 
      
 21 
     | 
    
         
            +
                  siblings_and_self.where(id: self.id - 1)
         
     | 
| 
       19 
22 
     | 
    
         
             
                end
         
     | 
| 
       20 
23 
     | 
    
         | 
| 
       21 
24 
     | 
    
         
             
                def next
         
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
      
 25 
     | 
    
         
            +
                  siblings_and_self.where(id: self.id + 1)
         
     | 
| 
       23 
26 
     | 
    
         
             
                end
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
       25 
28 
     | 
    
         
             
                def table?
         
     | 
| 
         @@ -56,6 +59,7 @@ module CucumberMonitor 
     | 
|
| 
       56 
59 
     | 
    
         
             
                    table_content.each do |th|
         
     | 
| 
       57 
60 
     | 
    
         
             
                      output << "    <th>#{th}</th>\n"
         
     | 
| 
       58 
61 
     | 
    
         
             
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
                    output << "    <th> </th>"
         
     | 
| 
       59 
63 
     | 
    
         
             
                    output << "  </tr>\n"
         
     | 
| 
       60 
64 
     | 
    
         
             
                    output << "</table>\n" if table_last_line?
         
     | 
| 
       61 
65 
     | 
    
         
             
                  elsif table_row?
         
     | 
| 
         @@ -63,6 +67,7 @@ module CucumberMonitor 
     | 
|
| 
       63 
67 
     | 
    
         
             
                    table_content.each do |td|
         
     | 
| 
       64 
68 
     | 
    
         
             
                      output << "    <td>#{td}</td>\n"
         
     | 
| 
       65 
69 
     | 
    
         
             
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
                    output << "    <td class='td_result'> </td>"
         
     | 
| 
       66 
71 
     | 
    
         
             
                    output << "  </tr>\n"
         
     | 
| 
       67 
72 
     | 
    
         
             
                    output << "</table>\n" if table_last_line?
         
     | 
| 
       68 
73 
     | 
    
         
             
                  else
         
     | 
    
        data/lib/cucumber_monitor.rb
    CHANGED
    
    
    
        data/test/base_test.rb
    ADDED
    
    | 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class BaseTest < ActiveSupport::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              test "should return all features" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                assert_equal 2, @cucumber.features.size
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                features = ['administration.feature','change_my_data.feature']
         
     | 
| 
      
 9 
     | 
    
         
            +
                assert_equal features, @cucumber.features.map(&:file)
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              test "should find features by searching" do
         
     | 
| 
      
 13 
     | 
    
         
            +
              	assert_equal 2, @cucumber.features.where(name: 'a').size
         
     | 
| 
      
 14 
     | 
    
         
            +
              	features = ['administration.feature','change_my_data.feature']
         
     | 
| 
      
 15 
     | 
    
         
            +
              	assert_equal features, @cucumber.features.where(name: 'a').map(&:file)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              	assert_equal 'administration.feature', @cucumber.features.where(name: 'admin').file
         
     | 
| 
      
 18 
     | 
    
         
            +
              	assert_equal 'change_my_data.feature', @cucumber.features.where(name: 'change').file
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              test 'should find all steps that matches with a given term' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                assert_equal 4, @cucumber.search("email").size
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                term = 'I should see'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                steps = [
         
     | 
| 
      
 27 
     | 
    
         
            +
                          'Then I should see "Invalid username/password"',
         
     | 
| 
      
 28 
     | 
    
         
            +
                          'Then I should see my personal information',
         
     | 
| 
      
 29 
     | 
    
         
            +
                          'Then I should see "Personal data successfully changed"',
         
     | 
| 
      
 30 
     | 
    
         
            +
                          'And I should see "Petter Summers"',
         
     | 
| 
      
 31 
     | 
    
         
            +
                          'I should see the following table:'
         
     | 
| 
      
 32 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                assert_equal steps, @cucumber.search(term).map(&:description)
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class ContextTest < ActiveSupport::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              test "context should return its steps" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                assert_equal 1, @feature_two.contexts.first.steps.size
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                step_1 = 'Given my name is Peter and I have an account in the system'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                assert_equal step_1, @feature_two.contexts.first.steps[0].description
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |