Skip to content

Commit

Permalink
Merge pull request #15817 from mkanoor/automate_rest_work
Browse files Browse the repository at this point in the history
Added AutomateWorkspace model
  • Loading branch information
Fryguy authored Sep 6, 2017
2 parents 1d27a3d + bb02c3c commit 265d3eb
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
17 changes: 17 additions & 0 deletions app/models/automate_workspace.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class AutomateWorkspace < ApplicationRecord
include UuidMixin
belongs_to :user
belongs_to :tenant
validates :tenant, :presence => true
validates :user, :presence => true

def merge_output!(hash)
if hash['workspace'].nil? || hash['state_vars'].nil?
raise ArgumentError, "No workspace or state_vars specified for edit"
end

self[:output] = (output || {}).deep_merge(hash)
save!
self
end
end
4 changes: 4 additions & 0 deletions spec/factories/automate_workspace.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FactoryGirl.define do
factory :automate_workspace do
end
end
22 changes: 22 additions & 0 deletions spec/models/automate_workspace_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
describe AutomateWorkspace do
describe "#merge_output!" do
let(:user) { FactoryGirl.create(:user_with_group, :userid => "admin") }
let(:aw) { FactoryGirl.create(:automate_workspace, :user => user, :tenant => user.current_tenant) }
it "raises error on invalid hash" do
expect { aw.merge_output!({}) }.to raise_exception(ArgumentError)
end

it "properly merges the hash with the new output" do
hash = {'workspace' => {'a' => 1}, 'state_vars' => {'b' => 2}}
partial_hash = {'workspace' => {'c' => 1}, 'state_vars' => {} }
merged_hash = {'workspace' => {'a' => 1, 'c' => 1}, 'state_vars' => {'b' => 2}}

aw.merge_output!(hash)
aw.reload
aw.merge_output!(partial_hash)
aw.reload

expect(aw.output).to eq(merged_hash)
end
end
end

0 comments on commit 265d3eb

Please sign in to comment.