sw2at-ui 0.0.10 → 0.0.11

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d70ed465d48ad8e70989d7dc71d2b47ce4b1ff99
4
- data.tar.gz: 197506183b02b210bbd43b8df65bbfa469db30d6
3
+ metadata.gz: c3612cda6f489c48a3170bd5bb707fe0ca831f8b
4
+ data.tar.gz: c6d5a8639b2c725d93fbe8f0978755f770587ca8
5
5
  SHA512:
6
- metadata.gz: bf630950313d8303faf6f0a27c31fa6426573e7df2c885865d46aee6e007f8d302ab9a5375a0d8d22906e408554c9706cb85acc7d277633d3bc43ffa351a5203
7
- data.tar.gz: bc26fd1324660dc3ee64db19592cc876dba67bcf2e93f34b5cf30efdad97b7193a99d19cc7d4d43e5a983aff509b6ef081651fe80befdea0fb342659aff0af7d
6
+ metadata.gz: bab12debf2d4514d6bc6a4637c23bfc34574c4626c43ea8dd9f50b15fe2beed7ce1fdc5deed111d724564ca3ee5e0a94816994fcc036beecd0588ffff94577c9
7
+ data.tar.gz: 2a5b81b6a3c0c541a4211bbef0ba6ef76cd74fc7bbe828837227722ace098219f0bb7ab836c60e44bae954bedfda50055a48fc503e3f16d184ae3f21ca48a68c
data/Gemfile CHANGED
@@ -2,12 +2,13 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '>= 3.1'
4
4
 
5
- gem 'fire-model', '~> 0.0.17'
5
+ gem 'fire-model', '~> 0.0.18'
6
6
  gem 'slim-rails'
7
7
  gem 'sass-rails'
8
8
  gem 'coffee-rails'
9
9
  gem 'bootstrap-sass'
10
10
  gem 'tarvit-helpers'
11
+ gem 'time_difference'
11
12
 
12
13
  group :development do
13
14
  gem 'shoulda', '>= 0'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
@@ -3,6 +3,7 @@
3
3
  #= require_tree ./services
4
4
  #= require_tree ./factories
5
5
  #= require_tree ./controllers
6
+ #= require_tree ./directives
6
7
 
7
8
  window.Swat =
8
9
  debug: true#false
