@@ -7,12 +7,20 @@ module Repositories
77 let ( :app ) { AppModel . make ( name : 'popsicle' ) }
88 let ( :user ) { User . make }
99 let ( :package ) { PackageModel . make ( app_guid : app . guid ) }
10- let ( :build ) { BuildModel . make ( app_guid : app . guid , package : package ) }
1110 let ( :email ) { 'user-email' }
1211 let ( :user_name ) { 'user-name' }
12+ let ( :build ) do
13+ BuildModel . make (
14+ app_guid : app . guid ,
15+ package : package ,
16+ created_by_user_guid : user . guid ,
17+ created_by_user_name : user_name ,
18+ created_by_user_email : email
19+ )
20+ end
1321 let ( :user_audit_info ) { UserAuditInfo . new ( user_email : email , user_name : user_name , user_guid : user . guid ) }
1422
15- describe '#record_create_by_staging ' do
23+ describe '#record_build_create ' do
1624 it 'creates a new audit.app.build.create event' do
1725 event = BuildEventRepository . record_build_create ( build , user_audit_info , app . name , package . space . guid , package . space . organization . guid )
1826 event . reload
@@ -32,6 +40,189 @@ module Repositories
3240 expect ( metadata [ 'package_guid' ] ) . to eq ( package . guid )
3341 end
3442 end
43+
44+ describe '#record_build_staged' do
45+ let ( :droplet ) { DropletModel . make ( app_guid : app . guid , package : package , build : build ) }
46+
47+ it 'creates a new audit.app.build.staged event' do
48+ event = BuildEventRepository . record_build_staged ( build , droplet )
49+ event . reload
50+
51+ expect ( event . type ) . to eq ( 'audit.app.build.staged' )
52+ expect ( event . actor ) . to eq ( user . guid )
53+ expect ( event . actor_type ) . to eq ( 'user' )
54+ expect ( event . actor_name ) . to eq ( email )
55+ expect ( event . actor_username ) . to eq ( user_name )
56+ expect ( event . actee ) . to eq ( app . guid )
57+ expect ( event . actee_type ) . to eq ( 'app' )
58+ expect ( event . actee_name ) . to eq ( 'popsicle' )
59+ expect ( event . space_guid ) . to eq ( app . space . guid )
60+ expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
61+
62+ metadata = event . metadata
63+ expect ( metadata [ 'build_guid' ] ) . to eq ( build . guid )
64+ expect ( metadata [ 'package_guid' ] ) . to eq ( package . guid )
65+ expect ( metadata [ 'droplet_guid' ] ) . to eq ( droplet . guid )
66+ expect ( metadata [ 'buildpacks' ] ) . to eq ( [ ] )
67+ end
68+
69+ context 'cnb lifecycle' do
70+ let ( :build ) do
71+ BuildModel . make ( :cnb ,
72+ app_guid : app . guid ,
73+ package : package ,
74+ created_by_user_guid : user . guid ,
75+ created_by_user_name : user_name ,
76+ created_by_user_email : email )
77+ end
78+ let ( :droplet ) { DropletModel . make ( :cnb , app_guid : app . guid , package : package , build : build ) }
79+
80+ it 'creates a new audit.app.build.staged event' do
81+ event = BuildEventRepository . record_build_staged ( build , droplet )
82+ event . reload
83+
84+ expect ( event . type ) . to eq ( 'audit.app.build.staged' )
85+ expect ( event . metadata [ 'buildpacks' ] ) . to eq ( [ ] )
86+ end
87+ end
88+
89+ context 'docker lifecycle' do
90+ let ( :build ) do
91+ BuildModel . make ( :docker ,
92+ app_guid : app . guid ,
93+ package : package ,
94+ created_by_user_guid : user . guid ,
95+ created_by_user_name : user_name ,
96+ created_by_user_email : email )
97+ end
98+ let ( :droplet ) { DropletModel . make ( :docker , app_guid : app . guid , package : package , build : build ) }
99+
100+ it 'creates a new audit.app.build.staged event' do
101+ event = BuildEventRepository . record_build_staged ( build , droplet )
102+ event . reload
103+
104+ expect ( event . type ) . to eq ( 'audit.app.build.staged' )
105+ expect ( event . metadata [ 'buildpacks' ] ) . to be_nil
106+ end
107+ end
108+
109+ context 'when the droplet has buildpack lifecycle data' do
110+ let! ( :admin_buildpack ) { Buildpack . make ( name : 'ruby_buildpack' ) }
111+ let ( :lifecycle_data ) { BuildpackLifecycleDataModel . make ( droplet :, build :) }
112+ let! ( :lifecycle_buildpack1 ) do
113+ BuildpackLifecycleBuildpackModel . make (
114+ buildpack_lifecycle_data : lifecycle_data ,
115+ admin_buildpack_name : 'ruby_buildpack' ,
116+ buildpack_name : 'ruby' ,
117+ version : '1.8.0'
118+ )
119+ end
120+ let! ( :lifecycle_buildpack2 ) do
121+ BuildpackLifecycleBuildpackModel . make (
122+ buildpack_lifecycle_data : lifecycle_data ,
123+ admin_buildpack_name : nil ,
124+ buildpack_url : 'https://user:password@github.com/custom/buildpack' ,
125+ buildpack_name : 'custom-bp' ,
126+ version : '2.0.0'
127+ )
128+ end
129+
130+ before do
131+ droplet . buildpack_lifecycle_data = lifecycle_data
132+ droplet . save
133+ end
134+
135+ it 'includes buildpack information in metadata' do
136+ event = BuildEventRepository . record_build_staged ( build , droplet )
137+ event . reload
138+
139+ buildpacks = event . metadata [ 'buildpacks' ]
140+ expect ( buildpacks ) . to have ( 2 ) . items
141+
142+ expect ( buildpacks [ 0 ] [ 'name' ] ) . to eq ( 'ruby_buildpack' )
143+ expect ( buildpacks [ 0 ] [ 'buildpack_name' ] ) . to eq ( 'ruby' )
144+ expect ( buildpacks [ 0 ] [ 'version' ] ) . to eq ( '1.8.0' )
145+
146+ expect ( buildpacks [ 1 ] [ 'name' ] ) . to eq ( 'https://***:***@github.com/custom/buildpack' )
147+ expect ( buildpacks [ 1 ] [ 'buildpack_name' ] ) . to eq ( 'custom-bp' )
148+ expect ( buildpacks [ 1 ] [ 'version' ] ) . to eq ( '2.0.0' )
149+ end
150+ end
151+
152+ context 'when the droplet has no lifecycle data' do
153+ it 'sets buildpacks to empty array in metadata' do
154+ event = BuildEventRepository . record_build_staged ( build , droplet )
155+ event . reload
156+
157+ expect ( event . metadata [ 'buildpacks' ] ) . to eq ( [ ] )
158+ end
159+ end
160+ end
161+
162+ describe '#record_build_failed' do
163+ let ( :error_id ) { 'StagingError' }
164+ let ( :error_message ) { 'Something went wrong during staging' }
165+
166+ context 'buildpack lifecycle' do
167+ it 'creates a new audit.app.build.failed event' do
168+ event = BuildEventRepository . record_build_failed ( build , error_id , error_message )
169+ event . reload
170+
171+ expect ( event . type ) . to eq ( 'audit.app.build.failed' )
172+ expect ( event . actor ) . to eq ( user . guid )
173+ expect ( event . actor_type ) . to eq ( 'user' )
174+ expect ( event . actor_name ) . to eq ( email )
175+ expect ( event . actor_username ) . to eq ( user_name )
176+ expect ( event . actee ) . to eq ( app . guid )
177+ expect ( event . actee_type ) . to eq ( 'app' )
178+ expect ( event . actee_name ) . to eq ( 'popsicle' )
179+ expect ( event . space_guid ) . to eq ( app . space . guid )
180+ expect ( event . organization_guid ) . to eq ( app . space . organization . guid )
181+
182+ metadata = event . metadata
183+ expect ( metadata [ 'build_guid' ] ) . to eq ( build . guid )
184+ expect ( metadata [ 'package_guid' ] ) . to eq ( package . guid )
185+ expect ( metadata [ 'error_id' ] ) . to eq ( error_id )
186+ expect ( metadata [ 'error_message' ] ) . to eq ( error_message )
187+ end
188+ end
189+
190+ context 'cnb lifecycle' do
191+ let ( :build ) do
192+ BuildModel . make ( :cnb ,
193+ app_guid : app . guid ,
194+ package : package ,
195+ created_by_user_guid : user . guid ,
196+ created_by_user_name : user_name ,
197+ created_by_user_email : email )
198+ end
199+
200+ it 'creates a new audit.app.build.failed event' do
201+ event = BuildEventRepository . record_build_failed ( build , error_id , error_message )
202+ event . reload
203+
204+ expect ( event . type ) . to eq ( 'audit.app.build.failed' )
205+ end
206+ end
207+
208+ context 'docker lifecycle' do
209+ let ( :build ) do
210+ BuildModel . make ( :docker ,
211+ app_guid : app . guid ,
212+ package : package ,
213+ created_by_user_guid : user . guid ,
214+ created_by_user_name : user_name ,
215+ created_by_user_email : email )
216+ end
217+
218+ it 'creates a new audit.app.build.failed event' do
219+ event = BuildEventRepository . record_build_failed ( build , error_id , error_message )
220+ event . reload
221+
222+ expect ( event . type ) . to eq ( 'audit.app.build.failed' )
223+ end
224+ end
225+ end
35226 end
36227 end
37228end
0 commit comments