Skip to content

Commit

Permalink
add workflow client with tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jreidinger committed Mar 30, 2015
1 parent c82feb1 commit 4ba7ce8
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/clients/migration.rb
@@ -0,0 +1,3 @@
require "migration/main_workflow"

::Migration::MainWorkflow.run
77 changes: 77 additions & 0 deletions src/lib/migration/main_workflow.rb
@@ -0,0 +1,77 @@
# ------------------------------------------------------------------------------
# Copyright (c) 2015 SUSE GmbH, All Rights Reserved.
#
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, contact SUSE GmbH.
#
# To contact SUSE about this file by physical or electronic mail, you may find
# current contact information at www.suse.com.
# ------------------------------------------------------------------------------

require "yast"

Yast.import "Sequencer"

module Migration
# Goal of class is to provide main single entry point to start migration
# work-flow. It is UI oriented sequence.
#
class MainWorkflow
include Yast::Logger

# array of migration steps, each step contain client and its args
MIGRATION_STEPS = [
{
client: "repositories",
args: [:sw_single_mode]
}
]
def self.run
workflow = new
workflow.run
end

def run
Yast::Sequencer.Run(aliases, WORKFLOW_SEQUENCE)
end

private

WORKFLOW_SEQUENCE = {
"ws_start" => "repositories", # TODO: store state before run
"repositories" => {
abort: "restore",
next: :next
},
"restore" => {
abort: :abort
}
}

def aliases
{
"restore" => ->() { restore_state },
"repositories" => -> { repositories }
}
end

def restore_state
# TODO: restore after canceling operation
raise "Restoring state is not implemented yet"
end

def repositories
Yast::WFM.CallFunction("repositories", [:sw_single_mode])
end
end
end
33 changes: 33 additions & 0 deletions test/main_workflow_test.rb
@@ -0,0 +1,33 @@
# ------------------------------------------------------------------------------
# Copyright (c) 2015 SUSE GmbH, All Rights Reserved.
#
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, contact SUSE GmbH.
#
# To contact SUSE about this file by physical or electronic mail, you may find
# current contact information at www.suse.com.
# ------------------------------------------------------------------------------

require_relative "test_helper"

require "migration/main_workflow"

describe Migration::MainWorkflow do
describe ".run" do
it "pass workflow sequence to Yast sequencer" do
expect(Yast::Sequencer).to receive(:Run).and_return(:next)

::Migration::MainWorkflow.run
end
end
end

0 comments on commit 4ba7ce8

Please sign in to comment.