@@ -16,7 +16,10 @@ module VCAP::CloudController
16
16
describe 'after update' do
17
17
let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::PENDING_STATE ) }
18
18
19
- context 'when the task is moving to SUCCEEDED_STATE' do
19
+ context 'when the task is moving to the SUCCEEDED_STATE' do
20
+ let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::RUNNING_STATE ) }
21
+ let! ( :start_event ) { AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STARTED' ) }
22
+
20
23
it 'creates a TASK_STOPPED event' do
21
24
task . update ( state : TaskModel ::SUCCEEDED_STATE )
22
25
@@ -27,14 +30,73 @@ module VCAP::CloudController
27
30
end
28
31
end
29
32
30
- context 'when the task is moving to FAILED_STATE' do
31
- it 'creates a TASK_STOPPED event' do
32
- task . update ( state : TaskModel ::FAILED_STATE )
33
+ context 'when the task is moving to the FAILED_STATE' do
34
+ context 'when the task is moving from the RUNNING state' do
35
+ let! ( :start_event ) { AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STARTED' ) }
36
+ let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::RUNNING_STATE ) }
33
37
34
- event = AppUsageEvent . find ( task_guid : task . guid , state : 'TASK_STOPPED' )
35
- expect ( event ) . not_to be_nil
36
- expect ( event . task_guid ) . to eq ( task . guid )
37
- expect ( event . parent_app_guid ) . to eq ( task . app . guid )
38
+ it 'creates a TASK_STOPPED event' do
39
+ task . update ( state : TaskModel ::FAILED_STATE )
40
+
41
+ event = AppUsageEvent . find ( task_guid : task . guid , state : 'TASK_STOPPED' )
42
+ expect ( event ) . not_to be_nil
43
+ expect ( event . task_guid ) . to eq ( task . guid )
44
+ expect ( event . parent_app_guid ) . to eq ( task . app . guid )
45
+ end
46
+ end
47
+
48
+ context 'when the task is moving from the PENDING state' do
49
+ let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::PENDING_STATE ) }
50
+
51
+ it 'does not create a TASK_STOPPED event' do
52
+ task . update ( state : TaskModel ::FAILED_STATE )
53
+
54
+ event = AppUsageEvent . find ( task_guid : task . guid , state : 'TASK_STOPPED' )
55
+ expect ( event ) . to be_nil
56
+ end
57
+ end
58
+
59
+ context 'when the task is moving from the CANCELING state' do
60
+ let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::CANCELING_STATE ) }
61
+
62
+ context 'when the task has a TASK_STARTED event' do
63
+ let! ( :start_event ) { AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STARTED' ) }
64
+
65
+ it 'creates a TASK_STOPPED event' do
66
+ task . update ( state : TaskModel ::FAILED_STATE )
67
+
68
+ event = AppUsageEvent . find ( task_guid : task . guid , state : 'TASK_STOPPED' )
69
+ expect ( event ) . not_to be_nil
70
+ expect ( event . task_guid ) . to eq ( task . guid )
71
+ expect ( event . parent_app_guid ) . to eq ( task . app . guid )
72
+ end
73
+ end
74
+
75
+ context 'when the task does not have a TASK_STARTED event' do
76
+ let! ( :start_event ) { nil }
77
+
78
+ it 'does not create a TASK_STOPPED event' do
79
+ task . update ( state : TaskModel ::FAILED_STATE )
80
+
81
+ event = AppUsageEvent . find ( task_guid : task . guid , state : 'TASK_STOPPED' )
82
+ expect ( event ) . to be_nil
83
+ end
84
+ end
85
+ end
86
+
87
+ context 'when the task already has a TASK_STOPPED event' do
88
+ let! ( :start_event ) { AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STARTED' ) }
89
+
90
+ before do
91
+ AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STOPPED' )
92
+ end
93
+
94
+ it 'does not create additional TASK_STOPPED event' do
95
+ task . update ( state : TaskModel ::FAILED_STATE )
96
+
97
+ events = AppUsageEvent . where ( task_guid : task . guid , state : 'TASK_STOPPED' )
98
+ expect ( events . count ) . to equal ( 1 )
99
+ end
38
100
end
39
101
end
40
102
@@ -57,6 +119,7 @@ module VCAP::CloudController
57
119
end
58
120
59
121
context 'when the state is not changing' do
122
+ let! ( :start_event ) { AppUsageEvent . make ( task_guid : task . guid , state : 'TASK_STARTED' ) }
60
123
let ( :task ) { TaskModel . make ( app : parent_app , state : TaskModel ::FAILED_STATE ) }
61
124
62
125
it 'does not create a TASK_STOPPED event' do
0 commit comments