Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions exe/psdk-use
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'bundler/setup'
require 'psdk/cli/use'

Psdk::Cli::Use.start
4 changes: 4 additions & 0 deletions lib/psdk/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require 'thor'
require_relative 'cli/version'
require_relative 'cli/plugin'
require_relative 'cli/use'

module Psdk
module Cli
Expand All @@ -28,6 +29,9 @@ def update

desc 'plugin', 'manage PSDK plugins'
subcommand 'plugin', Plugin

desc 'use', 'manage project\'s PSDK version'
subcommand 'use', Use
end
end
end
65 changes: 65 additions & 0 deletions lib/psdk/cli/use.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# frozen_string_literal: true

require 'thor'

module Psdk
module Cli
# Class responsible of handling the psdk-use cli commands
class Use < Thor
package_name 'psdk-use'

desc 'studio [--delete]', 'make the project use Pokemon Studio PSDK version.'
method_option :delete, type: :boolean, aliases: '--delete',
desc: 'delete local pokemonsdk folder'
def studio
ensure_project
# should_delete_local_pokemonsdk_folder = options[:delete]
# if should_delete_local_pokemonsdk_folder
# # TODO: delete pokemonsdk folder from project, remove submodule if it is a submodule
# else
# # TODO: rename pokemonsdk folder from project, remove submodule if it is a submodule
# end
puts options[:delete]
end

desc 'version PSDK_VERSION', 'make the project use a specific PSDK version'
def version(psdk_version)
ensure_project
# TODO: ensure pokemonsdk is in the project, checkout the specific version commit (if found)
puts psdk_version
end

desc 'commit SHA1', 'make the project use a specific PSDK commit'
def commit(sha1)
ensure_project
# TODO: ensure pokemonsdk is in the project, checkout the specific commit
puts sha1
end

desc 'mr URL', 'make the project use a specific MR'
def mr(url)
ensure_project
# TODO: ensure pokemonsdk is in the project, checkout the specific commit from the MR
# (ensuring remotes are configured)
puts url
end

desc 'latest', 'make the project use the latest PSDK commit from development'
def latest
ensure_project
# TODO: ensure pokemonsdk is in the project, checkout development and pull
end

private

def ensure_project
require_relative 'configuration'
Configuration.get(:local)
return if Configuration.project_path

$stderr.puts 'Not in a project'
exit(1)
end
end
end
end
73 changes: 73 additions & 0 deletions spec/psdk/cli/use_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# frozen_string_literal: true

# rubocop:disable Metrics/BlockLength
RSpec.describe Psdk::Cli::Use do
subject { described_class.new }

describe '#ensure_project' do
before do
require 'psdk/cli/configuration'
allow(Psdk::Cli::Configuration).to receive(:get)
end

context 'when project_path is not nil' do
it 'does not exit' do
allow(Psdk::Cli::Configuration).to receive(:project_path).and_return('/path/to/project')
expect { subject.send(:ensure_project) }.not_to raise_error
end
end

context 'when project_path is nil' do
it 'exits with 1 and prints "Not in a project"' do
allow(Psdk::Cli::Configuration).to receive(:project_path).and_return(nil)
expect($stderr).to receive(:puts).with('Not in a project')
expect(subject).to receive(:exit).with(1)
subject.send(:ensure_project)
end
end
end

describe 'public methods' do
before do
allow(subject).to receive(:ensure_project)
# Suppress puts output for cleaner test runs
allow(subject).to receive(:puts)
end

describe '#studio' do
it 'calls ensure_project' do
subject.studio
expect(subject).to have_received(:ensure_project)
end
end

describe '#version' do
it 'calls ensure_project' do
subject.version('24.15')
expect(subject).to have_received(:ensure_project)
end
end

describe '#commit' do
it 'calls ensure_project' do
subject.commit('sha1')
expect(subject).to have_received(:ensure_project)
end
end

describe '#mr' do
it 'calls ensure_project' do
subject.mr('url')
expect(subject).to have_received(:ensure_project)
end
end

describe '#latest' do
it 'calls ensure_project' do
subject.latest
expect(subject).to have_received(:ensure_project)
end
end
end
end
# rubocop:enable Metrics/BlockLength