diff --git a/lib/gzr/cli.rb b/lib/gzr/cli.rb index 8d34067..ae2ad0c 100644 --- a/lib/gzr/cli.rb +++ b/lib/gzr/cli.rb @@ -45,7 +45,6 @@ def self.exit_on_failure? class_option :force, type: :boolean, default: false, desc: 'Overwrite objects on server' class_option :su, type: :string, desc: 'After connecting, change to user_id given' class_option :width, type: :numeric, default: nil, desc: 'Width of rendering for tables' - class_option :persistent, type: :boolean, default: false, desc: 'Use persistent connection to communicate with host' class_option :token, type: :string, default: nil, desc: "Access token to use for authentication" class_option :token_file, type: :boolean, default: false, desc: "Use access token stored in file for authentication" @@ -59,6 +58,8 @@ def version end map %w(--version -v) => :version map space: :folder # Alias space command to folder +# map permissions: :permission # Alias permissions command to permission + require_relative 'commands/alert' register Gzr::Commands::Alert, 'alert', 'alert [SUBCOMMAND]', 'Command description...' @@ -66,8 +67,8 @@ def version require_relative 'commands/attribute' register Gzr::Commands::Attribute, 'attribute', 'attribute [SUBCOMMAND]', 'Command description...' - require_relative 'commands/permissions' - register Gzr::Commands::Permissions, 'permissions', 'permissions [SUBCOMMAND]', 'Command to retrieve available permissions' + require_relative 'commands/permission' + register Gzr::Commands::Permission, 'permission', 'permission [SUBCOMMAND]', 'Command to retrieve available permission' require_relative 'commands/query' register Gzr::Commands::Query, 'query', 'query [SUBCOMMAND]', 'Commands to retrieve and run queries' diff --git a/lib/gzr/commands/permissions.rb b/lib/gzr/commands/permission.rb similarity index 81% rename from lib/gzr/commands/permissions.rb rename to lib/gzr/commands/permission.rb index 6e203e2..18e19c4 100644 --- a/lib/gzr/commands/permissions.rb +++ b/lib/gzr/commands/permission.rb @@ -21,13 +21,16 @@ # frozen_string_literal: true -require 'thor' +require_relative 'subcommandbase' module Gzr module Commands - class Permissions < Thor + class Permission < SubCommandBase - namespace :permissions + require_relative 'permission/set' + register Gzr::Commands::Permission::Set, 'set', 'set [SUBCOMMAND]', 'Commands pertaining to permission sets' + + namespace :permission desc 'ls', 'List all available permissions' method_option :help, aliases: '-h', type: :boolean, @@ -40,8 +43,8 @@ def ls(*) if options[:help] invoke :help, ['ls'] else - require_relative 'permissions/ls' - Gzr::Commands::Permissions::Ls.new(options).execute + require_relative 'permission/ls' + Gzr::Commands::Permission::Ls.new(options).execute end end @@ -52,8 +55,8 @@ def tree(*) if options[:help] invoke :help, ['tree'] else - require_relative 'permissions/tree' - Gzr::Commands::Permissions::Tree.new(options).execute + require_relative 'permission/tree' + Gzr::Commands::Permission::Tree.new(options).execute end end diff --git a/lib/gzr/commands/permissions/ls.rb b/lib/gzr/commands/permission/ls.rb similarity index 96% rename from lib/gzr/commands/permissions/ls.rb rename to lib/gzr/commands/permission/ls.rb index 635f0d2..9435d21 100644 --- a/lib/gzr/commands/permissions/ls.rb +++ b/lib/gzr/commands/permission/ls.rb @@ -22,16 +22,16 @@ # frozen_string_literal: true require_relative '../../command' -require_relative '../../modules/permissions' +require_relative '../../modules/permission' require 'tty-table' require_relative '../../command' module Gzr module Commands - class Permissions + class Permission class Ls < Gzr::Command - include Gzr::Permissions + include Gzr::Permission def initialize(options) super() @options = options diff --git a/lib/gzr/commands/permission/set.rb b/lib/gzr/commands/permission/set.rb new file mode 100644 index 0000000..2651684 --- /dev/null +++ b/lib/gzr/commands/permission/set.rb @@ -0,0 +1,98 @@ +# The MIT License (MIT) + +# Copyright (c) 2023 Mike DeAngelo Google, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# frozen_string_literal: true + +require_relative '../subcommandbase' + +module Gzr + module Commands + class Permission + class Set < SubCommandBase + + namespace :'permission set' + + desc 'ls', 'List the permission sets in this server.' + method_option :help, aliases: '-h', type: :boolean, + desc: 'Display usage information' + method_option :fields, type: :string, default: 'id,name,permissions,built_in,all_access', + desc: 'Fields to display' + method_option :plain, type: :boolean, default: false, + desc: 'print without any extra formatting' + method_option :csv, type: :boolean, default: false, + desc: 'output in csv format per RFC4180' + def ls(*) + if options[:help] + invoke :help, ['ls'] + else + require_relative 'set/ls' + Gzr::Commands::Permission::Set::Ls.new(options).execute + end + end + + desc 'cat PERMISSION_SET_ID', 'Output json information about a permission set to screen or file' + method_option :help, aliases: '-h', type: :boolean, + desc: 'Display usage information' + method_option :dir, type: :string, + desc: 'Directory to store output file' + method_option :trim, type: :boolean, + desc: 'Trim output to minimal set of fields for later import' + def cat(permission_set_id) + if options[:help] + invoke :help, ['cat'] + else + require_relative 'set/cat' + Gzr::Commands::Permission::Set::Cat.new(permission_set_id,options).execute + end + end + + desc 'import FILE', 'Import a permission set from a file' + method_option :help, aliases: '-h', type: :boolean, + desc: 'Display usage information' + method_option :force, type: :boolean, + desc: 'Overwrite an existing permission set' + method_option :plain, type: :boolean, default: false, + desc: 'print without any extra formatting' + def import(file) + if options[:help] + invoke :help, ['import'] + else + require_relative 'set/import' + Gzr::Commands::Permission::Set::Import.new(file, options).execute + end + end + + desc 'rm PERMISSION_SET_ID', 'Delete the permission_set given by PERMISSION_SET_ID' + method_option :help, aliases: '-h', type: :boolean, + desc: 'Display usage information' + def rm(permission_set_id) + if options[:help] + invoke :help, ['delete'] + else + require_relative 'set/rm' + Gzr::Commands::Permission::Set::Delete.new(permission_set_id,options).execute + end + end + + end + end + end +end diff --git a/lib/gzr/commands/permission/set/cat.rb b/lib/gzr/commands/permission/set/cat.rb new file mode 100644 index 0000000..bd129a7 --- /dev/null +++ b/lib/gzr/commands/permission/set/cat.rb @@ -0,0 +1,60 @@ +# The MIT License (MIT) + +# Copyright (c) 2023 Mike DeAngelo Google, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# frozen_string_literal: true + +require_relative '../../../command' +require_relative '../../../modules/permission/set' +require_relative '../../../modules/filehelper' + +module Gzr + module Commands + class Permission + class Set + class Cat < Gzr::Command + include Gzr::Permission::Set + include Gzr::FileHelper + def initialize(permission_set_id,options) + super() + @permission_set_id = permission_set_id + @options = options + end + + def execute(input: $stdin, output: $stdout) + say_warning(@options) if @options[:debug] + with_session do + data = cat_permission_set(@permission_set_id) + if data.nil? + say_warning "Permission Set #{permission_set_id} not found" + return + end + data = trim_permission_set(data) if @options[:trim] + + write_file(@options[:dir] ? "Permission_Set_#{data[:name]}.json" : nil, @options[:dir],nil, output) do |f| + f.puts JSON.pretty_generate(data) + end + end + end + end + end + end + end +end diff --git a/lib/gzr/commands/permission/set/import.rb b/lib/gzr/commands/permission/set/import.rb new file mode 100644 index 0000000..e65ab96 --- /dev/null +++ b/lib/gzr/commands/permission/set/import.rb @@ -0,0 +1,73 @@ +# The MIT License (MIT) + +# Copyright (c) 2023 Mike DeAngelo Google, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# frozen_string_literal: true + +require_relative '../../../../gzr' +require_relative '../../../command' +require_relative '../../../modules/permission/set' +require_relative '../../../modules/filehelper' + +module Gzr + module Commands + class Permission + class Set + class Import < Gzr::Command + include Gzr::Permission::Set + include Gzr::FileHelper + def initialize(file, options) + super() + @file = file + @options = options + end + + def execute(input: $stdin, output: $stdout) + say_warning("options: #{@options.inspect}", output: output) if @options[:debug] + with_session do + permission_set = nil + + read_file(@file) do |data| + search_results = search_permission_sets(name: data[:name]) + if search_results && search_results.length == 1 + name = data[:name] + if !@options[:force] + raise Gzr::CLI::Error, "Permission Set #{name} already exists\nUse --force if you want to overwrite it" + end + data.select! do |k,v| + keys_to_keep('update_permission_set').include? k + end + permission_set = update_permission_set(search_results.first[:id], data) + else + data.select! do |k,v| + keys_to_keep('create_permission_set').include? k + end + permission_set = create_permission_set(data) + end + output.puts "Imported permission set #{permission_set[:id]}" unless @options[:plain] + output.puts permission_set[:id] if @options[:name] + end + end + end + end + end + end + end +end diff --git a/lib/gzr/commands/permission/set/ls.rb b/lib/gzr/commands/permission/set/ls.rb new file mode 100644 index 0000000..dcee4cf --- /dev/null +++ b/lib/gzr/commands/permission/set/ls.rb @@ -0,0 +1,78 @@ +# The MIT License (MIT) + +# Copyright (c) 2023 Mike DeAngelo Google, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# frozen_string_literal: true + +require_relative '../../../command' +require_relative '../../../modules/permission/set' +require 'tty-table' + +module Gzr + module Commands + class Permission + class Set + class Ls < Gzr::Command + include Gzr::Permission::Set + def initialize(options) + super() + @options = options + end + + def execute(input: $stdin, output: $stdout) + say_warning(@options) if @options[:debug] + with_session do + data = all_permission_sets(@options[:fields]) + begin + say_ok "No permission sets found" + return nil + end unless data && data.length > 0 + + table_hash = Hash.new + fields = field_names(@options[:fields]) + table_hash[:header] = fields unless @options[:plain] + expressions = fields.collect { |fn| field_expression(fn) } + table_hash[:rows] = data.map do |row| + expressions.collect do |e| + exp = eval "row.#{e}" + if exp.kind_of? Array + exp = exp.join "\n" + end + exp + end + end + table = TTY::Table.new(table_hash) + alignments = fields.collect do |k| + (k =~ /id$/) ? :right : :left + end + begin + if @options[:csv] then + output.puts render_csv(table) + else + output.puts table.render(if @options[:plain] then :basic else :ascii end, multiline: !@options[:plain], alignments: alignments, width: @options[:width] || TTY::Screen.width) + end + end if table + end + end + end + end + end + end +end diff --git a/spec/integration/permissions_spec.rb b/lib/gzr/commands/permission/set/rm.rb similarity index 60% rename from spec/integration/permissions_spec.rb rename to lib/gzr/commands/permission/set/rm.rb index 98952e3..0d9b7f1 100644 --- a/spec/integration/permissions_spec.rb +++ b/lib/gzr/commands/permission/set/rm.rb @@ -1,6 +1,6 @@ # The MIT License (MIT) -# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc. +# Copyright (c) 2023 Mike DeAngelo Google, Inc. # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in @@ -19,16 +19,31 @@ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -RSpec.describe "`gzr permissions` command", type: :cli do - it "executes `gzr help permissions` command successfully" do - output = `gzr help permissions` - expected_output = <<-OUT -Commands: - gzr permissions help [COMMAND] # Describe subcommands or one specific subcommand - gzr permissions ls # List all available permissions +# frozen_string_literal: true - OUT +require_relative '../../../command' +require_relative '../../../modules/permission/set' - expect(output).to eq(expected_output) +module Gzr + module Commands + class Permission + class Set + class Delete < Gzr::Command + include Gzr::Permission::Set + def initialize(permission_set_id,options) + super() + @permission_set_id = permission_set_id + @options = options + end + + def execute(input: $stdin, output: $stdout) + say_warning(@options) if @options[:debug] + with_session do + delete_permission_set(@permission_set_id) + end + end + end + end + end end end diff --git a/lib/gzr/commands/permissions/tree.rb b/lib/gzr/commands/permission/tree.rb similarity index 95% rename from lib/gzr/commands/permissions/tree.rb rename to lib/gzr/commands/permission/tree.rb index b0d36b1..c14dceb 100644 --- a/lib/gzr/commands/permissions/tree.rb +++ b/lib/gzr/commands/permission/tree.rb @@ -22,16 +22,16 @@ # frozen_string_literal: true require_relative '../../command' -require_relative '../../modules/permissions' +require_relative '../../modules/permission' require 'tty-tree' require_relative '../../command' module Gzr module Commands - class Permissions + class Permission class Tree < Gzr::Command - include Gzr::Permissions + include Gzr::Permission def initialize(options) super() @options = options diff --git a/lib/gzr/commands/subcommandbase.rb b/lib/gzr/commands/subcommandbase.rb index 1a268e6..7f81677 100644 --- a/lib/gzr/commands/subcommandbase.rb +++ b/lib/gzr/commands/subcommandbase.rb @@ -29,7 +29,13 @@ class SubCommandBase < Thor # Workaround so that help displays the right name # base on this link # https://github.com/erikhuda/thor/issues/261#issuecomment-69327685 - # No longer needed + def self.banner(command, namespace = nil, subcommand = false) + "#{basename} #{subcommand_prefix} #{command.usage}" + end + + def self.subcommand_prefix + self.namespace + end end end end diff --git a/lib/gzr/modules/permissions.rb b/lib/gzr/modules/permission.rb similarity index 98% rename from lib/gzr/modules/permissions.rb rename to lib/gzr/modules/permission.rb index ef3c62e..2aed7a1 100644 --- a/lib/gzr/modules/permissions.rb +++ b/lib/gzr/modules/permission.rb @@ -22,7 +22,7 @@ # frozen_string_literal: true module Gzr - module Permissions + module Permission def query_all_permissions() data = nil diff --git a/lib/gzr/modules/permission/set.rb b/lib/gzr/modules/permission/set.rb new file mode 100644 index 0000000..484cc63 --- /dev/null +++ b/lib/gzr/modules/permission/set.rb @@ -0,0 +1,123 @@ +# The MIT License (MIT) + +# Copyright (c) 2023 Mike DeAngelo Google, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# frozen_string_literal: true + +module Gzr + module Permission + module Set + + def all_permission_sets(fields=nil) + req = {} + req[:fields] = fields if fields + begin + return @sdk.all_permission_sets(req) + rescue LookerSDK::NotFound => e + return nil + rescue LookerSDK::Error => e + say_error "Error querying all_permission_sets(#{JSON.pretty_generate(req)})" + say_error e + raise + end + end + + def cat_permission_set(set_id, fields=nil) + req = {} + req[:fields] = fields if fields + begin + return @sdk.permission_set(set_id,req)&.to_attrs + rescue LookerSDK::NotFound => e + return nil + rescue LookerSDK::Error => e + say_error "Error querying permission_set(#{set_id},#{JSON.pretty_generate(req)})" + say_error e + raise + end + end + + def trim_permission_set(data) + trimmed = data.select do |k,v| + (keys_to_keep('update_permission_set') + [:id,:built_in]).include? k + end + trimmed + end + + def search_permission_sets(fields: nil, sorts: nil, id: nil, name: nil, all_access: nil, built_in: nil, filter_or: nil) + data = [] + begin + req = {} + req[:fields] = fields unless fields.nil? + req[:sorts] = sorts unless sorts.nil? + req[:id] = id unless id.nil? + req[:name] = name unless name.nil? + req[:all_access] = all_access unless all_access.nil? + req[:built_in] = built_in unless built_in.nil? + req[:filter_or] = filter_or unless filter_or.nil? + req[:limit] = 64 + loop do + page = @sdk.search_permission_sets(req) + data+=page + break unless page.length == req[:limit] + req[:offset] = (req[:offset] || 0) + req[:limit] + end + rescue LookerSDK::NotFound => e + # do nothing + rescue LookerSDK::Error => e + say_error "Error calling search_permission_sets(#{JSON.pretty_generate(req)})" + say_error e + raise + end + data + end + + def update_permission_set(permission_set_id, data) + begin + return @sdk.update_permission_set(permission_set_id, data)&.to_attrs + rescue LookerSDK::Error => e + say_error "Error calling update_permission_set(#{permission_set_id},#{JSON.pretty_generate(data)})" + say_error e + raise + end + end + + def create_permission_set(data) + begin + return @sdk.create_permission_set(data)&.to_attrs + rescue LookerSDK::Error => e + say_error "Error calling create_permission_set(#{JSON.pretty_generate(data)})" + say_error e + raise + end + end + + def delete_permission_set(permission_set_id) + begin + return @sdk.delete_permission_set(permission_set_id) + rescue LookerSDK::Error => e + say_error "Error calling delete_permission_set(#{permission_set_id}})" + say_error e + raise + end + end + + end + end +end diff --git a/spec/integration/permissions/ls_spec.rb b/spec/integration/permission/ls_spec.rb similarity index 88% rename from spec/integration/permissions/ls_spec.rb rename to spec/integration/permission/ls_spec.rb index 97dec88..f858d96 100644 --- a/spec/integration/permissions/ls_spec.rb +++ b/spec/integration/permission/ls_spec.rb @@ -19,12 +19,12 @@ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -RSpec.describe "`gzr permissions ls` command", type: :cli do - it "executes `gzr permissions help ls` command successfully" do - output = `gzr permissions help ls` +RSpec.describe "`gzr permission ls` command", type: :cli do + it "executes `gzr permission help ls` command successfully" do + output = `gzr permission help ls` expected_output = <<-OUT Usage: - gzr permissions ls + gzr permission ls Options: -h, [--help], [--no-help] # Display usage information diff --git a/spec/integration/permission_spec.rb b/spec/integration/permission_spec.rb new file mode 100644 index 0000000..c58313f --- /dev/null +++ b/spec/integration/permission_spec.rb @@ -0,0 +1,41 @@ +# The MIT License (MIT) + +# Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc. + +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +RSpec.describe "`gzr permission` command", type: :cli do + it "executes `gzr help permission` command successfully" do + output = `gzr help permission` + expected_output = <<-OUT +Commands: + gzr permission help [COMMAND] # Describe subcommands or one specific subcommand + gzr permission ls # List all available permissions + gzr permission set [SUBCOMMAND] # Commands pertaining to permission sets + gzr permission set cat PERMISSION_SET_ID # Output json information about a permission set to screen or file + gzr permission set help [COMMAND] # Describe subcommands or one specific subcommand + gzr permission set import FILE # Import a permission set from a file + gzr permission set ls # List the permission sets in this server. + gzr permission set rm PERMISSION_SET_ID # Delete the permission_set given by PERMISSION_SET_ID + gzr permission tree # List all available permissions in a tree + + OUT + + expect(output).to eq(expected_output) + end +end diff --git a/spec/unit/permissions/ls_spec.rb b/spec/unit/permission/ls_spec.rb similarity index 93% rename from spec/unit/permissions/ls_spec.rb rename to spec/unit/permission/ls_spec.rb index 45e05be..f09c5e4 100644 --- a/spec/unit/permissions/ls_spec.rb +++ b/spec/unit/permission/ls_spec.rb @@ -19,9 +19,9 @@ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -require 'gzr/commands/permissions/ls' +require 'gzr/commands/permission/ls' -RSpec.describe Gzr::Commands::Permissions::Ls do +RSpec.describe Gzr::Commands::Permission::Ls do it "executes `ls` command successfully" do require 'sawyer' response_doc = { :permission=>"sudo", :parent=>"see_users", :description=>"Enables sudo-ing" } @@ -36,7 +36,7 @@ output = StringIO.new options = {} - command = Gzr::Commands::Permissions::Ls.new(options) + command = Gzr::Commands::Permission::Ls.new(options) command.instance_variable_set(:@sdk, mock_sdk)