@@ -4,6 +4,7 @@ angular.module("SWAT").controller "RevisionCtrl", ($rootScope, $scope, $state, $
4
4
  $scope.init = ->
5
5
  $scope.reloadData()
6
6
 
7
+
7
8
  $scope.reloadData = ->
8
9
  return if $scope.revisionPromise && !$scope.revisionPromise.$resolved
9
10
  params = { branch: $stateParams.branch, user: $stateParams.user, time: $stateParams.time }
@@ -7,4 +7,7 @@ angular.module("SWAT").controller "RevisionsCtrl", ($rootScope, $scope, $state,
7
7
  $scope.initRevisions = ->
8
8
  $scope.revisions = RevisionService.query()
9
9
 
10
+ $scope.testsProgress = (revision)->
11
+ _.sum(revision.threads, (t)->t )
12
+
10
13
  $scope.init()
@@ -40,8 +40,6 @@ angular.module("SWAT").controller "SummaryCtrl", ($rootScope, $scope, $state, $s
40
40
 
41
41
  $scope.initFailsStatsGraph = ->
42
42
  $scope.failsStats = new FailsGraph($scope.tests, $scope.summary.fails)
43
- return
44
- $scope.failsStats =1
45
43
 
46
44
  $scope.initMetrics = ->
47
45
  result = []
@@ -67,6 +65,9 @@ angular.module("SWAT").controller "SummaryCtrl", ($rootScope, $scope, $state, $s
67
65
 
68
66
  $scope.summary.metrics = result
69
67
 
68
+ $scope.isSpecTraceLine = (line)->
69
+ _.include(line, 'spec')
70
+
70
71
  $scope.init()
71
72
 
72
73
 
@@ -0,0 +1,27 @@
1
+ angular.module("SWAT").directive "revisionName", ($document, RevisionService)->
2
+ restrict: 'AE'
3
+ replace: true
4
+ templateUrl: '/swat/pages/revisions/name.html'
5
+ scope:
6
+ revision: '='
7
+
8
+ controller: ($scope, $attrs, $timeout)->
9
+ $scope.init = ->
10
+ $scope.id = ('revision-name-'+$scope.revision.data.time+Math.floor(Math.random()*1000))
11
+ $scope.name = ($scope.revision.data.name || $scope.revision.data.time)
12
+
13
+ $scope.delayedSave = ->
14
+ $timeout($scope.save, 0)
15
+
16
+ $scope.save = ->
17
+ value = angular.element('#'+$scope.id).text()
18
+ window.Swat.log(value)
19
+
20
+ return if value == $scope.name
21
+ params = { branch: $scope.revision.data.branch, user: $scope.revision.data.user, time: $scope.revision.data.time, name: value }
22
+ RevisionService.setName(params).$promise.then((resp)->
23
+ window.Swat.log(resp)
24
+ $scope.name = value
25
+ )
26
+
27
+ $scope.init()
@@ -1,6 +1,6 @@
1
- angular.module("SWAT").factory "RevisionService", ($resource, RevisionModelFactory) ->
1
+ angular.module("SWAT").factory "RevisionService", ($resource, GlResponse, RevisionModelFactory) ->
2
2
 
3
- $resource "/swat/api/revisions", { id: "@id", branch: '@branch', user: '@user', time: '@time' },
3
+ $resource "/swat/api/revisions", { id: "@id", branch: '@branch', user: '@user', time: '@time', name: '@name' },
4
4
  query:
5
5
  method: 'GET'
6
6
  isArray: true
@@ -11,6 +11,11 @@ angular.module("SWAT").factory "RevisionService", ($resource, RevisionModelFacto
11
11
  method: 'GET'
12
12
  transformResponse: RevisionModelFactory
13
13
 
14
+ setName:
15
+ url: '/swat/api/revision/name/:name'
16
+ method: 'PUT'
17
+ transformResponse: GlResponse
18
+
14
19
 
15
20
 
16
21
 
@@ -8,39 +8,12 @@ $greenMain: greenyellow;
8
8
 
9
9
  #swat {
10
10
  font-size: 13px;
11
- #header-label {
12
- margin-top: 0;
13
- padding: 12px;
14
- a {
15
- color: $greenMain;
16
- &:hover {
17
- text-decoration: none;
18
- }
19
- }
20
- .label {
21
- width: 100%;
22
- float: left;
23
- font-size: 12px;
24
- color: $greenMain;
25
- }
26
- &:hover .label {
27
- display: inline !important;
28
- }
29
- }
11
+
12
+
30
13
  h1, h2, h3 {
31
14
  text-align: center;
32
15
  }
33
- header {
34
- background-color: black;
35
- color: white;
36
- h2 {
37
- color: $greenMain;
38
- text-align: center;
39
- sub {
40
- font-size: 12px;
41
- }
42
- }
43
- }
16
+
44
17
  #subheader {
45
18
  h3 {
46
19
  margin: 5px;
@@ -0,0 +1,102 @@
1
+ #swat {
2
+ $greenMain: greenyellow;
3
+
4
+ header {
5
+ background-color: black;
6
+ color: white;
7
+ h2 {
8
+ color: $greenMain;
9
+ text-align: center;
10
+ margin: 6px 0px 0px 0px;
11
+ }
12
+ }
13
+
14
+ #header-label {
15
+ margin-top: 0;
16
+ padding: 12px;
17
+
18
+ a {
19
+ color: $greenMain;
20
+ &:hover {
21
+ text-decoration: none;
22
+ }
23
+ }
24
+
25
+ .header-label {
26
+ a {
27
+ display: inline-block;
28
+ }
29
+ .S, .W, .to, .A, .T {
30
+ overflow: hidden;
31
+ display: inline-block;
32
+ transition: width 0.1s linear;
33
+ }
34
+
35
+ .S {
36
+ width: 20px;
37
+ &:after {
38
+ content: 'S'
39
+ }
40
+ }
41
+ .W {
42
+ width: 29px;
43
+ &:after {
44
+ content: 'W'
45
+ }
46
+ }
47
+ .to {
48
+ width: 12px;
49
+ font-size: 14px;
50
+ margin-right: 3px;
51
+ &:after {
52
+ content: '2'
53
+ }
54
+ }
55
+ .A {
56
+ width: 20px;
57
+ &:after {
58
+ content: 'A'
59
+ }
60
+ }
61
+ .T {
62
+ width: 20px;
63
+ &:after {
64
+ content: 'T'
65
+ }
66
+ }
67
+ }
68
+ .header-label a:hover {
69
+ .S {
70
+ width: 100px;
71
+ &:after {
72
+ content: 'Simple'
73
+ }
74
+ }
75
+ .W {
76
+ width: 70px;
77
+ &:after {
78
+ content: 'Way'
79
+ }
80
+ }
81
+ .to {
82
+ width: 31px;
83
+ font-size: 30px;
84
+ &:after {
85
+ content: 'to'
86
+ }
87
+ }
88
+ .A {
89
+ width: 140px;
90
+ &:after {
91
+ content: 'Automate'
92
+ }
93
+ }
94
+ .T {
95
+ width: 83px;
96
+ &:after {
97
+ content: 'Tests'
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
@@ -13,20 +13,36 @@ html, body {
13
13
  #swat {
14
14
  height: 100%;
15
15
  min-height: 100%;
16
+
16
17
  #container {
17
18
 
18
19
  .has-status {
19
20
 
20
- &.in_progress_failed, &.completed_failed {
21
+ &.in_progress_failed {
22
+ color: rgb(242, 40, 77);
23
+ background: #F2FFBA;
24
+ }
25
+
26
+ &.in_progress_success {
27
+ color: rgb(59, 153, 78);
28
+ background: #F2FFBA;
29
+ }
30
+
31
+ &.completed_failed {
21
32
  color: rgb(242, 40, 77);
22
33
  background: rgba(252, 226, 222, 0.49);
23
34
  }
24
35
 
25
- &.in_progress_success, &.completed_passed {
36
+ &.completed_passed {
26
37
  color: rgb(59, 153, 78);
27
38
  background: rgba(134, 252, 148, 0.49);
28
39
  }
29
40
 
41
+ &.terminated {
42
+ color: rgba(78, 73, 71, 0.68);
43
+ background: rgba(205, 202, 201, 0.36);
44
+ }
45
+
30
46
  }
31
47
 
32
48
 
@@ -116,9 +132,10 @@ html, body {
116
132
  #exceptions-groups {
117
133
  .failed-tests {
118
134
  .test-case {
119
- color: rgb(68, 64, 64);
135
+ color: #3F3F3F;
120
136
  margin-top: 3px;
121
137
  }
138
+
122
139
  }
123
140
  }
124
141
 
@@ -127,6 +144,7 @@ html, body {
127
144
  margin: 0;
128
145
  padding-right: 50px;
129
146
  padding-top: 8px;
147
+ min-height: 45px;
130
148
  }
131
149
  .list {
132
150
  padding: 13px;
@@ -162,6 +180,9 @@ html, body {
162
180
  &.exception {
163
181
  width: 400px;
164
182
  }
183
+ &.thread {
184
+ width: 250px;
185
+ }
165
186
  }
166
187
  td {
167
188
  &:hover {}
@@ -181,7 +202,11 @@ html, body {
181
202
  border-radius: 3px;
182
203
  p {
183
204
  margin-bottom: 0;
205
+ &.spec {
206
+ color: #ff5860;
207
+ }
184
208
  }
209
+
185
210
  }
186
211
  }
187
212
  }
@@ -233,6 +258,12 @@ html, body {
233
258
  }
234
259
  }
235
260
  }
261
+
262
+ .revision-name-content {
263
+ width: auto;
264
+ display: inline-block;
265
+ }
266
+
236
267
  }
237
268
  .push {
238
269
  height: $footerSize;
@@ -1,7 +1,7 @@
1
1
  module Swat
2
2
  module Api
3
3
  class RevisionsController < Swat::ApplicationController
4
- before_filter :parse_revision_options, only: :show
4
+ before_filter :parse_revision_options, only: [ :show, :set_name ]
5
5
 
6
6
 
7
7
  def index
@@ -12,6 +12,12 @@ module Swat
12
12
  render json: FullRevision.revision_json(@options)
13
13
  end
14
14
 
15
+ def set_name
16
+ revision = Revision.take(@options)
17
+ revision.update_field(:name, params[:name])
18
+ render json: { success: true }
19
+ end
20
+
15
21
  private
16
22
 
17
23
  def revisions
@@ -20,6 +26,7 @@ module Swat
20
26
 
21
27
  def parse_revision_options
22
28
  @options = params[:json_params] ? HashWithIndifferentAccess[JSON.parse(params[:json_params])] : params
29
+ @options[:time] = @options[:time].to_i if @options[:time]
23
30
  end
24
31
 
25
32
  end
@@ -68,7 +68,7 @@ class FullRevision
68
68
  if update
69
69
  update_status!(revision)
70
70
  else
71
- RevisionStatusCalulator.new.set_status(revision)
71
+ RevisionStatusCalulator.new(revision).set_status
72
72
  end
73
73
  end
74
74
 
@@ -77,7 +77,7 @@ class FullRevision
77
77
 
78
78
  return if current_status[:completed]
79
79
 
80
- new_status = RevisionStatusCalulator.new.set_status(revision)
80
+ new_status = RevisionStatusCalulator.new(revision).set_status
81
81
  return if new_status[:passed] && current_status[:failed]
82
82
 
83
83
  revision.save
@@ -1,6 +1,12 @@
1
1
  class RevisionStatusCalulator
2
2
 
3
- def set_thread_statuses(revision_root)
3
+ attr_reader :revision_root
4
+
5
+ def initialize(revision_root)
6
+ @revision_root = revision_root
7
+ end
8
+
9
+ def set_thread_statuses
4
10
  threads = revision_root.nested_threads
5
11
  (0..(revision_root.threads_count-1)).map do |index|
6
12
  thread = threads.find{|t| t.thread_id == index }
@@ -8,14 +14,21 @@ class RevisionStatusCalulator
8
14
  end
9
15
  end
10
16
 
11
- def set_status(revision_root)
12
- thread_statuses = set_thread_statuses(revision_root)
17
+ def set_status
18
+ thread_statuses = set_thread_statuses
13
19
  threads_completed = thread_statuses.all?{|ts| ts[:completed] }
14
20
 
15
21
  completed = (thread_statuses.count == revision_root.threads_count && threads_completed )
16
22
  failed = thread_statuses.any?{|ts| ts[:failed] }
17
23
 
18
- revision_root.nested_status.set(status(failed, completed))
24
+ revision_root.nested_status.set(status(failed, completed, old_build?))
25
+ end
26
+
27
+ TERMINATION_TIME = 2 # days
28
+
29
+ def old_build?
30
+ diff = TimeDifference.between(Time.now.utc, Time.at(revision_root.time)).in_hours
31
+ diff >= TERMINATION_TIME
19
32
  end
20
33
 
21
34
  private
@@ -47,7 +60,8 @@ class RevisionStatusCalulator
47
60
  end
48
61
 
49
62
  def init_total_failed(thread)
50
- failed_tests = (thread.tests||[]).select{|x|x.status == 'failed'}.count
63
+ tests = thread.tests || []
64
+ failed_tests = tests.select{|x|x.status == 'failed'}.count
51
65
  unless thread.failed_examples
52
66
  if (thread.tests||[]).count == thread.total_examples
53
67
  thread.failed_examples = thread.total_failed = failed_tests
@@ -87,14 +101,25 @@ class RevisionStatusCalulator
87
101
  completed: true,
88
102
  failed: false,
89
103
  },
104
+ terminated: {
105
+ name: 'terminated',
106
+ label: 'Terminated',
107
+ completed: true,
108
+ failed: true,
109
+ }
90
110
  }
91
111
 
92
- def status(failed, completed)
112
+ def status(failed, completed, old_build=false)
93
113
  id = if completed
94
114
  failed ? :completed_failed : :completed_passed
95
115
  else
96
116
  failed ? :in_progress_failed : :in_progress_success
97
117
  end
98
- STATUSES[id]
118
+ status_candidate = STATUSES[id]
119
+
120
+ return STATUSES[:terminated] if (old_build && !status_candidate[:completed])
121
+
122
+ status_candidate
99
123
  end
124
+
100
125
  end
@@ -2,7 +2,7 @@
2
2
  span.loader ng-class="{ true: 'invisible' }[(revisions && revisions.$resolved)]"
3
3
  h2.revisions-header Revisions
4
4
  .controls
5
- .list ng-if="revisions"
5
+ .list ng-if="revisions && (revisions.length > 0)"
6
6
  table.revisions-table.table.table-bordered.table-hover
7
7
  tr
8
8
  th Name
@@ -0,0 +1,3 @@
1
+ span.revision-name
2
+ .revision-name-content id="{{ id }}" contenteditable="" ng-blur="save()"
3
+ | {{ name }}
@@ -5,6 +5,10 @@
5
5
  th.exception Exception
6
6
  th Tests
7
7
  th.duration Count
8
+ tr ng-if="(summary.exceptions && summary.exceptions.length == 0)"
9
+ td colspan="4"
10
+ .cell
11
+ | No Exceptions
8
12
  tr.failed ng-repeat="exception in summary.exceptions"
9
13
  td title="{{ exception.message }}"
10
14
  .cell
@@ -17,7 +21,7 @@
17
21
  .main-info data-toggle="collapse" data-target="##{test_id}"
18
22
  .test-case
19
23
  strong
20
- | {{ test.full_description }}
24
+ | {{ '#' + test.full_description }}
21
25
  p
22
26
  | {{ 'rspec '+test.location }}
23
27
  .detailed-info.collapse id="#{test_id}"
@@ -25,7 +29,7 @@
25
29
  strong
26
30
  | {{ test.exception.message }}
27
31
  .backtrace
28
- p.trace-line ng-repeat="line in test.exception.backtrace track by $index"
32
+ p.trace-line class="{{ isSpecTraceLine(line) ? 'spec' : '' }}" ng-repeat="line in test.exception.backtrace track by $index"
29
33
  | {{ line }}
30
34
 
31
35
  th.count
@@ -2,11 +2,15 @@ table#test-cases.table.table-bordered.table-hover
2
2
  tr
3
3
  th Test
4
4
  - if thread
5
- th Thread
5
+ th.thread Thread
6
6
  th.duration Duration
7
7
  th.status Status
8
8
  th.command Location
9
9
  - test_id = '{{ "full_"+test.id }}'
10
+ tr ng-if="(#{object} && #{object}.length == 0)"
11
+ td colspan="#{ thread ? 5 : 4 }"
12
+ .cell
13
+ | No Failed Examples
10
14
  tr ng-class="test.status" ng-repeat="test in #{ object }"
11
15
  td title="{{ test.full_description }}"
12
16
  .main-info.cell data-toggle="collapse" data-target="##{test_id}"
@@ -21,7 +25,7 @@ table#test-cases.table.table-bordered.table-hover
21
25
  p.trace-line ng-repeat="line in test.exception.backtrace track by $index"
22
26
  | {{ line }}
23
27
  - if thread
24
- td.thread
28
+ td.thread title="{{ test.thread_name }}"
25
29
  span.cell
26
30
  | {{ test.thread_name }}
27
31
  td.duration
@@ -1,14 +1,14 @@
1
1
  #revision-info
2
2
  h1.revision
3
- span.revision-name
4
- | {{ revision.data.name || revision.data.time }}
3
+ revision-name revision="revision" ng-if="(revisionPromise && revisionPromise.$resolved)"
4
+
5
5
  span.revision-status ng-class="revision.data.status.name"
6
6
  | {{ ' '+revision.data.status.label }}
7
7
  span.loader ng-class="{ true: 'invisible' }[(revisionPromise && revisionPromise.$resolved)]"
8
8
  .controls
9
9
  button.btn.revisions ui-sref="revisions" title="See all revisions list"
10
10
  | Go to Revisions
11
- button.btn.revisions ui-sref="summary(revision.data)" title="See this revision summary"
11
+ button.btn.revisions ui-sref="summary(revision.data)" title="See this revision summary" ng-disabled="!revision"
12
12
  | Summary
13
13
  button.btn.reload ng-click="reloadData()" title="Refresh this revision"
14
14
  | Refresh
@@ -1,14 +1,14 @@
1
1
  #revision-info
2
2
  h1.revision
3
- span.revision-name
4
- | {{ revision.data.name || revision.data.time }}
3
+ revision-name revision="revision" ng-if="(revisionPromise && revisionPromise.$resolved)"
4
+
5
5
  span.revision-status ng-class="revision.data.status.name"
6
6
  | {{ ' '+revision.data.status.label }}
7
7
  span.loader ng-class="{ true: 'invisible' }[(revisionPromise && revisionPromise.$resolved)]"
8
8
  .controls
9
9
  button.btn.revisions ui-sref="revisions" title="See all revisions list"
10
10
  | Go to Revisions
11
- button.btn.revisions ui-sref="revision(revision.data)" title="See this revision tests"
11
+ button.btn.revisions ui-sref="revision(revision.data)" title="See this revision tests" ng-disabled="!revision"
12
12
  | Tests
13
13
  button.btn.reload ng-click="reloadData()" title="Refresh this revision"
14
14
  | Refresh
@@ -1,9 +1,8 @@
1
1
  #header-label
2
2
  h2.header-label
3
3
  a href="/swat"
4
- | SW
5
- sub
6
- | 2
7
- | AT
8
- span.label style="display:none;"
9
- | Simple Way to Automate Tests
4
+ .S
5
+ .W
6
+ .to
7
+ .A
8
+ .T
data/config/routes.rb CHANGED
@@ -8,6 +8,7 @@ Swat::Engine.routes.draw do
8
8
  resources :test_cases
9
9
  resources :revisions
10
10
  get 'revision', to: 'revisions#show'
11
+ put 'revision/name/:name', to: 'revisions#set_name'
11
12
  end
12
13
 
13
14
  # Helper Methods
@@ -28,7 +29,7 @@ Swat::Engine.routes.draw do
28
29
  # Angular Pages
29
30
  namespace :pages do
30
31
  namespace :revisions do
31
- pages = [ :index, :show, :summary ]
32
+ pages = [ :index, :show, :summary, :name ]
32
33
  pages.each do |p|
33
34
  get p, to: p
34
35
  end
data/lib/swat/engine.rb CHANGED
@@ -4,7 +4,8 @@ module Swat
4
4
  require 'coffee-rails'
5
5
  require 'bootstrap-sass'
6
6
 
7
- gem 'tarvit-helpers'
7
+ require 'time_difference'
8
+ require 'tarvit-helpers'
8
9
 
9
10
  class Engine < ::Rails::Engine
10
11
  isolate_namespace Swat
@@ -59,7 +59,7 @@ module Swat
59
59
 
60
60
  class << self
61
61
  def current_revision_time
62
- env[ENV_VARS.revision_time] ? env[ENV_VARS.revision_time].to_i : now.to_i
62
+ env[ENV_VARS.revision_time] ? env[ENV_VARS.revision_time].to_i : now.utc.to_i
63
63
  end
64
64
 
65
65
  def current_threads_count
@@ -4,10 +4,49 @@ describe FullRevision do
4
4
 
5
5
  context 'Calculations' do
6
6
 
7
- context 'Statuses' do
7
+ before :each do
8
+ Fire.reset_tree!(FIREBASE_DATA)
9
+ end
10
+
11
+ context 'Terminated Status' do
12
+ before :each do
13
+ allow_any_instance_of(RevisionStatusCalulator).to receive(:old_build?).and_return(true)
14
+ end
15
+
16
+ it 'should calculate basic status (in_progress_failed)' do
17
+ rev = Revision::Root.all.first
18
+
19
+ t1 = rev.nested_threads.first
20
+ t1.failed_examples = 5
21
+ t1.save
22
+
23
+ t2 = rev.nested_threads.last
24
+ t2.failed_examples = nil
25
+ t2.save
26
+
27
+ rev = Revision::Root.all.first
28
+
29
+ ts = RevisionStatusCalulator.new(rev).set_thread_statuses
30
+ expect(ts).to eq(
31
+ [{:name=>"completed_failed",
32
+ :label=>"Failed",
33
+ :completed=>true,
34
+ :failed=>true},
35
+ {:name=>"in_progress_success",
36
+ :label=>"In Progress",
37
+ :completed=>false,
38
+ :failed=>false}]
39
+ )
40
+ status = RevisionStatusCalulator.new(rev).set_status
41
+ expect(status).to include({name: "terminated", label: "Terminated", completed: true, failed: true})
42
+ end
43
+
44
+ end
45
+
46
+ context 'Statuses(without terminated)' do
8
47
 
9
48
  before :each do
10
- Fire.reset_tree!(FIREBASE_DATA)
49
+ allow_any_instance_of(RevisionStatusCalulator).to receive(:old_build?).and_return(false)
11
50
  end
12
51
 
13
52
  it 'should set basic statuses' do
@@ -25,7 +64,7 @@ describe FullRevision do
25
64
  it 'should calculate basic status (completed_passed)' do
26
65
  rev = Revision::Root.all.first
27
66
 
28
- ts = RevisionStatusCalulator.new.set_thread_statuses(rev)
67
+ ts = RevisionStatusCalulator.new(rev).set_thread_statuses
29
68
  expect(ts).to eq(
30
69
  [{:name=>"completed_passed",
31
70
  :label=>"Passed",
@@ -37,7 +76,7 @@ describe FullRevision do
37
76
  :failed=>false}]
38
77
  )
39
78
 
40
- status = RevisionStatusCalulator.new.set_status(rev)
79
+ status = RevisionStatusCalulator.new(rev).set_status
41
80
  expect(status).to include({name: "completed_passed", label: "Passed", completed: true, failed: false})
42
81
  end
43
82
 
@@ -50,7 +89,7 @@ describe FullRevision do
50
89
 
51
90
  rev = Revision::Root.all.first
52
91
 
53
- ts = RevisionStatusCalulator.new.set_thread_statuses(rev)
92
+ ts = RevisionStatusCalulator.new(rev).set_thread_statuses
54
93
  expect(ts).to eq(
55
94
  [{:name=>"completed_failed",
56
95
  :label=>"Failed",
@@ -62,7 +101,7 @@ describe FullRevision do
62
101
  :failed=>false}]
63
102
  )
64
103
 
65
- status = RevisionStatusCalulator.new.set_status(rev)
104
+ status = RevisionStatusCalulator.new(rev).set_status
66
105
  expect(status).to include({name: "completed_failed", label: "Failed", completed: true, failed: true})
67
106
  end
68
107
 
@@ -79,7 +118,7 @@ describe FullRevision do
79
118
 
80
119
  rev = Revision::Root.all.first
81
120
 
82
- ts = RevisionStatusCalulator.new.set_thread_statuses(rev)
121
+ ts = RevisionStatusCalulator.new(rev).set_thread_statuses
83
122
  expect(ts).to eq(
84
123
  [{:name=>"completed_failed",
85
124
  :label=>"Failed",
@@ -90,7 +129,7 @@ describe FullRevision do
90
129
  :completed=>false,
91
130
  :failed=>false}]
92
131
  )
93
- status = RevisionStatusCalulator.new.set_status(rev)
132
+ status = RevisionStatusCalulator.new(rev).set_status
94
133
  expect(status).to include({name: "in_progress_failed", label: "In Progress", completed: false, failed: true})
95
134
  end
96
135
 
@@ -103,7 +142,7 @@ describe FullRevision do
103
142
 
104
143
  rev = Revision::Root.all.first
105
144
 
106
- ts = RevisionStatusCalulator.new.set_thread_statuses(rev)
145
+ ts = RevisionStatusCalulator.new(rev).set_thread_statuses
107
146
  expect(ts).to eq(
108
147
  [{:name=>"completed_passed",
109
148
  :label=>"Passed",
@@ -119,7 +158,7 @@ describe FullRevision do
119
158
  :failed=>false}
120
159
  ]
121
160
  )
122
- status = RevisionStatusCalulator.new.set_status(rev)
161
+ status = RevisionStatusCalulator.new(rev).set_status
123
162
  expect(status).to include({name: "in_progress_success", label: "In Progress", completed: false, failed: false})
124
163
  end
125
164
 
@@ -6,6 +6,7 @@ describe FullRevision do
6
6
 
7
7
  before :each do
8
8
  Fire.reset_tree!(FIREBASE_DATA)
9
+ allow_any_instance_of(RevisionStatusCalulator).to receive(:old_build?).and_return(false)
9
10
  end
10
11
 
11
12
  it 'should fetch revisions' do
data/sw2at-ui.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: sw2at-ui 0.0.10 ruby lib
5
+ # stub: sw2at-ui 0.0.11 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "sw2at-ui"
9
- s.version = "0.0.10"
9
+ s.version = "0.0.11"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "app/assets/javascripts/swat/app/controllers/revisions.coffee",
34
34
  "app/assets/javascripts/swat/app/controllers/root.coffee",
35
35
  "app/assets/javascripts/swat/app/controllers/summary.coffee",
36
+ "app/assets/javascripts/swat/app/directives/revision_name.coffee",
36
37
  "app/assets/javascripts/swat/app/factories/fails_graph.coffee",
37
38
  "app/assets/javascripts/swat/app/factories/helpers.coffee",
38
39
  "app/assets/javascripts/swat/app/factories/response.coffee",
@@ -369,6 +370,7 @@ Gem::Specification.new do |s|
369
370
  "app/assets/stylesheets/swat/fonts/fontawesome-webfont.ttf",
370
371
  "app/assets/stylesheets/swat/fonts/fontawesome-webfont.woff",
371
372
  "app/assets/stylesheets/swat/fonts/fontawesome-webfont.woff2",
373
+ "app/assets/stylesheets/swat/header.scss",
372
374
  "app/assets/stylesheets/swat/swat_theme.scss",
373
375
  "app/controllers/swat/api/revisions_controller.rb",
374
376
  "app/controllers/swat/api/test_cases_controller.rb",
@@ -387,6 +389,7 @@ Gem::Specification.new do |s|
387
389
  "app/views/layouts/swat/page.slim",
388
390
  "app/views/swat/application/index.slim",
389
391
  "app/views/swat/pages/revisions/index.slim",
392
+ "app/views/swat/pages/revisions/name.slim",
390
393
  "app/views/swat/pages/revisions/partials/_exceptions.slim",
391
394
  "app/views/swat/pages/revisions/partials/_test_cases.slim",
392
395
  "app/views/swat/pages/revisions/show.slim",
@@ -427,12 +430,13 @@ Gem::Specification.new do |s|
427
430
 
428
431
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
429
432
  s.add_runtime_dependency(%q<rails>, [">= 3.1"])
430
- s.add_runtime_dependency(%q<fire-model>, ["~> 0.0.17"])
433
+ s.add_runtime_dependency(%q<fire-model>, ["~> 0.0.18"])
431
434
  s.add_runtime_dependency(%q<slim-rails>, [">= 0"])
432
435
  s.add_runtime_dependency(%q<sass-rails>, [">= 0"])
433
436
  s.add_runtime_dependency(%q<coffee-rails>, [">= 0"])
434
437
  s.add_runtime_dependency(%q<bootstrap-sass>, [">= 0"])
435
438
  s.add_runtime_dependency(%q<tarvit-helpers>, [">= 0"])
439
+ s.add_runtime_dependency(%q<time_difference>, [">= 0"])
436
440
  s.add_development_dependency(%q<shoulda>, [">= 0"])
437
441
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
438
442
  s.add_development_dependency(%q<rspec>, ["~> 3.2"])
@@ -442,12 +446,13 @@ Gem::Specification.new do |s|
442
446
  s.add_development_dependency(%q<simplecov>, [">= 0"])
443
447
  else
444
448
  s.add_dependency(%q<rails>, [">= 3.1"])
445
- s.add_dependency(%q<fire-model>, ["~> 0.0.17"])
449
+ s.add_dependency(%q<fire-model>, ["~> 0.0.18"])
446
450
  s.add_dependency(%q<slim-rails>, [">= 0"])
447
451
  s.add_dependency(%q<sass-rails>, [">= 0"])
448
452
  s.add_dependency(%q<coffee-rails>, [">= 0"])
449
453
  s.add_dependency(%q<bootstrap-sass>, [">= 0"])
450
454
  s.add_dependency(%q<tarvit-helpers>, [">= 0"])
455
+ s.add_dependency(%q<time_difference>, [">= 0"])
451
456
  s.add_dependency(%q<shoulda>, [">= 0"])
452
457
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
453
458
  s.add_dependency(%q<rspec>, ["~> 3.2"])
@@ -458,12 +463,13 @@ Gem::Specification.new do |s|
458
463
  end
459
464
  else
460
465
  s.add_dependency(%q<rails>, [">= 3.1"])
461
- s.add_dependency(%q<fire-model>, ["~> 0.0.17"])
466
+ s.add_dependency(%q<fire-model>, ["~> 0.0.18"])
462
467
  s.add_dependency(%q<slim-rails>, [">= 0"])
463
468
  s.add_dependency(%q<sass-rails>, [">= 0"])
464
469
  s.add_dependency(%q<coffee-rails>, [">= 0"])
465
470
  s.add_dependency(%q<bootstrap-sass>, [">= 0"])
466
471
  s.add_dependency(%q<tarvit-helpers>, [">= 0"])
472
+ s.add_dependency(%q<time_difference>, [">= 0"])
467
473
  s.add_dependency(%q<shoulda>, [">= 0"])
468
474
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
469
475
  s.add_dependency(%q<rspec>, ["~> 3.2"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sw2at-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitaly Tarasenko
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.17
33
+ version: 0.0.18
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.17
40
+ version: 0.0.18
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: slim-rails
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: time_difference
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: shoulda
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -229,6 +243,7 @@ files:
229
243
  - app/assets/javascripts/swat/app/controllers/revisions.coffee
230
244
  - app/assets/javascripts/swat/app/controllers/root.coffee
231
245
  - app/assets/javascripts/swat/app/controllers/summary.coffee
246
+ - app/assets/javascripts/swat/app/directives/revision_name.coffee
232
247
  - app/assets/javascripts/swat/app/factories/fails_graph.coffee
233
248
  - app/assets/javascripts/swat/app/factories/helpers.coffee
234
249
  - app/assets/javascripts/swat/app/factories/response.coffee
@@ -565,6 +580,7 @@ files:
565
580
  - app/assets/stylesheets/swat/fonts/fontawesome-webfont.ttf
566
581
  - app/assets/stylesheets/swat/fonts/fontawesome-webfont.woff
567
582
  - app/assets/stylesheets/swat/fonts/fontawesome-webfont.woff2
583
+ - app/assets/stylesheets/swat/header.scss
568
584
  - app/assets/stylesheets/swat/swat_theme.scss
569
585
  - app/controllers/swat/api/revisions_controller.rb
570
586
  - app/controllers/swat/api/test_cases_controller.rb
@@ -583,6 +599,7 @@ files:
583
599
  - app/views/layouts/swat/page.slim
584
600
  - app/views/swat/application/index.slim
585
601
  - app/views/swat/pages/revisions/index.slim
602
+ - app/views/swat/pages/revisions/name.slim
586
603
  - app/views/swat/pages/revisions/partials/_exceptions.slim
587
604
  - app/views/swat/pages/revisions/partials/_test_cases.slim
588
605
  - app/views/swat/pages/revisions/show.slim