cli_test.rb 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. require 'test_helper'
  2. require 'shopify_api/cli'
  3. require 'fileutils'
  4. class CliTest < Test::Unit::TestCase
  5. def setup
  6. @test_home = File.join(File.expand_path(File.dirname(__FILE__)), 'files', 'home')
  7. @shop_config_dir = File.join(@test_home, '.shopify', 'shops')
  8. @default_symlink = File.join(@shop_config_dir, 'default')
  9. `rm -rf #{@test_home}`
  10. ENV['HOME'] = @test_home
  11. @cli = ShopifyAPI::Cli.new
  12. FileUtils.mkdir_p(@shop_config_dir)
  13. File.open(config_file('foo'), 'w') do |file|
  14. file.puts valid_options.merge('domain' => 'foo.myshopify.com').to_yaml
  15. end
  16. File.symlink(config_file('foo'), @default_symlink)
  17. File.open(config_file('bar'), 'w') do |file|
  18. file.puts valid_options.merge('domain' => 'bar.myshopify.com').to_yaml
  19. end
  20. end
  21. def teardown
  22. `rm -rf #{@test_home}`
  23. end
  24. test "add with blank domain" do
  25. `rm -rf #{@shop_config_dir}/*`
  26. $stdout.expects(:print).with("Domain? (leave blank for foo.myshopify.com) ")
  27. $stdout.expects(:print).with("API key? ")
  28. $stdout.expects(:print).with("Password? ")
  29. $stdin.expects(:gets).times(3).returns("", "key", "pass")
  30. @cli.expects(:puts).with("\nopen https://foo.myshopify.com/admin/api in your browser to get API credentials\n")
  31. @cli.expects(:puts).with("Default connection is foo")
  32. @cli.add('foo')
  33. config = YAML.load(File.read(config_file('foo')))
  34. assert_equal 'foo.myshopify.com', config['domain']
  35. assert_equal 'key', config['api_key']
  36. assert_equal 'pass', config['password']
  37. assert_equal 'https', config['protocol']
  38. assert_equal config_file('foo'), File.readlink(@default_symlink)
  39. end
  40. test "add with explicit domain" do
  41. `rm -rf #{@shop_config_dir}/*`
  42. $stdout.expects(:print).with("Domain? (leave blank for foo.myshopify.com) ")
  43. $stdout.expects(:print).with("API key? ")
  44. $stdout.expects(:print).with("Password? ")
  45. $stdin.expects(:gets).times(3).returns("bar.myshopify.com", "key", "pass")
  46. @cli.expects(:puts).with("\nopen https://bar.myshopify.com/admin/api in your browser to get API credentials\n")
  47. @cli.expects(:puts).with("Default connection is foo")
  48. @cli.add('foo')
  49. config = YAML.load(File.read(config_file('foo')))
  50. assert_equal 'bar.myshopify.com', config['domain']
  51. end
  52. test "list" do
  53. @cli.expects(:puts).with(" bar")
  54. @cli.expects(:puts).with(" * foo")
  55. @cli.list
  56. end
  57. test "show default" do
  58. @cli.expects(:puts).with("Default connection is foo")
  59. @cli.default
  60. end
  61. test "set default" do
  62. @cli.expects(:puts).with("Default connection is bar")
  63. @cli.default('bar')
  64. assert_equal config_file('bar'), File.readlink(@default_symlink)
  65. end
  66. test "remove default connection" do
  67. @cli.remove('foo')
  68. assert !File.exist?(@default_symlink)
  69. assert !File.exist?(config_file('foo'))
  70. assert File.exist?(config_file('bar'))
  71. end
  72. test "remove non-default connection" do
  73. @cli.remove('bar')
  74. assert_equal config_file('foo'), File.readlink(@default_symlink)
  75. assert File.exist?(config_file('foo'))
  76. assert !File.exist?(config_file('bar'))
  77. end
  78. private
  79. def valid_options
  80. {'domain' => 'snowdevil.myshopify.com', 'api_key' => 'key', 'password' => 'pass', 'protocol' => 'https'}
  81. end
  82. def config_file(connection)
  83. File.join(@shop_config_dir, "#{connection}.yml")
  84. end
  85. end