diff options
author | Ash McKenzie <amckenzie@gitlab.com> | 2018-07-26 17:47:13 +1000 |
---|---|---|
committer | Ash McKenzie <amckenzie@gitlab.com> | 2018-07-30 14:13:42 +1000 |
commit | 28ff59405111209bbf5cd6cb59b4ffd648922a74 (patch) | |
tree | 0b8dc539f2d5b8e304a2d9d744cd2774753d438b | |
parent | 5ef06ac7eaf91c7ee4c32ed63c389b87aece5de8 (diff) | |
download | gitlab-shell-28ff59405111209bbf5cd6cb59b4ffd648922a74.tar.gz |
New User class
-rw-r--r-- | lib/user.rb | 25 | ||||
-rw-r--r-- | spec/user_spec.rb | 52 |
2 files changed, 77 insertions, 0 deletions
diff --git a/lib/user.rb b/lib/user.rb new file mode 100644 index 0000000..6078083 --- /dev/null +++ b/lib/user.rb @@ -0,0 +1,25 @@ +require_relative 'gitlab_net' + +class User + ANONYMOUS_USER = 'Anonymous'.freeze + + def initialize(key_id, audit_usernames: false) + @key_id = key_id + @audit_usernames = audit_usernames + end + + def username + @username ||= begin + user = GitlabNet.new.discover(key_id) + user ? "@#{user['username']}" : ANONYMOUS_USER + end + end + + def log_username + audit_usernames ? username : "user with key #{key_id}" + end + + private + + attr_reader :key_id, :audit_usernames +end diff --git a/spec/user_spec.rb b/spec/user_spec.rb new file mode 100644 index 0000000..5677aec --- /dev/null +++ b/spec/user_spec.rb @@ -0,0 +1,52 @@ +require_relative 'spec_helper' +require_relative '../lib/user' + +describe User, vcr: true do + let(:key_id) { 'key-1' } + let(:username) { 'testuser' } + let(:api) { double(GitlabNet) } + + let(:discover_payload) { { 'username' => username } } + let(:audit_usernames) { nil } + + before do + allow(GitlabNet).to receive(:new).and_return(api) + allow(api).to receive(:discover).with(key_id).and_return(discover_payload) + end + + subject { described_class.new(key_id, audit_usernames: audit_usernames) } + + describe '#username' do + context 'with a valid user' do + it "returns '@testuser'" do + expect(subject.username).to eql '@testuser' + end + end + + context 'without a valid user' do + let(:discover_payload) { nil } + + it "returns 'Anonymous'" do + expect(subject.username).to eql 'Anonymous' + end + end + end + + describe '#log_username' do + context 'when audit_usernames is true' do + let(:audit_usernames) { true } + + it "returns 'testuser'" do + expect(subject.log_username).to eql '@testuser' + end + end + + context 'when audit_usernames is false' do + let(:audit_usernames) { false } + + it "returns 'user with key key-1'" do + expect(subject.log_username).to eql 'user with key key-1' + end + end + end +end |