/spec/td/client/db_api_spec.rb

https://gitlab.com/vectorci/td-client-ruby · Ruby · 123 lines · 108 code · 15 blank · 0 comment · 0 complexity · e1a670f9f39583d289d05b85d7158ced MD5 · raw file

  1. require 'spec_helper'
  2. require 'td/client/spec_resources'
  3. describe 'Database API' do
  4. include_context 'spec symbols'
  5. include_context 'common helper'
  6. let :api do
  7. API.new(nil)
  8. end
  9. let :client do
  10. Client.new(apikey)
  11. end
  12. describe "'create_database' API" do
  13. it 'should create a new database' do
  14. stub_api_request(:post, "/v3/database/create/#{e(db_name)}").
  15. to_return(:body => {'database' => db_name}.to_json)
  16. expect(api.create_database(db_name)).to be true
  17. end
  18. it 'should return 400 error with invalid name' do
  19. invalid_name = 'a'
  20. err_msg = "Name must be 3 to 256 characters, got #{invalid_name.length} characters. name = '#{invalid_name}'"
  21. stub_api_request(:post, "/v3/database/create/#{e(invalid_name)}").
  22. to_return(:status => 400, :body => {'message' => err_msg}.to_json)
  23. expect {
  24. api.create_database(invalid_name)
  25. }.to raise_error(TreasureData::APIError, /#{err_msg}/)
  26. end
  27. it 'should return 409 error with duplicated name' do
  28. err_msg = "Database #{db_name} already exists"
  29. stub_api_request(:post, "/v3/database/create/#{e(db_name)}").
  30. to_return(:status => 409, :body => {'message' => err_msg}.to_json)
  31. expect {
  32. api.create_database(db_name)
  33. }.to raise_error(TreasureData::AlreadyExistsError, /#{err_msg}/)
  34. end
  35. end
  36. describe "'list_databases' API" do
  37. it 'should list the databases with count, created_at, updated_at, organization, and permission' do
  38. databases = [
  39. ["db_1", 111, "2013-01-21 01:51:41 UTC", "2014-01-21 01:51:41 UTC", nil, "administrator"],
  40. ["db_2", 222, "2013-02-22 02:52:42 UTC", "2014-02-22 02:52:42 UTC", nil, "full_access"],
  41. ["db_3", 333, "2013-03-23 03:53:43 UTC", "2014-03-23 03:53:43 UTC", nil, "import_only"],
  42. ["db_4", 444, "2013-04-24 04:54:44 UTC", "2014-04-24 04:54:44 UTC", nil, "query_only"]
  43. ]
  44. stub_api_request(:get, "/v3/database/list").
  45. to_return(:body => {'databases' => [
  46. {'name' => databases[0][0], 'count' => databases[0][1], 'created_at' => databases[0][2], 'updated_at' => databases[0][3], 'organization' => databases[0][4], 'permission' => databases[0][5]},
  47. {'name' => databases[1][0], 'count' => databases[1][1], 'created_at' => databases[1][2], 'updated_at' => databases[1][3], 'organization' => databases[1][4], 'permission' => databases[1][5]},
  48. {'name' => databases[2][0], 'count' => databases[2][1], 'created_at' => databases[2][2], 'updated_at' => databases[2][3], 'organization' => databases[2][4], 'permission' => databases[2][5]},
  49. {'name' => databases[3][0], 'count' => databases[3][1], 'created_at' => databases[3][2], 'updated_at' => databases[3][3], 'organization' => databases[3][4], 'permission' => databases[3][5]}
  50. ]}.to_json)
  51. db_list = api.list_databases
  52. databases.each {|db|
  53. expect(db_list[db[0]]).to eq(db[1..-1])
  54. }
  55. end
  56. end
  57. describe "'databases' Client API" do
  58. it 'should return an array of Databases objects containing name, count, created_at, updated_at, organization, and permission' do
  59. databases = [
  60. ["db_1", 111, "2013-01-21 01:51:41 UTC", "2014-01-21 01:51:41 UTC", nil, "administrator"],
  61. ["db_2", 222, "2013-02-22 02:52:42 UTC", "2014-02-22 02:52:42 UTC", nil, "full_access"],
  62. ["db_3", 333, "2013-03-23 03:53:43 UTC", "2014-03-23 03:53:43 UTC", nil, "import_only"],
  63. ["db_4", 444, "2013-04-24 04:54:44 UTC", "2014-04-24 04:54:44 UTC", nil, "query_only"]
  64. ]
  65. stub_api_request(:get, "/v3/database/list").
  66. to_return(:body => {'databases' => [
  67. {'name' => databases[0][0], 'count' => databases[0][1], 'created_at' => databases[0][2], 'updated_at' => databases[0][3], 'organization' => databases[0][4], 'permission' => databases[0][5]},
  68. {'name' => databases[1][0], 'count' => databases[1][1], 'created_at' => databases[1][2], 'updated_at' => databases[1][3], 'organization' => databases[1][4], 'permission' => databases[1][5]},
  69. {'name' => databases[2][0], 'count' => databases[2][1], 'created_at' => databases[2][2], 'updated_at' => databases[2][3], 'organization' => databases[2][4], 'permission' => databases[2][5]},
  70. {'name' => databases[3][0], 'count' => databases[3][1], 'created_at' => databases[3][2], 'updated_at' => databases[3][3], 'organization' => databases[3][4], 'permission' => databases[3][5]}
  71. ]}.to_json)
  72. db_list = client.databases.sort_by { |e| e.name }
  73. databases.length.times {|i|
  74. expect(db_list[i].name).to eq(databases[i][0])
  75. expect(db_list[i].count).to eq(databases[i][1])
  76. expect(db_list[i].created_at).to eq(Time.parse(databases[i][2]))
  77. expect(db_list[i].updated_at).to eq(Time.parse(databases[i][3]))
  78. expect(db_list[i].org_name).to eq(databases[i][4])
  79. expect(db_list[i].permission).to eq(databases[i][5].to_sym)
  80. }
  81. end
  82. end
  83. describe "'database' Client API" do
  84. it "should return the Databases object corresponding to the name and containing count, created_at, updated_at, organization, and permission" do
  85. databases = [
  86. ["db_1", 111, "2013-01-21 01:51:41 UTC", "2014-01-21 01:51:41 UTC", nil, "administrator"],
  87. ["db_2", 222, "2013-02-22 02:52:42 UTC", "2014-02-22 02:52:42 UTC", nil, "full_access"],
  88. ["db_3", 333, "2013-03-23 03:53:43 UTC", "2014-03-23 03:53:43 UTC", nil, "import_only"],
  89. ["db_4", 444, "2013-04-24 04:54:44 UTC", "2014-04-24 04:54:44 UTC", nil, "query_only"]
  90. ]
  91. stub_api_request(:get, "/v3/database/list").
  92. to_return(:body => {'databases' => [
  93. {'name' => databases[0][0], 'count' => databases[0][1], 'created_at' => databases[0][2], 'updated_at' => databases[0][3], 'organization' => databases[0][4], 'permission' => databases[0][5]},
  94. {'name' => databases[1][0], 'count' => databases[1][1], 'created_at' => databases[1][2], 'updated_at' => databases[1][3], 'organization' => databases[1][4], 'permission' => databases[1][5]},
  95. {'name' => databases[2][0], 'count' => databases[2][1], 'created_at' => databases[2][2], 'updated_at' => databases[2][3], 'organization' => databases[2][4], 'permission' => databases[2][5]},
  96. {'name' => databases[3][0], 'count' => databases[3][1], 'created_at' => databases[3][2], 'updated_at' => databases[3][3], 'organization' => databases[3][4], 'permission' => databases[3][5]}
  97. ]}.to_json)
  98. i = 1
  99. db = client.database(databases[i][0])
  100. expect(db.name).to eq(databases[i][0])
  101. expect(db.count).to eq(databases[i][1])
  102. expect(db.created_at).to eq(Time.parse(databases[i][2]))
  103. expect(db.updated_at).to eq(Time.parse(databases[i][3]))
  104. expect(db.org_name).to eq(databases[i][4])
  105. expect(db.permission).to eq(databases[i][5].to_sym)
  106. end
  107. end
  108. end