api_helpers_spec.rb 4.8 KB
Newer Older
1 2
require 'spec_helper'

J
Jeroen van Baarsen 已提交
3
describe API, api: true do
4
  include API::APIHelpers
5 6 7 8 9 10 11 12 13 14 15
  include ApiHelpers
  let(:user) { create(:user) }
  let(:admin) { create(:admin) }
  let(:key) { create(:key, user: user) }

  let(:params) { {} }
  let(:env) { {} }

  def set_env(token_usr, identifier)
    clear_env
    clear_param
16 17
    env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = token_usr.private_token
    env[API::APIHelpers::SUDO_HEADER] = identifier
18 19 20 21 22
  end

  def set_param(token_usr, identifier)
    clear_env
    clear_param
23 24
    params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = token_usr.private_token
    params[API::APIHelpers::SUDO_PARAM] = identifier
25 26 27
  end

  def clear_env
28 29
    env.delete(API::APIHelpers::PRIVATE_TOKEN_HEADER)
    env.delete(API::APIHelpers::SUDO_HEADER)
30 31 32
  end

  def clear_param
33 34
    params.delete(API::APIHelpers::PRIVATE_TOKEN_PARAM)
    params.delete(API::APIHelpers::SUDO_PARAM)
35 36 37 38 39 40 41
  end

  def error!(message, status)
    raise Exception
  end

  describe ".current_user" do
42 43 44 45 46
    it "should return nil for an invalid token" do
      env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = 'invalid token'
      current_user.should be_nil
    end

47
    it "should leave user as is when sudo not specified" do
48
      env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token
49 50
      current_user.should == user
      clear_env
51
      params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = user.private_token
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
      current_user.should == user
    end

    it "should change current user to sudo when admin" do
      set_env(admin, user.id)
      current_user.should == user
      set_param(admin, user.id)
      current_user.should == user
      set_env(admin, user.username)
      current_user.should == user
      set_param(admin, user.username)
      current_user.should == user
    end

    it "should throw an error when the current user is not an admin and attempting to sudo" do
      set_env(user, admin.id)
      expect { current_user }.to raise_error
      set_param(user, admin.id)
      expect { current_user }.to raise_error
      set_env(user, admin.username)
      expect { current_user }.to raise_error
      set_param(user, admin.username)
      expect { current_user }.to raise_error
    end
I
Izaak Alpert 已提交
76

77 78 79 80 81 82 83 84 85 86
    it "should throw an error when the user cannot be found for a given id" do
      id = user.id + admin.id
      user.id.should_not == id
      admin.id.should_not == id
      set_env(admin, id)
      expect { current_user }.to raise_error

      set_param(admin, id)
      expect { current_user }.to raise_error
    end
I
Izaak Alpert 已提交
87

88 89 90 91 92 93 94 95 96 97
    it "should throw an error when the user cannot be found for a given username" do
      username = "#{user.username}#{admin.username}"
      user.username.should_not == username
      admin.username.should_not == username
      set_env(admin, username)
      expect { current_user }.to raise_error

      set_param(admin, username)
      expect { current_user }.to raise_error
    end
I
Izaak Alpert 已提交
98

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
    it "should handle sudo's to oneself" do
      set_env(admin, admin.id)
      current_user.should == admin
      set_param(admin, admin.id)
      current_user.should == admin
      set_env(admin, admin.username)
      current_user.should == admin
      set_param(admin, admin.username)
      current_user.should == admin
    end

    it "should handle multiple sudo's to oneself" do
      set_env(admin, user.id)
      current_user.should == user
      current_user.should == user
      set_env(admin, user.username)
      current_user.should == user
      current_user.should == user

      set_param(admin, user.id)
      current_user.should == user
      current_user.should == user
      set_param(admin, user.username)
      current_user.should == user
      current_user.should == user
    end
I
Izaak Alpert 已提交
125

126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
    it "should handle multiple sudo's to oneself using string ids" do
      set_env(admin, user.id.to_s)
      current_user.should == user
      current_user.should == user

      set_param(admin, user.id.to_s)
      current_user.should == user
      current_user.should == user
    end
  end

  describe '.sudo_identifier' do
    it "should return integers when input is an int" do
      set_env(admin, '123')
      sudo_identifier.should == 123
      set_env(admin, '0001234567890')
      sudo_identifier.should == 1234567890

      set_param(admin, '123')
      sudo_identifier.should == 123
      set_param(admin, '0001234567890')
      sudo_identifier.should == 1234567890
    end

    it "should return string when input is an is not an int" do
      set_env(admin, '12.30')
      sudo_identifier.should == "12.30"
      set_env(admin, 'hello')
      sudo_identifier.should == 'hello'
      set_env(admin, ' 123')
      sudo_identifier.should == ' 123'

      set_param(admin, '12.30')
      sudo_identifier.should == "12.30"
      set_param(admin, 'hello')
      sudo_identifier.should == 'hello'
      set_param(admin, ' 123')
      sudo_identifier.should == ' 123'
    end
  end
J
Jeroen van Baarsen 已提交
166
end