Skip to content

Commit 590b663

Browse files
ShahzaibAwanAndriiMysko
authored andcommitted
[BSFY-181]Add env vars changes to chnagelog for admin
1 parent 85cbe96 commit 590b663

File tree

9 files changed

+65
-12
lines changed

9 files changed

+65
-12
lines changed

lib/travis/api/v3/models/env_vars.rb

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,25 @@
22

33
module Travis::API::V3
44
class Models::EnvVars < Travis::Settings::Collection
5-
include Models::JsonSync
5+
include Models::JsonSync, ActiveSupport::Callbacks
6+
extend ActiveSupport::Concern
67
model Models::EnvVar
8+
define_callbacks :after_save
79

10+
set_callback :after_save, :after, :save_audit
11+
12+
attr_accessor :user, :change_source
813
# See Models::JsonSync
914
def to_h
1015
{ 'env_vars' => map(&:to_h).map(&:stringify_keys) }
1116
end
1217

1318
def create(attributes)
14-
super(attributes).tap { sync! }
19+
@changes = { :"env_vars" => { created: "#{attributes}" } }
20+
env_var = super(attributes).tap { sync! }
21+
run_callbacks :after_save
22+
@changes = {}
23+
env_var
1524
end
1625

1726
def add(env_var)
@@ -20,11 +29,28 @@ def add(env_var)
2029
end
2130

2231
def destroy(id)
23-
super(id).tap { sync! }
32+
env_var = find(id)
33+
@changes = { :"env_vars" => { deleted: "#{env_var.attributes}" } }
34+
deleted_env_var = super(id).tap { sync! }
35+
run_callbacks :after_save
36+
@changes = {}
37+
deleted_env_var
2438
end
2539

2640
def repository
2741
@repository ||= Models::Repository.find(additional_attributes[:repository_id])
2842
end
43+
44+
def changes
45+
@changes
46+
end
47+
48+
private
49+
50+
def save_audit
51+
if self.change_source
52+
Travis::API::V3::Models::Audit.create!(owner: self.user, change_source: self.change_source, source: self.repository, source_changes: { settings: self.changes })
53+
end
54+
end
2955
end
3056
end

lib/travis/api/v3/queries/env_var.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@ def find(repository)
66
repository.env_vars.find(id)
77
end
88

9-
def update(env_var)
9+
def update(env_var, from_admin)
10+
env_vars = env_var.repository.env_vars
11+
env_vars.user = env_var.repository.user_settings.user
12+
env_vars.change_source = 'travis-api' unless from_admin
1013
env_var.update(env_var_params)
11-
env_var.repository.env_vars.add(env_var)
14+
env_vars.add(env_var)
1215
env_var
1316
end
1417

15-
def delete(repository)
16-
repository.env_vars.destroy(id)
18+
def delete(repository, from_admin)
19+
env_vars = repository.env_vars
20+
env_vars.user = repository.user_settings.user
21+
env_vars.change_source = 'travis-api' unless from_admin
22+
env_vars.destroy(id)
1723
end
1824
end
1925
end

lib/travis/api/v3/queries/env_vars.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ def find(repository)
66
repository.env_vars
77
end
88

9-
def create(repository)
10-
env_var = repository.env_vars.create(env_var_params)
9+
def create(repository, from_admin)
10+
env_vars = repository.env_vars
11+
env_vars.user = repository.user_settings.user
12+
env_vars.change_source = 'travis-api' unless from_admin
13+
env_var = env_vars.create(env_var_params)
1114
unless env_var.valid?
1215
repository.env_vars.destroy(env_var.id)
1316
handle_errors(env_var)

lib/travis/api/v3/services/env_var/delete.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ def run!
88

99
env_var = find(:env_var, repository)
1010
access_control.permissions(env_var).write!
11-
query.delete(repository) and deleted
11+
app_id = Travis::Api::App::AccessToken.find_by_token(access_control.token).app_id
12+
13+
query.delete(repository, app_id == 2) and deleted
1214
end
1315
end
1416
end

lib/travis/api/v3/services/env_var/update.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ def run!
88

99
env_var = find(:env_var, repository)
1010
access_control.permissions(env_var).write!
11-
result query.update(env_var)
11+
app_id = Travis::Api::App::AccessToken.find_by_token(access_control.token).app_id
12+
13+
result query.update(env_var, app_id == 2)
1214
end
1315
end
1416
end

lib/travis/api/v3/services/env_vars/create.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ def run!
77
repository = check_login_and_find(:repository)
88
access_control.permissions(repository).create_env_var!
99
return repo_migrated if migrated?(repository)
10+
app_id = Travis::Api::App::AccessToken.find_by_token(access_control.token).app_id
1011

11-
env_var = query(:env_vars).create(repository)
12+
env_var = query(:env_vars).create(repository, app_id == 2)
1213
result(env_var, status: 201)
1314
end
1415
end

spec/v3/services/env_var/delete_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565
example 'does not clobber other settings' do
6666
expect(repo.reload.settings['foo']).to eq 'bar'
6767
end
68+
example 'audit is created' do
69+
expect(Travis::API::V3::Models::Audit.last.source_id).to eq(repo.id)
70+
expect(Travis::API::V3::Models::Audit.last.source_type).to eq('Repository')
71+
end
6872
end
6973
end
7074

spec/v3/services/env_var/update_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@
8989
example 'does not clobber other settings' do
9090
expect(repo.reload.settings['foo']).to eq 'bar'
9191
end
92+
example 'audit is created' do
93+
expect(Travis::API::V3::Models::Audit.last.source_id).to eq(repo.id)
94+
expect(Travis::API::V3::Models::Audit.last.source_type).to eq('Repository')
95+
end
9296
end
9397

9498
context do

spec/v3/services/env_vars/create_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@
6666
)
6767
end
6868
example { expect(repo.reload.env_vars.count).to eq(0) }
69+
example 'audit is created' do
70+
expect(Travis::API::V3::Models::Audit.last.source_id).to eq(repo.id)
71+
expect(Travis::API::V3::Models::Audit.last.source_type).to eq('Repository')
72+
expect(Travis::API::V3::Models::Audit.last.source_changes).to eq({"settings"=>{"env_vars"=>{"created"=> "{\"name\"=>\"FOO\", \"value\"=>\"bar\", \"public\"=>false}"}}})
73+
end
6974
end
7075

7176
describe 'authenticated, existing repo, env var already exists' do

0 commit comments

Comments
 (0)