55module VCAP ::CloudController
66 RSpec . describe StackCreate do
77 describe 'create' do
8+ let ( :user ) { User . make }
9+ let ( :user_email ) { '[email protected] ' } 10+ let ( :user_audit_info ) { UserAuditInfo . new ( user_guid : user . guid , user_email : user_email ) }
11+
12+ subject ( :stack_create ) { StackCreate . new ( user_audit_info ) }
13+
814 it 'creates a stack' do
915 message = VCAP ::CloudController ::StackCreateMessage . new (
1016 name : 'the-name' ,
@@ -20,7 +26,7 @@ module VCAP::CloudController
2026 }
2127 }
2228 )
23- stack = StackCreate . new . create ( message )
29+ stack = stack_create . create ( message )
2430
2531 expect ( stack . name ) . to eq ( 'the-name' )
2632 expect ( stack . description ) . to eq ( 'the-description' )
@@ -35,6 +41,31 @@ module VCAP::CloudController
3541 )
3642 end
3743
44+ it 'creates an audit event' do
45+ message = VCAP ::CloudController ::StackCreateMessage . new (
46+ name : 'my-stack' ,
47+ description : 'my-description'
48+ )
49+ created_stack = stack_create . create ( message )
50+
51+ expect ( VCAP ::CloudController ::Event . count ) . to eq ( 1 )
52+ stack_create_event = VCAP ::CloudController ::Event . find ( type : 'audit.stack.create' )
53+ expect ( stack_create_event ) . to exist
54+ expect ( stack_create_event . values ) . to include (
55+ type : 'audit.stack.create' ,
56+ actor : user_audit_info . user_guid ,
57+ actor_type : 'user' ,
58+ actor_name : user_audit_info . user_email ,
59+ actee : created_stack . guid ,
60+ actee_type : 'stack' ,
61+ actee_name : 'my-stack' ,
62+ space_guid : '' ,
63+ organization_guid : ''
64+ )
65+ expect ( stack_create_event . metadata ) . to eq ( { 'request' => message . audit_hash } )
66+ expect ( stack_create_event . timestamp ) . to be
67+ end
68+
3869 context 'when a model validation fails' do
3970 it 'raises an error' do
4071 errors = Sequel ::Model ::Errors . new
@@ -44,7 +75,7 @@ module VCAP::CloudController
4475
4576 message = VCAP ::CloudController ::StackCreateMessage . new ( name : 'foobar' )
4677 expect do
47- StackCreate . new . create ( message )
78+ stack_create . create ( message )
4879 end . to raise_error ( StackCreate ::Error , 'blork is busted' )
4980 end
5081 end
@@ -59,7 +90,7 @@ module VCAP::CloudController
5990 it 'raises a human-friendly error' do
6091 message = VCAP ::CloudController ::StackCreateMessage . new ( name :)
6192 expect do
62- StackCreate . new . create ( message )
93+ stack_create . create ( message )
6394 end . to raise_error ( StackCreate ::Error , 'Name must be unique' )
6495 end
6596 end
@@ -71,15 +102,15 @@ module VCAP::CloudController
71102 message = VCAP ::CloudController ::StackCreateMessage . new ( name :)
72103 # First request, should succeed
73104 expect do
74- StackCreate . new . create ( message )
105+ stack_create . create ( message )
75106 end . not_to raise_error
76107
77108 # Mock the validation for the second request to simulate the race condition and trigger a unique constraint violation
78109 allow_any_instance_of ( Stack ) . to receive ( :validate ) . and_return ( true )
79110
80111 # Second request, should fail with correct error
81112 expect do
82- StackCreate . new . create ( message )
113+ stack_create . create ( message )
83114 end . to raise_error ( StackCreate ::Error , 'Name must be unique' )
84115 end
85116 end
0 commit comments